티스토리 뷰

Back-end/Spring Boot

[Spring Boot] 트랜잭션

jhkang-dev 2018. 10. 20. 13:24

안녕하세요 강정호입니다. 오늘은 Spring의 트랜잭션에 대해 공부해 볼게요.


트랜잭션이란?


트랜잭션은 여러 작업이 구성되어 있는 하나의 작업 단위입니다. 예를 들어서 쉽게 설명 해볼게요.

출금을 하려면 여러가지 일들이 같이 순차적으로 이루어져야 해요.

1) 계좌 잔액 조회

2) 출금하려는 금액과 계좌 잔액 비교

3) 출금

4) 로깅

이렇게 4가지 작업이 모두 수행되어야 합니다. 이 4가지 작업을 합한 것이 하나의 트랜잭션 단위가 되는 것입니다. 트랜잭션의 특징은 4가지의 작업 중 1개만 에러가 발생할 경우 바로 원상 복구를 해야합니다. 그것을 rollback 이라고 합니다. 4가지 작업이 모두 정상적으로 이루어졌다면 commit을 합니다.

즉, 트랜잭션 관리는 이러한 작업들의 성공여부에 따라 원상 복구 또는 적용하는 것을 말합니다.


스프링에서의 트랜잭션 관리?


1. PlatformTransactionManager 

: 스프링 트랜잭션 처리의 중심이 되는 인터페이스이다. 

해당 인터페이스는 트랜잭션 처리에 필요한 API를 제공하며 개발자가 API를 호출하는 것으로 트랜잭션 조작을 수행할 수 있다.



PlatforTransactionManager의 구현 클래스


1. DataSourceTransactionManager : JDBC 및 마이바티스 등의 JDBC 기반 라이브러리로 데이터베이스에 접근하는 경우에 이용한다.

2. HibernateTransactionManager : 하이버네이트를 이용해 데이터베이스에 접근하는 경우에 이용한다.

3. JpaTransactionManager : JPA로 데이터베이스에 접근하는 경우에 이용한다

4. JtaTransactionManager

5. WebLogicJtaManager

6. WebSpereUowTransaction


트랜잭션 적용 방법


  • 선언적 트랜잭션 : 미리 선언된 룰에 따라 트랜잭션을 제어하는 방법
    • Transactional 어노테이션을 이용한 선언적 트랜잭션
    • XML 설정을 이용한 선언적 트랜잭션

@Transactional

1
2
3
4
5
6
7
8
비즈니스 메서드(){
    Board id=5인 게시물 조회  **같은 트랜잭션 안에서는 EntityManager가 DB에서 조회해서 객체 가지고
                                2번쨰 SELECT 할 떄는 그 객체를 반환한다.
                                같은 트랜잭션 내에서는 1차 캐시 적용.
    Board 수정
    
    Board id=5인 게시물 조회
}
cs







안녕하세요 강정호입니다. 3일차 수업에 대해 공부해볼게요



레이어드 아키텍쳐


사용자와 서버 사이에 연결해주는 것이 필요하다.


그것을 바운더리라고 한다. 화면이 될 수 있고


Boudary, Control, Entity : 프로그램을 분석할 때 사용되는 개념들이다.


트랜잭션

- Spring JDBC

- Spring DATA JPA

- REST template


오늘 공부할 내용



- Spring JDBC

- Spring DATA JPA


가져야할 사전 지식



- JDBC

- SQL

- DBMS



JDBC

1. 입력 수정 삭제

- DB 연결(interface connection - DriverManager)

- SQL 준비 : SQL을 입력하고 실행할 때마다 파싱을 하여 데이터베이스가 알아들을 수 있게 한다. 이 때 오버헤드가 많이 든다. 물음표가 있는 부분만 파싱이 된다. 그 외의 동일한 부분은 파싱이 안되서 성능이 좋아진다. ex) insert into table values(?,?,?,?)

- 바인딩 : ? 값을 넣는 것. PreparedStatement.

- PreparedStatement.executeUpdate() : 쿼리 실행

- DB 연결 close.

2. 1건 조회

- DB 연결

- SQL 준비

- executeQuery : 

- ResultSet 인터페이스를 이용하여 1건씩 가져온다.

- next() 메서드를 이용하여 한건씩 읽는다.

- getxxx() : 컬럼별로 읽어온다.

3. 여러건 조회

- DB 연결

- SQL 준비


** DBMS 연결할 때 사용하는 인터페이스 : Connection. DB 연결.

** 바인딩할 때 사용되는 인터페이스 : PreparedStatement. SQL 바인딩 실행

** 결과를 읽어올 때 사용되는 인터페이스 : ResultSet. SELECT 결과를 읽어온다


--> Connection은 DBMS 만든사람이 Driver.class를 만들어서 연결을 한다. Java는 DB를 사용하기 위한 인터페이스만 제공하고 그것을 구현하고 있는것은 Driver.class이다. 이것은 각각의 DB 벤더들이 만든다.


DB 프로그래밍을 한다는 것은 인터페이스와 Driver를 이용하여 프로그래밍 하는 것이다.

근데 이렇게 매번하면 SELECT 하나만 하려고 해도 코드를 여러줄 사용해야 한다. 중복이 심하다


XML 파일에 SQL을 저장하여 관리.


MyBatis 사용의 장점

- 사용하기 편하다.

- Spring JDBC


자바는 객체지향 언어이다. 

** SQL은 객체지향적이지 않다.


패러다임의 충돌 : SQL 중심으로 사고하는 것과 객체지향적으로 사고하는 것은 근본적으로 차이가 있다. DBMS 프로그래밍도 객체지향적으로 해야 한다는 의견 

그래서 SQL을 없애기 시작! 프로그래머는 객체지향적으로 생걱하고, 읽어오는 것을  다란사람이 접근 못하게 ㅎ려고요


ORM 기술


Hibernate : ORM 기술.

- 자바쪽은 커뮤니티가 좋다. --> 표준을 정한다.

- JPA : 자바 ORM 쪽에서는 표준이다. 이 JPA를 구현해 주는 것이 Hibernate이다.


Spring DATA JPA : 


















댓글