OSIV 옵션에 대해서 설명해주세요. #145
Replies: 3 comments 2 replies
-
em과 연관지어서 함께 이야기하면 좋을 듯 합니돠~~ |
Beta Was this translation helpful? Give feedback.
-
<개요> <동작 원리> 영속성 컨텍스트는 API 요청 시점에 생성이 되지만, 데이터를 쓰거나 수정할 수 있는 트랜잭션은 비즈니스 계층에서만 사용할 수 있도록 트랜잭션이 일어납니다. 스프링 부트에서
<OSIV 사용 시 주의점> OSIV 전략은 트랜잭션 시작과 같이 최초 데이터베이스 커넥션 시작 시점부터 API 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지합니다. 즉, 영속성 컨텍스트가 종료될 때 까지 데이터 베이스 커넥션을 1:1 로 계속 물고 있습니다. 이러한 특징으로 인해 프레젠테이션 계층에서 지연로딩을 사용할 수 있다는 장점이 있지만, 실시간 트래픽이 중요한 애플리케이션에서는 커넥션이 모자라 장애로 이어질 수 있습니다. 또한 OSIV를 적용하면 API 요청 시점에 영속성 컨텍스트가 생성되므로, 같은 영속성 컨텍스트를 여러 트랜잭션이 공유하게 될 수 있기 때문에 주의해야 합니다. @GetMapping
public Person get() {
Person person = personService.get(1);
person.setName("steve"); // presentation layer에서 이름 정보 변경
Person person2 = personService.get(1);
return person;
}
컨트롤러에서 이름 정보를 변경한 다음에 호출된 즉, OISV로 인해 영속성 컨텍스트가 여러 트랜잭션에 공유되었고, 뷰 영역에서 변조된 정보가 의도치 않게 데이터베이스에 반영될 수 있습니다.
OSIV를 끄면 트랜잭션을 종료할 때 영속성 컨텍스트를 닫고, 데이터베이스 커넥션도 반환합니다. https://incheol-jung.gitbook.io/docs/q-and-a/spring/osiv |
Beta Was this translation helpful? Give feedback.
-
OSIV(open session in view)는 영속성 컨텍스트를 뷰까지 열어둔다는 뜻입니다. [요청당 트랜잭션 방식 OSIV] [스프링 OSIV] 동작 원리는 다음과 같습니다.
정리하자면 스프링 OSIV는 다음과 같은 특징이 있습니다.
스프링 OSIV는 다음과 같은 주의 사항이 있습니다. (영속성 컨텍스트를 여러 트랜잭션이 공유해서 발생하는 문제)
|
Beta Was this translation helpful? Give feedback.
-
뭘까용?
Beta Was this translation helpful? Give feedback.
All reactions