백엔드 개발 · 중급
@Transactional의 readOnly 속성은 어떤 역할을 하며, 성능에 어떤 영향을 주나요?
힌트 · 더티 체킹 스킵, 플러시 모드, DB 최적화를 생각해보세요.
트랜잭션 격리 수준Dirty Read 방지Flush Mode최적화리소스 절약
모범답안
@Transactional의 readOnly 속성은 트랜잭션을 읽기 전용으로 설정하는 역할을 합니다. 이 속성을 true로 설정하면 JPA는 몇 가지 최적화를 수행합니다.
가장 중요한 것은 더티 체킹을 스킵한다는 점입니다. 데이터베이스에서 읽어온 엔티티의 변경 사항을 감지하고 자동으로 업데이트하는 과정을 생략하여 연산 비용을 줄입니다. 또한, Flush Mode를 MANUAL로 설정하여 불필요한 flush를 방지합니다.
readOnly 속성을 사용하면 데이터베이스 커넥션에 대한 자원을 효율적으로 사용할 수 있고, 트랜잭션 격리 수준을 높여 Dirty Read를 방지하는 데에도 도움을 줄 수 있습니다. 결과적으로 읽기 전용 트랜잭션의 성능을 향상시키는 효과가 있습니다.
읽었다면, 이제 직접 답해볼 차례예요
패스잇 앱에서 이 질문에 말로 답하면 AI가 꼬리질문까지 이어가며 1:1 코칭합니다.
함께 보는 JPA / ORM 면접 질문
- JPA의 더티 체킹(Dirty Checking)이란 무엇이며, 어떻게 동작하나요?
- JPA의 @ManyToOne, @OneToMany 관계에서 양방향 매핑 시 주의사항은 무엇인가요?
- JPQL과 QueryDSL의 차이점과 각각의 장단점에 대해 설명해주세요.
- JPA에서 상속 관계 매핑 전략(SINGLE_TABLE, JOINED, TABLE_PER_CLASS)의 차이점과 선택 기준은?
- JPA 2차 캐시(Second Level Cache)란 무엇이며, 1차 캐시와의 차이점은 무엇인가요?
- OSIV(Open Session In View)란 무엇이며, 장단점은 무엇인가요?