강의

멘토링

커뮤니티

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

우민수님의 프로필 이미지
우민수

작성한 질문수

제미니의 개발실무 - 커머스 백엔드 기본편

코드 느끼기

@Transactional에 관해서 질문드립니다.

작성

·

6

0

안녕하세요!

강의를 보던 중 ReviewService의 트랜잭션 처리에 대해 궁금한 점이 있어 질문드립니다.

 

addReview 함수에서 리뷰를 저장하는 add()와 포인트를 적립하는 earn() 두개의 중요한 함수를 사용하고 있는데, 이는 각각 별도의 트랜잭션으로 처리되어 리뷰는 저장되고 포인트는 적립되지 않는 문제가 발생할 수 있을 것 같습니다.

 

현재 설계에서 addReview()에 @Transactional을 붙이지 않은 특별한 이유가 있으신지 궁금합니다. 혹은 만약 의도적으로 별도 트랜잭션으로 분리한 것이라면 그 이유가 궁금합니다.

 

항상 감사합니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 우민수님.

강의에서 사용된 트랜잭션 처리 방식에 대한 궁금증을 가지고 계신 것 같습니다. @Transactional 애너테이션은 일반적으로 하나의 작업 단위를 전체적으로 성공하거나 실패하게 만드는 것이며, 이는 데이터의 일관성과 원자성을 유지하는 데 도움을 줍니다.

트랜잭션의 중요성

  1. 일관성 유지: 트랜잭션이 없다면 각 작업(addReview, earn 등)이 개별적으로 커밋되어 일부 작업이 성공하고 일부는 실패할 수 있습니다. 이는 데이터 불일치를 초래할 수 있습니다.

  2. 원자성: 모든 작업이 하나의 트랜잭션 내에서 처리되어, 작업 중 하나라도 실패하면 이전의 모든 작업이 롤백됩니다.

addReview()에 @Transactional을 붙이지 않은 이유

  • 만약 addReview 내의 각각의 작업이 독립적으로 처리되길 원한다면 (예: 리뷰는 저장되지만, 포인트 적립은 일시적으로 보류 가능한 경우) 이렇게 설정할 수 있습니다.
  • 혹은 코드가 단순히 누락된 경우일 수도 있습니다.

비슷한 질문을 다룬 토론이 있습니다:
- 서비스 레이어에서 @Transactional을 사용해야 하는 이유
- OrderService에서 조회에 트랜잭션 걸어준 이유가 있을까요?

이 토론에서는 @Transactional을 사용하는 여러 가지 이유와 그 필요성을 설명하고 있어, 좀 더 깊이 있는 이해를 도울 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

우민수님의 프로필 이미지
우민수

작성한 질문수

질문하기