본문 바로가기

프레임워크/Spring boot

@Transactional을 선언했을때의 코드 흐름(내부 구조까지)

Transcational은 더 이상 쪼갤수 없는 실행 흐름을 만들기 위한 키워드이다.

예를 들어, 계좌에서 100원을 주고 누군가에게 주는 작업은 100원을 빼고 100원을 주는 두 개의 서비스가 항상 같이 성공하거나 같이 실패하는 경우여야 가능하다. 이럴때, Transcational 키워드를 붙여 사용한다.

Transaction의 내부 흐름

Spring은 우선 해당 Annotation이 붙은 Method들을 찾아 Proxy 객체로 생성합니다.

Proxy객체로 생성 한 후, 보통 Proxy객체의 Method.invoke()라는 함수를 실행시킵니다.

그 함수를 실행시키기 전과 실행 시킨 후, DatasourceTransactionManager객체로부터 Connection객체를 얻습니다.

그렇다면, JDBC가 Database와 접근하기 위한 Connection pool에서 Connection객체를 할당해줍니다.

그 후, 성공을 완료하면 Commit() Method를 실패하면 RollBack() Method를 실행합니다.

 

코드로 나타내면 다음과 같습니다.

새벽 1시이므로, 이후에 계속.....