Service 계층의 public 메서드라고 무조건 Repository 계층을 활용하는 것은 아님 → @Transactional을 클래스에 붙이면 트랜잭션 사용을 원치 않는 public 메서드까지 전부 트랜잭션을 사용하게 된다.
따라서 @Transactional은 메서드에 개별적으로 적용하는 것이 권장된다.
@Transaction 어노테이션을 개별로 적용하는 게 관리하기 까다롭다고 느껴지는 경우 모든 public 메서드가 Repository 계층을 활용하는 경우에만 클래스에 @Transactional(readOnly = true)를 붙이면 Dirty Checking이 비활성화되어 최소한 트랜잭션 성능 문제는 발생하지 않는다.
하지만 이 또한 동시성 문제 등에서 자유롭지 못하다.
따라서 @Transactional은 개별 메서드에 적용하는 것이 권장된다.