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

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

gogoDevelop님의 프로필 이미지
gogoDevelop

작성한 질문수

스프링 DB 2편 - 데이터 접근 활용 기술

트랜잭션 AOP 주의 사항 - 프록시 내부 호출1

트렌젝션 질문입니다

작성

·

48

·

수정됨

0

트렌젝션을 서비스 클래스에 걸면 이런 문제가 없을 거 같은데, 실무에서는 트렌젝션을 메서드 단위로 거나요??

저 같은 경우 서비스 클래스에 트랜젝션 readonly를 걸고
create, update, delete 등이 필요한 로직에 트렌젝션을 따로 거는 편입니다.

답변 2

0

안녕하세요. gogoDevelop님, 공식 서포터즈 y2gcoder입니다.

AI 인턴의 답변에 덧붙여 답변 드리고 싶습니다!

서비스 로직 내에서 외부 API와 통신하는 로직이 포함되어 있을 때도 해당 서비스 메서드 로직을 전체적으로 트랜잭션으로 묶을 지에 대한 고민이 필요할 것 같습니다. 가령 트랜잭션을 건 서비스 로직 내에서 외부 API와의 통신이 오래 걸리면, 트랜잭션 및 커넥션을 불필요하게 오래 점유하고 있을 수 있습니다!

저는 이런 부분까지 고려해서 트랜잭션을 걸어주는 편인 것 같습니다 🙂

 

감사합니다.

gogoDevelop님의 프로필 이미지
gogoDevelop
질문자

아 그럼 외부 API(OPEN API)에서 데이터를 가져오는 작업의 경우 트랜젝션 readonly가 아니라 아예 안거는 것도 하나의 방법이라는 말씀이신가요?

넵 ㅎㅎ 그럴 때는 트랜잭션만 필요한 부분을 따로 별개의 클래스의 메서드로 추출하여 트랜잭션을 걸어주는 방식도 사용하는 것 같습니다 🙂

만약 외부 API에서 조회만 해오고 DB 작업이 없는 로직이라면 트랜잭션을 열어줄 필요가 없습니다

gogoDevelop님의 프로필 이미지
gogoDevelop
질문자

감사합니다 ㅠ

파이팅입니다!

0

안녕하세요, 인프런 AI 인턴입니다. gogoDevelop님!

트랜잭션을 어디에 적용할지에 대한 결정은 주로 적용하고자 하는 로직의 특성과 프로젝트의 요구 사항에 따라 달라질 수 있습니다.

일반적으로, 트랜잭션은 비즈니스 로직의 경계를 기준으로 설정하는 것이 좋습니다. 이는 비즈니스 로직이 완전하게 수행될 수 있도록 보장하며, 모든 데이터 변경이 일관성 있게 적용되도록 합니다. 실무에서는 보통 다음과 같은 방식으로 트랜잭션을 설정합니다.

  1. 트랜잭션을 서비스 계층에 적용: 서비스 계층은 비즈니스 로직을 구성하는 부분이기 때문에, 여기에 트랜잭션을 설정하는 것이 일반적입니다. 이를 통해 하나의 비즈니스 로직이 완전하게 처리되도록 보장할 수 있습니다.

  2. 메서드 단위 트랜잭션 설정: 경우에 따라 메서드 단위로 트랜잭션을 설정할 수도 있습니다. 이는 특정 작업이 독립적으로 처리되어야 하거나, 조정이 필요한 경우에 유용합니다.

관련 질문 및 답변을 찾기 위해 다음 링크들을 참조하실 수 있습니다:
- Service class의 transactional 메소드 문의
- Transaction 적용구간에 대한 질문

해당 링크들에서는 트랜잭션이 어떻게 적용되는지 서비스 메서드 관점에서의 설명과 예제가 포함되어 있습니다.

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

gogoDevelop님의 프로필 이미지
gogoDevelop

작성한 질문수

질문하기