인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

이진우님의 프로필 이미지

작성한 질문수

서버개발자 과제전형 완벽가이드 - 1편

검색 통계 기능 구현 - 검색어 별 통계

서비스에 @Transactional 애노테이션을 사용하시지 않는 이유가 궁금합니다

작성

·

101

·

수정됨

0

안녕하세요 궁금한게 있어 질문 남깁니다.

 

보통 데이터베이스 사용시 서비스 단에 @Transactional을 관습적으로 붙여왔는데, 서비스 로직을 작성하실때 @Transactional 애노테이션을 사용하시지 않은 건 비즈니스 로직이 너무 간단하기 때문에(트랜잭션 논리 단위로 묶을 필요없을 정도로) 생략하신거라고 이해하면 될까요?

 

답변 감사합니다

답변 2

1

J Tech님의 프로필 이미지
J Tech
지식공유자

안녕하세요 진우님~

데이터베이스에 접근하더라도 읽기작업만 일어나는경우에는 readOnly true 옵션으로 작업의 명확성과 최적화를 위해 애노테이션을 달아주시는게 좋겠습니다. (서비스레이어라고 하더라도 데이터베이스에 접근하지 않는경우에는 붙일 필요가 없겠구요) 조회담당 서비스에 빠져있다면 추가하셔서 진행부탁드리겠습니다 🙏

qheogus55님의 프로필 이미지

BookApplicationService에 @Transactional을 달아야 하나요?

그 하위 DailyStatCommandService 같은곳에 트랜잭션을 달아야 하나요 ??

J Tech님의 프로필 이미지
J Tech
지식공유자

실제로 트랜잭션을 시작할 DailyStatCommandService 요기에 달아주시면 될 것 같습니다 🙏

0

인프런 AI 인턴님의 프로필 이미지

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

@Transaction 애노테이션의 사용 여부에 관한 질문을 주셨군요.

서비스 단에서 @Transactional 애노테이션을 사용하지 않은 이유로 비즈니스 로직의 복잡성과 관련이 있을 수 있습니다. 데이터베이스 작업에서 하나 이상의 단위를 트랜잭션으로 묶어야 할 경우 @Transactional을 주로 활용합니다. 트랜잭션은 모든 작업의 성공 또는 실패 여부에 따라 데이터를 일관되게 유지하는 데 도움이 됩니다.

그러나 매우 간단한 비즈니스 로직에서는 트랜잭션을 이용한 복잡한 처리가 필요하지 않기 때문에 생략될 수 있습니다. 이런 경우, 데이터의 일관성을 유지할 필요가 없고 데이터 무결성 문제가 발생할 가능성이 적기 때문이죠.

추가적으로 더 많은 정보가 필요하시다면, 아래 관련 질문들을 확인해 보시는 것도 좋습니다:

  1. 멀티모듈 구성에서 하위 모듈은 java 모듈로 하는 이유가 궁금합니다. - 모듈 간의 의존성 및 프로젝트 구조 관련 설명.
  2. 비즈니스 로직 담당 서비스 - 비즈니스 로직 분리와 CQRS 패턴에 대한 설명.

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