#4. Spring_ @Transactional

박주현·2023년 8월 12일
0
post-thumbnail

오늘은 강의를 들으며 가장 이해하는데 시간이 많이 걸리고
어렵다고 느껴졌던 @Transactional 에 대해서 정리를,,,해보자,,,

1. 트랜잭션

먼저, 트랜잭션이라는 것을 이해해야한다.
트랜잭션이란, 하나의 논리적 작업 단위로 수행되는 일련의 작업을 뜻한다..

정말, 짧지만 이해안되는 말이다.
간단히 얘기해서 한번에 묶어서 처리하는데 하나가 취소되면 모두 취소되고 모두 완성하면 모두 완성된다.

1.1 ACID

정보처리기사에서 주구장창 나오는 부분 중 하나이다.
1. Atomicity (원자성) : 트랜잭션과 관련된 작업들이 부분적으로 실행되다가 중단되지 않는 것을 보장.
2. Consistenct (일관성) : 트랜잭션이 실행을 성공한다면 일관성있는 데이터베이스 상태로 유지해야함.
3. Isolation (고립성) : 트랜잭션 수행 시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장. (낄끼빠빠!)
4. Durability (지속성) : 성공적으로 수행된 트랜잭션은 영원히 반영되어야함.

2. 스프링의 @Transactional

자, 이제 스프링에서 처리하는 방법에 대해서 말해보자.

스프링에서는 트랜잭션이 필요한 서비스 클래스나 메서드에 @Transactional 이라는 어노테이션을 붙여주면 된다.
이때, 클래스와 메서드 둘다 어노테이션이 붙어있다면 메서드의 선언이 우선 적용된다.

2.1 예시

사진의 코드를 보면, addUser에 트랜잭션이 붙어있는 것을 볼 수 있다.
이러한 경우에는 오른쪽 코드의 19번째 줄 코드부터 트랜잭션이 시작하고

"return user;" 와 함께 트랜잭션이 끝이난다.

하지만 addUser 가 호출되면서 왼쪽 코드로 넘어오게 되는데!
왼쪽 메소드에도 트랜잭션이 실행되어야하는데

이미 오른쪽에서 실행되었기 때문에 새로운 트랜잭션이 만들어지는게 아닌!! 기존의 트랜잭션에 포함된다.

profile
빌드업 막 시작하는 개발자

1개의 댓글

comment-user-thumbnail
2023년 8월 12일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기

관련 채용 정보