관리 메뉴

Tech Log πŸ› οΈ

[jpa] OSIV μ„±λŠ₯ μ΅œμ ν™” λ³Έλ¬Έ

jpa

[jpa] OSIV μ„±λŠ₯ μ΅œμ ν™”

sehaan 2023. 3. 5. 18:03

OSIVλž€

OSIV(Open Session In View)λ₯Ό μ‚¬μš©ν•˜λ©΄ 졜초 λ°μ΄ν„°λ² μ΄μŠ€ 컀λ„₯μ…˜ μ‹œμž‘ μ‹œμ λΆ€ν„° API 응닡이 끝날 λ•ŒκΉŒμ§€ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈμ™€DB 컀λ„₯μ…˜μ„ μœ μ§€ν•œλ‹€. μ΄λ ‡κ²Œ ν•¨μœΌλ‘œμ¨ 뷰와 μ»¨νŠΈλ‘€λŸ¬μ—μ„œ 지연 λ‘œλ”©μ„ ν•  수 μžˆλ‹€. 

 

*νŠΈλžœμž­μ…˜μ΄ μ‹œμž‘ν• λ•Œ DB컀λ„₯μ…˜μ„ νšλ“ν•œλ‹€.

 

ν•˜μ§€λ§Œ  이 μ „λž΅μ€ 큰 단점이 μžˆλŠ”λ°,  λ„ˆλ¬΄ 였랜 μ‹œκ°„ DB 컀λ„₯μ…˜μ„ μœ μ§€ν•¨μœΌλ‘œ 인해  λ¦¬μ†ŒμŠ€ λΆ€μ‘± μž₯μ• λ‘œ μ΄μ–΄μ§ˆ 수 μžˆλ‹€λŠ” 것이닀.λ”°λΌμ„œ 상황에 λ§žλŠ” OSIV μ „λž΅μ΄ ν•„μš”ν•˜λ‹€.

 

OSIV λ™μž‘ 방식

jpaμ—μ„œλŠ” OSIV의 기본값을 true (μ‚¬μš©)으둜 μ œκ³΅ν•˜κ³  μžˆλ‹€.

 

1. ν΄λΌμ΄μ–ΈνŠΈ μš”μ²­μ΄ λ“€μ–΄μ˜€λ©΄ μ„œλΈ”λ¦Ώ ν•„ν„°λ‚˜ μŠ€ν”„λ§ μΈν„°μ…‰ν„°μ—μ„œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό μƒμ„±ν•œλ‹€.

2. μ„œλΉ„μŠ€ κ³„μΈ΅μ—μ„œ 미리 λ§Œλ“€μ–΄λ‘” μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ‘œ νŠΈλžœμž­μ…˜μ„ μ‹œμž‘ν•œλ‹€.(@Transactional μ–΄λ…Έν…Œμ΄μ…˜μ΄ μžˆλŠ” κ³³)

3. νŠΈλžœμž­μ…˜μ„ μ»€λ°‹ν•˜λ©΄ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό ν”ŒλŸ¬μ‹œν•˜μ§€λ§Œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό μ’…λ£Œμ‹œν‚€μ§€λŠ” μ•ŠλŠ”λ‹€, (λ·°, μ»¨νŠΈλ‘€λŸ¬κΉŒμ§€ μœ μ§€)

4. μš”μ²­μ΄ λŒμ•„μ˜€λ©΄ ν”ŒλŸ¬μ‹œλ₯Ό ν•˜μ§€ μ•Šκ³  μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ₯Ό λ°”λ‘œ μ’…λ£Œν•œλ‹€.

 

OSIV OFF

OSIVλ₯Ό 끈 μƒνƒœμ—μ„œ νŠΈλžœμž­μ…˜μ΄ λλ‚˜λ©΄ DB 컀λ„₯μ…˜μ„ λ°˜ν™˜ν•˜λ―€λ‘œ λ¦¬μ†ŒμŠ€λ₯Ό λ‚­λΉ„ν•˜μ§€ μ•ŠλŠ”λ‹€.

ν•˜μ§€λ§Œ μ˜μ†μ„± μ»¨ν…μŠ€νŠΈλ„ μ’…λ£Œμ‹œμΌœ λ²„λ¦¬κΈ°λ•Œλ¬Έμ— 뷰와 μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ§€μ—°λ‘œλ”©μ„ ν• μˆ˜μ—†λ‹€.λ”°λΌμ„œ νŠΈλžœμž­μ…˜ λ‚΄μ—μ„œ λͺ¨λ“  μ§€μ—°λ‘œλ”©μ„ μ²˜λ¦¬ν•΄μ•Όν•œλ‹€.

 

이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œλŠ” OSIV λ₯Ό λ‹€μ‹œ μΌ λ‹€κ±°λ‚˜ , 페치 쑰인을 μ‚¬μš©ν•˜λŠ” λ“± μ—¬λŸ¬ 방법이 μžˆμ§€λ§Œ

κ°€μž₯ λ‹¨μˆœν•˜κ²Œ 관심사λ₯Ό λΆ„λ¦¬ν•˜λŠ” κ²ƒλ§ŒμœΌλ‘œ 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€. (μ»€λ§¨λ“œμ™€ 쿼리 뢄리)

 

μ»€λ§¨λ“œμ™€ 쿼리 뢄리

보톡 핡심 λΉ„μ¦ˆλ‹ˆμŠ€λ‘œμ§μ€ ν•œλ²ˆ κ°œλ°œν•˜λ©΄ μ‰½κ²Œ λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

반면 화면을 κ΅¬μ„±ν•˜λŠ” λ·°λ‘œμ§μ€ 개발이 μ‹œμž‘λœ 뒀에도 μ—¬λŸ¬ 번 λ°”λ€Œλ―€λ‘œ λ‘˜μ˜ 라이프 사이클이 λ‹€λ₯΄λ‹€.

 

λ”°λΌμ„œ λ‘˜μ˜ 관심사λ₯Ό λͺ…ν™•ν•˜κ²Œ λΆ„λ¦¬ν•˜λŠ” 것은 μœ μ§€λ³΄μˆ˜ κ΄€μ μ—μ„œ μΆ©λΆ„νžˆ μ˜λ―Έμžˆλ‹€.

 

ex)

OrderService
OrderService: ν•΅μ‹¬ λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§
OrderQueryService: ν™”λ©΄μ΄λ‚˜ API에 λ§žμΆ˜ μ„œλΉ„μŠ€ (주둜 μ½κΈ° μ „μš© νŠΈλžœμž­μ…˜ μ‚¬μš©)

 

두 μ„œλΉ„μŠ€ λͺ¨λ‘ νŠΈλžœμž­μ…˜μ„ μœ μ§€ν•˜λ©΄μ„œ μ§€μ—°λ‘œλ”©μ„ μ‚¬μš©ν•  수 μžˆλ‹€.