개발자
안녕하세요 현재 백엔드 개발 공부중인 학부생입니다. 공부중 현업에 관련해서 간단한 궁금증이 있는데 알고있는 현업자분이 없어서 여기에다가 질문 남깁니다. 제가 트랜잭션에 대해 공부하다가 spring의 open-in-view 속성에 대해 알게 되었는데 이 설정을 현업에서는 false로 하는지 궁금합니다. False로 할 경우 lazy load하는 부분에서 문제가 생긴다고 하는데 제 추측으론 현업에선 연관 데이터가 많을것 같고 그럼 lazy load를 사용해야 해서 문제가 있을것 같고 또 키자니 트래픽이 많을때 요청이 종료될때까지 영속성 컨텍스트가 유지되면서 커넥션 풀에 커넥션이 고갈하는 현상이 발생할 것 같은 이런 상황을 현업에선 어떻게 대처하는지 궁금합니다!
답변 1
삭제된 사용자
2024년 09월 10일
저희는 false로 하고 fetch join해서 씁니다 :)
익명
작성자
2024년 09월 13일
감사합니다!
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 09월 06일
Spring의 Open-In-View 설정은 실제 현업에서는 주로 false로 설정하는 것이 일반적입니다. 이유는 여러 가지가 있습니다. 1) 연관된 데이터를 로드하는 시점의 통제: Open-In-View가 true인 경우, 뷰 렌더링 시점까지 DB 커넥션을 유지하고 필요한 시점에 데이터를 로드합니다(Lazy Load). 하지만 이렇게 되면 언제 어디서 DB 커넥션이 발생할지 예측하기 어렵고, DB 접근이 예상치 못한 시각에 발생하여 성능 문제를 유발할 수 있습니다. 반대로 false로 설정할 경우, Service Layer에서 필요한 데이터를 모두 로드하고 뷰 렌더링을 위한 모델에 전달합니다. 이를 통해 DB 커넥션 사용의 확실한 시작과 종료 시점을 알 수 있습니다. 2) 커넥션 Pool 고갈 문제: Open-In-View 속성이 true라면 HTTP 요청 처리가 완료될 때까지 영속성 컨텍스트와 DB 커넥션이 계속 유지됩니다. 따라서 많은 사용자나 긴 처리 시간 요구 요청으로 인해 커넥션 풀 내의 공간 부족 현상이 발생할 수 있습니다. 3) Lazy Load 문제: Open-In-View를 false로 설정하면 엔터티가 영속성 컨텍스트 바깥에서 사용되는 경우(예: API 응답 시)의 LazyInitializationException 문제가 발생할 수 있습니다. 이를 해결하기 위해 Eager 로딩 사용하는 방법이 있지만, 이는 불필요한 데이터를 로딩할 가능성이 있으므로 대신에 Fetch Join이나 Entity Graph 등을 활용하여 필요한 시점에 필요한 데이터만 로드하는 것을 권장합니다. 이렇게 Open-In-View 속성을 false로 설정하고 적절한 전략으로 문제를 해결하는 것이 현업에서 일반적입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!