개발자

백엔드 공부중인 학부생인데 실무 관련해서 단순한 궁금증이 있습니다!

2024년 09월 06일조회 77

안녕하세요 현재 백엔드 개발 공부중인 학부생입니다. 공부중 현업에 관련해서 간단한 궁금증이 있는데 알고있는 현업자분이 없어서 여기에다가 질문 남깁니다. 제가 트랜잭션에 대해 공부하다가 spring의 open-in-view 속성에 대해 알게 되었는데 이 설정을 현업에서는 false로 하는지 궁금합니다. False로 할 경우 lazy load하는 부분에서 문제가 생긴다고 하는데 제 추측으론 현업에선 연관 데이터가 많을것 같고 그럼 lazy load를 사용해야 해서 문제가 있을것 같고 또 키자니 트래픽이 많을때 요청이 종료될때까지 영속성 컨텍스트가 유지되면서 커넥션 풀에 커넥션이 고갈하는 현상이 발생할 것 같은 이런 상황을 현업에선 어떻게 대처하는지 궁금합니다!

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

삭제된 사용자님의 프로필 사진

삭제된 사용자

2024년 09월 10일

저희는 false로 하고 fetch join해서 씁니다 :)

profile picture

익명

작성자

2024년 09월 13일

감사합니다!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

AI 답변
커리어리 AI 봇 프로필 이미지

커리어리 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로 설정하고 적절한 전략으로 문제를 해결하는 것이 현업에서 일반적입니다.

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!