inblog logo
|
강재영 블로그
    springboot

    23 OpenInView , Lazy 전략

    강재영's avatar
    강재영
    Aug 22, 2024
    23 OpenInView , Lazy 전략
    Contents
    해결책
     
    notion image
     

    Lazy Loading 전략과 기본 동작

    💡
    Lazy Loading은 엔티티와 연관된 데이터를 지연해서 로드하는 전략으로, 처음 데이터에 접근할 때(예: getCustomer()를 호출할 때) 실제 데이터베이스에서 필요한 데이터를 가져옵니다.
     
    문제는 뷰를 렌더링 할 때 불필요한 Lazy Loding이 이뤄날 수도 있다는 것이다.
    즉 DB커넥션 세션이 계속 열려있다는 문제가 발생한다.
     
     
    1. Board -> User(FK) Lazy 전략 순수하게 Board Select하면 , User는 Select가 안됨(문제없음)
    1. OpenInView = true(default)
    1. 컨트롤러에서 반환하는 값이 객체이면 json으로 변환됨 이때 json으로 바뀌기 위해 get요청을 하게 되고 그러면 전략이 Lazy 라서 db에 필요없는 User요청(문제발생)
     

    해결책

     
    spring.jpa.open-in-view=false
     

    서비스 계층에서의 Lazy Loading

    • 서비스 계층까지 Lazy Loading: spring.jpa.open-in-view=false 설정이 적용되면, Lazy Loading은 서비스 계층에서만 가능하고, 그 이후(예: 컨트롤러나 뷰에서)는 사용할 수 없습니다. 따라서 서비스 계층에서 필요한 모든 데이터를 미리 로드해야 합니다.
      • 이 방식은 서비스 계층에서 모든 데이터베이스 작업이 완료되도록 보장하며, 뷰 계층에서는 데이터베이스 접근 없이 이미 로드된 데이터를 사용하게 됩니다.
      •  
     

    . 왜 사용하는가?

    1. 성능 최적화:
        • Open Session in View 패턴을 사용하지 않으면, 데이터베이스 세션이 짧게 유지되므로 데이터베이스 리소스를 더 효율적으로 사용하게 됩니다. 이는 고부하 시스템에서 특히 유리합니다.
    1. 책임 분리:
        • 서비스 계층에서 모든 데이터 처리를 완료하게 함으로써, 서비스 계층과 뷰 계층 간의 책임이 명확히 분리됩니다. 뷰는 데이터 표현에만 집중하고, 데이터 로딩이나 비즈니스 로직 처리는 서비스 계층에서만 이루어집니다.
    1. 안정성:
        • 세션이 뷰까지 열려 있으면, 뷰 렌더링 중에 Lazy Loading이 발생할 수 있으며, 이로 인해 예기치 않은 데이터베이스 접근이나 성능 문제가 발생할 수 있습니다. spring.jpa.open-in-view=false 설정은 이러한 문제를 예방합니다.
     
    Share article
    Contents
    해결책

    강재영 블로그

    RSS·Powered by Inblog