@Transactional
JPA에서의 데이터 변경이나 로직들은 트랜잭션 범위에서 영속성 컨텍스트 전략을 사용하고 있기 때문에 가급적 트렌젝션 안에서 처리되어야 한다.
@Transactional(readOnly = true)
readOnly = true를 사용하면 조회 메서드에서 읽기전용 트렌젝션으로 인식되기 때문에 불필요한 리소스를 줄여 성능이 최적화된다.
조회 메서드가 아닌것에 readOnly = true를 사용하면 데이터 변경이 안되므로 사용 금지
@Service
@Transactional(readOnly = true) // 전체를 읽기 전용으로
public class MemberService {
// 회원 가입
@Transactional // 읽기 전용이 아닌 메서드에만 따로 지정
public Long join(Member member) {
// ...
}
// 회원 조회
public Member findMember(Long memberId) {
// ...
}
// 회원 전체 조회
public List<Member> findMembers() {
// ...
}
}