Service Layer에서 Transactional

Panda·2022년 4월 3일
0

Spring

목록 보기
18/42

프로젝트 진행하다가 재밌는 기술을 발견해서 글을 써봤습니다.

Service Layer에서 Transactional 기능

@Transactional 어노테이션은 저는 이전에 TDD 작성하다가 트랜잭션을 rollback 해주는 기능이라고 알고있었습니다!

근데 평소처럼 기능을 구현하다가 구글링에서 어떤 예제를 보았는데 Service Layer에서 @Transactional을 사용하더라고요 물론 보자마자 이게 정확히 어떤 기능을 하는지 바로 감이 오긴 했는데 궁금해서 찾아보니까 안에 기술이 흥미로웠습니다.

먼저 Transactional 미적용을 살펴봅시다.

Transactional 미적용

하나의 서비스에 여러가지 DB 수행이 있다고 가정을 해봅시다.

그러면 해당 DAO 작업 수행마다 DB connection을 부여받아서 작업을 하고 바로 DB에 적용이 되는 구조입니다.

근데 만약에 맨마지막 DAO 작업 수행 때 에러가 발생하게 되면
이전 DAO 작업들도 다시 취소해줘야 하는데 이런 구조면 취소하기 번거롭겠죠?
따라서 Transactional 적용으로 이를 해결할 수 있습니다!

Transactional 적용

Transactional을 적용하게 되면 DB Connection이 단 하나만 존재하게 되어
그 안에서 트랜잭션들을 수행하게 됩니다.

그러면 만약에 마지막 DAO 작업에서 에러가 발생하여도 rollback 한번으로 모든 작업들이 취소가 되기 때문에 되게 편한 구조입니다.
그리고 또 DB Connection을 하나만 사용하기 떄문에 자원 효율성도 좋습니다!
이러한 구조로 인해 미적용 할때의 문제점들을 해결할 수 있습니다.

스프링에서는 이를 Transaction Synchronization라고 합니다.
Transaction Synchronization Manager Interface가 스프링에 있는데
궁금하신 분들은 한번 스프링 까보면 될것같아요!!

느낀 점

Service Layer에 Transactional을 사용한 예제를 처음 보자마자
어떤 기능을 하는지 바로 알았지만 여기에서 멈추지알고 공부해보니까

생각외로 좋은 내용을 배워갔습니다.

만약 더 안알아봤다면 DB Connection 하나에서 처리되는지도 몰랐고
Transaction Synchronization 작동 순서도 몰랐을 것 같습니다.

역시 궁금한건 한번씩 찾아봐서 한번이라도 눈으로 익혀두면 좋은 것 같습니다!

참고 사이트

profile
실력있는 개발자가 되보자!

0개의 댓글