-
카테고리
-
세부 분야
백엔드
-
해결 여부
미해결
Test에서 fetchType = LAZY 일 경우 proxy 초기화를 못 하는 이유는 무엇인가요?
20.09.02 16:38 작성 조회수 121
0
API에서는 제대로 작동하는 것이
Test에서는 proxy 초기화를 못 한다고 합니다.
이때 @Transactional을 붙이면 제대로 작동합니다.
test와 api는 어떤 차이가 있길래 이와 같은 이슈가 생기는 건가요?
답변을 작성해보세요.
1
1
김영한
지식공유자2020.09.02
안녕하세요. dev님^^
JPA는 기본적으로 트랜잭션 범위 안에서만 영속성 컨텍스트가 유지됩니다. 그리고 proxy를 초기화 하려면 영속성 컨텍스트가 살아있어야 합니다.
그래서 테스트에서 @Transactional이 없으면 조회하고 나오는 순간 영속성 컨텍스트가 사라져버리는 것이죠. 그래서 proxy를 초기화 하지 못한 것입니다.
그러면 API에서는 어떻게 성공한 것일까요? 그건 바로 OSIV라는 특별한 기능이 스프링 부트에서 기본으로 켜져있기 때문입니다.
이 OSIV는 트랜잭션과 무관하게, 고객이 요청이 오는 순간부터 고객의 요청이 나가는 순간까지 영속성 컨텍스트를 유지시켜 줍니다. 그래서 API에서는 동작이 성공했습니다.
더 자세한 내용은 다음을 참고해주세요^^!
JPA책 13. 웹 애플리케이션과 영속성 관리
강의 활용2편 - OSIV와 성능 최적화
감사합니다.
답변 2