• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

트랙잭션 전파 구현에 대해서 문의 드립니다.

23.02.11 12:01 작성 조회수 136

0

안녕하세요. 강의 항상 잘 보면서 많은 도움 받고 있습니다.

트랜잭션 전파 구현에 대해서 질문이 있어서 질문 드립니다.

 

트랜잭션 전파 활용 강의를 보면 예제로 MemberService에서 MemberRepository와 LogRepository에 각각 함수를 실행하고 MemberService, MemberRepository, LogRepository에 모두 @Transactional을 사용해서 하나의 물리 트랜잭션으로 묶어주고 만약 MemberRepository에서 에러가 발생하면 LogRepository도 rollback이 되지 않는거는 이해를 했습니다.

제가 프로젝트를 하면서 구현을 하다가 이 부분에 의문이 생겨서 문의 드립니다.

예를 들어서 제가 회원이 가입을 하면 가입 처리, 인사 메시지 발송, 포인트 지급에 대한 동작을 하려고 하는데 역할 분리를 위해서 각각 MemberService, MessageService, PointService에서 해당 동작을 처리하도록 만들었습니다.

#MemberController
@Transactional???
public MemberResponse register() {
    memberService.store();
    messageService.send();
    pointService.store();
}

#MemberService
@Transational
public Member store() {
   #가입처리
}

#MessageService
@Transactional
public void send() {
   #메시지 발송
   #발송 
}

#PointService
@Transactional
public void store() {
   #가입 포인트 지급
}

위와 같은 방식으로 처리를 하려고 하고 하나의 과정에서라도 문제가 있다면 전부 rollback을 시키려고 합니다.

 

여기서 의문점은 MemberService, MessageService, PointService를 호출하는 Controller에서 Transactional을 선언하는게 맞는건가? 싶어서 문의 드립니다.

이 구조에서라면 Controller에 Transactional을 선언하는게 맞을 것 같은데 다른 예시나 인터넷에 찾아봐도 Controller에서 Transactional을 사용하는 예시를 찾지 못 했습니다.

아니면 어떤 방식으로 구현하면 좋을지 답변 부탁드립니다.

감사합니다!

답변 1

답변을 작성해보세요.

1

안녕하세요. max님

여러 기능을 중앙에서 모아서 처리하는 것을 보통 퍼사드라고 하는데요.

이러한 퍼사드 계층을 하나 만드시면 됩니다.

Controller -> 퍼사드(트랜잭션 시작) -> 서비스들

감사합니다.