JPA 레포지토리와 영속성 컨텍스트
- JPA 레포지토리는 영속성 컨텍스트를 가진다.
- **기본적인 Fetch 전략은 Lazy(지연 로딩)**이다.
- 조회 후 영속성 컨텍스트가 끝난 후에 @OneToMany 관계 데이터를 가져오는 것은 원칙적으로 불가능.
- 하지만, Spring Boot는 컨트롤러 내에서는 영속성 컨텍스트를 유지시키는 전략을 기본적으로 사용.
- 이를 OSIV(Open Session in View) 전략이라고 한다.
- 설정 변경 가능: application.yml
spring: jpa: open-in-view: false # 비활성화
- spring: jpa: open-in-view: true # 활성화
OSIV(Open Session in View)란?
Spring 백엔드 구조:
- Repository(레포지토리)
- Service(서비스)
- Controller(컨트롤러)
- View Layer(뷰 레이어 - Thymeleaf 등) (Restful하게 작성하면 뷰 레이어 사용 안 함)
OSIV는 뷰 레이어에서 엔티티를 직접 사용하거나 Lazy Loading 데이터를 조회할 가능성을 대비하여 영속성 컨텍스트를 유지하는 전략.
- RESTful API를 사용할 경우, OSIV는 불필요한 자원 소모를 초래할 수 있으므로 비활성화하는 것이 일반적.
- 하지만, 켜둬도 큰 문제가 발생하지는 않음.
'Java > Spring' 카테고리의 다른 글
Web Server와 WAS (1) | 2025.02.16 |
---|---|
어노테이션(Annotation) (2) | 2025.02.09 |
Spring Security (0) | 2025.02.06 |
Servlet, Dispatcher Servlet, Servlet Container (0) | 2025.02.02 |
스프링에서 잭슨 라이브러리의 직렬화/역직렬화 (1) | 2025.01.18 |