[Spring Boot] Open EntityManager In View(필터)

Junseo Kim·2020년 4월 17일
0

간단한 Tip

목록 보기
9/20

Open EntityManager In View란?

Open EntityManager In View 라는 필터는 JPA EntityManager(영속성 컨텍스트: DB에서 읽어온 객체들을 관리하는 컨텍스트. persistent 상태인 객체들을 관리) 또는 hibernate session(영속성 컨텍스트), 즉 영속성 컨텍스트를 뷰 랜더링이 끝날 때 까지 유지하는 것이다.

스프링부트는 기본적으로 Open EntityManager In View를 설정해준다.

persistent 상태인 객체들은 트랜잭션 안에서는 객체 상태의 변경만 감지하다가 트랜잭션이 종료될 때 DB에 반영한다.

따라서 데이터를 변경해야하는 일이 있는 경우, 트랜잭션 내에서 관리해준다.

OEIV(OSIV)를 사용하면 뷰를 랜더링 할 때까지 영속성 컨텍스트를 유지하기 때문에, 뷰에 데이터를 랜더링 할 때, 뷰에 전달해야하는 모든 것들을 미리 읽어와서 모델에 담아주는 것이 아니라, 뷰에서 도메인 기반으로 추가로 로딩을 할 수가 있다.(lazy loading)

스프링 부트인 경우, repository에는 기본적으로 @Transactional이 붙어져있다. 따라서 repository를 통해서 무엇인가 하면 트랜잭션을 사용하는 것이다. 그러나 Service같은 경우는 @Transactional을 직접 설정하지 않는다면, 데이터 변경이 있을 때 DB 반영이 안된다.

따라서, 아래와 같이 처리해 줄 수도 있다.

  • 데이터 변경은 서비스로 위임 후, 트랜잭션 안에서 처리
  • 데이터 조회는 레파지토리나 서비스 이용

0개의 댓글