인프런 커뮤니티 질문&답변

빠르면비행기님의 프로필 이미지

작성한 질문수

실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발

주문 서비스 개발

transactional 질문.

작성

·

179

0

transactional 을 리포지토리단에 걸지 않고, 서비스단에 거는 이유가 있을까요~?

답변 1

0

안녕하세요. HK_LEE님, 공식 서포터즈 David입니다.
.
1. 서비스 레이어와 리포지토리 레이어가 갖는 역할이 다릅니다.

2. 서비스 레이어에서 실행되는 로직을 하나의 트랜잭션으로 묶고 싶기 때문입니다.

 

서비스 레이어는 인프라스트럭처(DB, Mail 등)와의 협업, 도메인이 처리할 수 있는 범위를 넘어서는 비즈니스 로직등을 처리합니다.

리포지토리 레이어는 DB에 접근하는 로직을 처리합니다.

만약 서비스 레이어가 아닌 리포지토리 레이어에 트랜잭션을 걸어준다면 서비스 레이어에서 하나의 트랜잭션으로 묶여야 하는 로직들은 모두 리포지토리 레이어로 옮겨야 합니다. 그렇게 되면 리포지토리 레이어는 DB와 통신하여 데이터를 관리하는 것 이상의 역할을 감당하게 되는 것입니다. 유지보수 측면에서도 좋지 않은 구조입니다.

 

참고

* https://www.inflearn.com/questions/250279

* https://www.inflearn.com/questions/77417

.
감사합니다.