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

chaerin920님의 프로필 이미지

작성한 질문수

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

주문 서비스 개발

Service에 @Transactional(readOnly=true)는 필수적으로 넣어줘야 하는 것인지 궁금합니다.

작성

·

561

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오) 예
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오) 예
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오) 예

[질문 내용]
클래스 영역에서 트랜잭션을 걸어두는 것이 필수적인 내용인지 궁금합니다! 실무에서도 마찬가지로 동일하게 클래스 영역에 사용해서 적용하게 되는 것일까요?

저는 작업할 때 수정이 필요한 메서드에만 @Transactional을 선언해줬었는데 이렇게 처리했던 부분들이 잘못된 부분이었던 것인지 고민이 되어 질문드리게 되었습니다.

정리하자면

클래스단에서 무조건 '@Transactional(readOnly=true)' 를 작성해주는 것을 권장한다면 그렇게 해야하는 이유가 무엇인지 궁금하고,

무조건 걸었을 때 매번 '@Transactional(readOnly=true)' 값을 작성해줘야 하는데 매번 작성하지 않을 수 있는 방법은 없을지 궁금합니다.

감사합니다!

 

답변 1

0

안녕하세요, chaerin920 님! 공식 서포터즈 codesweaver 입니다.

영속성 컨텍스트의 변경은 트랜잭션 내에서 수행햐아 합니다. 그래서 보통 Entity를 관리하는 서비스 클래스에 @Transactional을 붙입니다. 그러나 단순히 조회하는 메소드는 @Transactional을 붙이지 않아도 무방합니다. 말씀하신것처럼 수정이 필요한 메서드에만 @Transactional을 사용하여도 됩니다.

@Transactional 어노테이션의 readonly 속성은 기본적으로 false 인데요, 이 기본값을 그냥 이용하셔도 됩니다. readonly=true 는 Entity를 읽기전용으로 조회하겠다는 의미가 되는데요. 엔터티를 단순히 조회하는 메소드라면 아예 @Transactional을 붙일 이유가 없고, 엔터티를 수정하는 메소드라면 readonly를 false로 두어야 하는데 이미 기본값으로 false 인 상황입니다 :)

감사합니다.