이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[JPA] OSIV

  • 2022.12.31 16:09
  • Spring/JPA
반응형

 

 

 

Open Session In View의 약자이다.

 

JPA가 영속성 컨텍스트를 관리하기 위해서는 먼저 데이터베이스 커넥션을 획득해야한다.

데이터베이스의 트랜잭션이 시작될 때 JPA의 영속성 컨텍스트가 데이터베이스 커넥션을 획득하는데.. 언제 반환하는걸까?

 

 

 

 

OSIV가 켜져 있는 경우 최초의 데이터베이스 커넥션을 획득하고 API의 응답이 끝날 때 까지 영속성 컨텍스트와 데이터베이스 커넥션을 유지한다. 

즉, 트랜잭션이 끝나도 데이터베이스 커넥션을 반환하지 않는다.

 

지연 로딩은 영속성 컨텍스트가 살아있어야 가능하고, 영속성 컨텍스트는 데이터베이스 커넥션이 있어야 관리된다.

따라서 OSIV가 켜져 있으면 지연 로딩이 가능하다.

 

그런데... 데이터베이스 커넥션을 계속 들고 있으면 사용자가 많은 애플리케이션인 경우 데이터베이스 커넥션이 모자랄 수 있어 치명적인 문제가 발생한다.

 

 

 

 

 

OSIV를 끈 상태에서는 딱 트랜잭션이 수행되는 동안에만 데이터베이스 커넥션을 유지한다.

당연히 영속성 컨텍스트도 관리되지 않게 되고, 커넥션 리소스를 낭비하지 않게 된다.

 

대신 지연 로딩을 트랜잭션 외부에서 처리할 수 없게 된다.

따라서 트랜잭션이 끝나기 전에 지연 로딩을 강제로 호출해 주는 방식으로 기존 코드를 수정해야 한다.

 

 

 

고객 서비스의 실시간 API처럼 데이터베이스 커넥션을 자주 사용하는 부분에서는 OSIV를 끄고, 관리자 페이지처럼 커넥션을 많이 사용하지 않는 곳에서는 OSIV를 끄는 것 처럼 상황에 적합한 방법을 사용하자.

 

OSIV는 기본으로 켜져 있는 상태이다. 필요에 따라 설정해주자.

 

 

 

 

 

 

 

 

 

 

 

 

반응형
저작자표시 (새창열림)

'Spring > JPA' 카테고리의 다른 글

[JPA] JPQL (2)  (0) 2022.12.28
[JPA] JPQL (1)  (0) 2022.12.27
[JPA] 값 타입  (0) 2022.12.26
[JPA] 영속성의 전이와 고아 객체  (0) 2022.12.24
[JPA] 프록시와 연관관계  (0) 2022.12.24

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [JPA] JPQL (2)

    [JPA] JPQL (2)

    2022.12.28
  • [JPA] JPQL (1)

    [JPA] JPQL (1)

    2022.12.27
  • [JPA] 값 타입

    [JPA] 값 타입

    2022.12.26
  • [JPA] 영속성의 전이와 고아 객체

    [JPA] 영속성의 전이와 고아 객체

    2022.12.24
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (679)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (17)
    • 👥 모각코 (10)
    • 💬 기록 (8)
    • 📚 공부 (6)
    • -------------- (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바