문제
spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
원인
- spring.jpa.open-in-view=true(기본값) 설정 시, View 렌더링까지 영속성 컨텍스트(세션)가 열려 있음
- View에서 Lazy-loading을 사용하면 View 자체가 DB 접근 주체가 됨
- 이는 MVC 패턴 위배하며 예측 불가능한 쿼리 실행과 N+1 문제 발생 가능
해결
- application.yml 에 다음과 같이 설정
spring
jpa:
open-in-view: false // DB 커넥션을 트랜잭션 끝나면 바로 반환!
| 항목 |
open-in-view: true |
open-in-view: false |
| View에서 Lazy 사용 |
가능 |
불가 |
| N+1 발생 위험 |
높음 |
낮음 |
| 구조적 안정성 |
낮음 |
높음 |
| 코드 테스트 용이성 |
낮음 |
높음 |
| 유지보수 효율 |
낮음 |
높음 |