

JPA를 이용하여, 로그인 기능, 게시판 조회 및 생성, 수정 기능을 구현하는 과정에서 OSIV에 대해 학습하는 시간을 가졌다. OSIV란, Open Session In View의 약자로서, JPA EntityManager 또는 Hibernate session, 즉 영속성 컨텍스트를 뷰 렌더링이 끝날 때까지 유지하는 기능을 뜻한다. JPA에서 영속성 컨텍스트란, 엔티티를 영구적으로 저장하는 환경을 말하는데, 애플리케이션과 데이터베이스 사이에서 DB에서 읽어온 객체를 보관하는 가상의 저장소라고 보면 된다. 이러한 영속성 컨텍스트가 뷰까지 살아 있다면, 사용자가 보는 화면, 즉 뷰에서 지연 로딩을 사용할 수 있는 장점이 있다.
Spring Boot는 기본적으로 spring.jpa.open-in-view: true 로 설정해주어, Session이 기본적으로 뷰까지 열려있다고 보면 된다. 구체적으로 OSIV가 설정되어 있을 경우, 사용자는 언제까지 DB Connection이 유지되는지 궁금하였는데, 강의 및 외부자료를 통해 학습한 결과, API의 경우에는 Response가 유저에게 반환될 때까지, HTML 파일을 응답하는 경우에는 화면이 사용자에게 반환될 때까지, 유지되다가, 반환이 끝나면, 데이터베이스 커넥션이 끝나고, 영속성 컨텍스트도 함께 사라지는 것으로 확인되었다.
OSIV가 설정되어 있는 경우에는, 기본적으로 데이터베이스 커넥션을 유지하고, 지연 로딩을 사용할 수 있다는 장점이 있다. 하지만, 영속성 컨텍스트가 종료될 때까지 데이터베이스 커넥션을 계속 물고 있게 되면, 너무 긴 시간동안 데이터베이스 커넥션 리소스를 사용하기 때문에, 실시간 트래픽이 중요한 어플리케이션에서는 DB Connection이 부족한 이슈가 발생할 수 있다. 이는 결국, 운영 중인 시스템에서 장애를 불러일으키는 원인이 될 수 있는데, 이러한 점을 잘 고려하여, 실제 업무에 있어서, DB 리소스에 어느정도 영향을 주는지 파악해야할 필요가 있을 것 같다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.