@Service@Transactional(readOnly =true)// 클래스 전체 기본값: 읽기 전용publicclassPostService{// 읽기 전용 (SELECT 최적화)publicPostfindById(String id){return postRepository.findById(id).orElseThrow();}@Transactional// 쓰기 작업은 별도 선언 (readOnly = false 기본값)publicPostcreate(CreatePostCommand command){return postRepository.save(Post.of(command));}}
@Transactional(rollbackFor =Exception.class)// 모든 예외에 롤백publicvoidprocess()throwsIOException{...}
@ServicepublicclassPostService{publicvoidouter(){inner();// 같은 클래스 내부 호출 → @Transactional 무시됨}@Transactionalpublicvoidinner(){...}}