投稿
Q&A
@JsonIgnore 이후 Internal Server Error가 발생하지 않습니다.
저도 강의 따라가다가 이 부분에서 잠시 멈추고 알아봤는데요.저 당시 스프링 설정이 어땠는지 모르겠지만 지금 스프링 JPA에서 OSIV(Open Session In View) 기능이 기본값으로 켜져있습니다.OSIV 기능이 켜져있으면 트랜잭션이 종료될 때 EntityManager가 종료되지 않고 요청을 뷰로 반환할 때까지 살아있는데요. 이게 핵심인 것 같습니다. OSIV 기능을 끄면 강의에서처럼 LazyInitializationException 가 터집니다.Order와 Member 두 개만 생각하고 예를 들면 orderRepository.findAll(); 을 하면 Order에 있는 member는 fetch 전략이 LAZY니까 Order 조회할 때 메모리에는 id랑 member(요 놈은 프록시 객체임) 가 들어있는 상태가 됩니다. 그리고 컨트롤러에서 List 를 반환 -> Jackson이 Order 리스트를 JSON으로 변환 시도-> JSON 변환 중 멤버의 이름 등 데이터가 필요하니까 order.getMember() 접근-> LAZY 프록시 초기화 시도 여기서부터 OSIV 설정에 따라 달라져요.1) OSIV 가 켜져있을 때 (2026년 기준 기본값)OSIV가 켜져있으면 EntityManager는 서비스나 리파지토리에서 트랜잭션이 종료되었다고 해서 곧바로 종료되지 않습니다.EntityManager가 아직까지 살아 있는데요. EntityManager가 있으면 프록시 초기화를 시도합니다. 그러면 DB로 추가 SELECT문이 실행되고 정상적으로 JSON 응답이 완료됩니다. 그러고나서야 EntityManager가 종료됩니다.그러니까 OSIV가 켜져있으면 컨트롤러가 이미 반환을 했는데도 JSON 변환 과정에서 필요할 때마다 DB 조회가 가능한겁니다.좋은 거 같은데... 이 경우 쿼리 예측이 어려워지니 유지보수가 어렵겠죠... 영한님이 항상 말씀하시듯이 쿼리 예측이 어려운 코드는 안 좋은 코드이기도 하구요.그리고 추가 쿼리가 나가니 N+1 문제도 만날 가능성도 있구요. 2) OSIV 가 꺼져있을 때(강의 찍는 시점 기본값인 것 같습니다.)OSIV 가 꺼져있으면 EntityManager는 리파지토리나 서비스에서 트랜잭션이 종료되는대로 EntityManager도 종료됩니다.그러고나서 컨트롤러에서 List 를 반환--> Jackson 이 JSON 변환 시도--> Lazy 프록시 초기화 시도이 때 EntityManager가 없으니 Jackson이 JSON으로 변환하는 과정에서 member의 프록시 초기화가 불가능해져 LazyInitializationException이 터집니다. 그니깐 OSIV가 켜져있든, 꺼져있든 결론은응답에 엔티티를 직접 사용하면 Jackson이 Order 엔티티 전체를 JSON 으로 바꾸려고 시도하는데 이러면 Order 내부에 있는 Lazy 연관관계까지 모두 건드려버리고(추가 Select 쿼리 발생 증가) + API 유지보수 어려움이 가장 큰 문제라는 게 강의 핵심 내용인 것 같습니다!
- いいね数
- 0
- コメント数
- 3
- 閲覧数
- 40
Q&A
PostMan에서 POST요청 오류
/api/members/{id}로 GET요청 할 때 ErrorPageController로 가기 전(예외 발생 전) ApiExceptionController에서 @GetMapping으로 받아서 처리할 수 있는데현재 ApiExceptionController에서 @PostMapping으로 만들어 놓은 게 없어서 "Method Not Allowed"로 나온 것으로 보여요.ApiExceptionController에서 @PostMapping("/api/members/{id}") 로 똑같이 만들어서 포스트맨에서 POST 요청해보시면 정상 작동될겁니다.
- いいね数
- 0
- コメント数
- 3
- 閲覧数
- 249
Q&A
[프로젝트 실행하는 법] for 스프링 부트 3.2 이상 자바 버전 17 이상
최고
- いいね数
- 15
- コメント数
- 5
- 閲覧数
- 2.5K
Q&A
유틸 클래스에 대해..
저도 이 부분 살짝 애매르송했는데 좋은 질문과 답변 감사합니당.
- いいね数
- 1
- コメント数
- 2
- 閲覧数
- 539




