๐ŸŒฟSpring/Spring Data JPA

[Spring JPA] OSIV ์ „๋žต

Boom's 2024. 1. 22. 17:47
๋ฐ˜์‘ํ˜•

 

์ €๋ฒˆ ์‹œ๊ฐ„์— Spring Data JPA ๋ฌด์—‡์ธ๊ฐ€์™€ ๊ฐ„๋‹จํ•œ ํ•ต์‹ฌ์ „๋žต์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ดค๋‹ค.

์ด์–ด์„œ Spring Data JPA์˜ ์„ธ์…˜ ๊ด€๋ฆฌ ์ „๋žต ์ค‘ ํ•˜๋‚˜์ธ OSIV ์ „๋žต์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

2024.01.22 - [๐ŸŒฟSpring/Spring JPA] - [Spring JPA] JPA๋ž€?

 

[Spring JPA] JPA๋ž€?

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” JPA(Java Persistence API)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค. JPA๋Š” ์ž๋ฐ” ์ง„์˜์—์„œ ORM(Object-Relational Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ์ด๋‹ค. ๊ทธ ๋ง์€ ์ฆ‰, ์‹ค์ œ์ ์œผ๋กœ ๊ตฌํ˜„ ๋œ ๊ฒƒ์ด ์•„

boom-94.tistory.com


OSIV (Open Session In View)

  • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์„ธ์…˜ ๊ด€๋ฆฌ ์ „๋žต ์ค‘ ํ•˜๋‚˜
  • ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ ๊ฐ’์ด True๋กœ ์„ค์ •
  • application.yaml ํŒŒ์ผ์—์„œ ์„ค์ •

spring.jpa.open-in-view: true

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ HTTP ์š”์ฒญ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ์ด ์ƒ์„ฑ, ์ด์— ๋”ฐ๋ผ ๋งŽ์€ ์ˆ˜์˜ DB์ปค๋„ฅ์…˜์ด ๋ฐœ์ƒํ•˜์—ฌ ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋‹จ, OSIV ์˜ต์…˜์„ True๋กœ ์„ค์ •ํ•˜์—ฌ ์‚ฌ์šฉ ํ•  ๊ฒฝ์šฐ, ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘์ฒ˜๋Ÿผ ์ตœ์ดˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜ ์‹œ์ž‘ ์‹œ์ ๋ถ€ํ„ฐ API ์‘๋‹ต์ด ๋๋‚  ๋•Œ ๊นŒ์ง€ ์˜์†์„ฑ ์ปจํ…Œ์ŠคํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์„ ์œ ์ง€

์žฅ์ 

  • ์ง€์—ฐ ๋กœ๋”ฉ์€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‚ด์•„์žˆ์–ด์•ผ ๊ฐ€๋Šฅ
  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์„ ์œ ์ง€
  • ์ง€์—ฐ ๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ์žฅ์ 

๋‹จ์ 

  • ์ปจํŠธ๋กค๋Ÿฌ์—์„œ API๋ฅผ ํ˜ธ์ถœ ํ•  ๋•Œ 10์ดˆ๊ฐ€ ๊ฑธ๋ฆฌ๋ฉด, 10์ดˆ ๋™์•ˆ ์ปค๋„ฅ์…˜์„ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•˜๊ณ  ์œ ์ง€
  • ๋„ˆ๋ฌด ์˜ค๋žœ์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ, ์‹ค์‹œ๊ฐ„ ํŠธ๋ž˜ํ”ฝ์ด ์ค‘์š”ํ•œ ์„œ๋น„์Šค์ผ ๊ฒฝ์šฐ ์ปค๋„ฅ์…˜์ด ๋ถ€์กฑํ•ด ์‹œ์Šคํ…œ ์žฅ์• ๋กœ ์ด์–ด์ง„๋‹ค.

 

spring.jpa.open-in-view: false

 

  • OSIV๋ฅผ ๋„๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์ข…๋ฃŒ ํ•  ๋•Œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๋‹ซ๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ปค๋„ฅ์…˜๋„ ๋ฐ˜ํ™˜

์žฅ์ 

  • ์ปค๋„ฅ์…˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ์ 

  • ์ง€์—ฐ๋กœ๋”ฉ์€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์‚ด์•„ ์žˆ์–ด์•ผ ํ•˜๋Š”๋ฐ, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ๋‹ซํ˜”๊ธฐ ๋•Œ๋ฌธ์— ๋ชจ๋“  ์ง€์—ฐ๋กœ๋”ฉ์„ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์ฒ˜๋ฆฌ
  • ์ง€์—ฐ๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํƒœ์—์„œ OSIV๋ฅผ ๋„๊ณ  ์‹คํ–‰ํ•˜๋ฉด LazyInitializationException์ด ๋ฐœ์ƒ
    • ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์ง€์—ฐ๋กœ๋”ฉ์ฝ”๋“œ๋ฅผ ํŠธ๋žœ์žญ์…˜ ์•ˆ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ˜ํ™˜, fetch join์„ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐ

์–ธ์ œ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

  1. ์š”์ฒญ์ด ๋งŽ์ง€ ์•Š์€ ๊ฐ„๋‹จํ•œ ์„œ๋น„์Šค๋‚˜ ์ปค๋„ฅ์…˜์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ณณ์—์„œ๋Š” TRUE
    • ์ง€์—ฐ๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š”๊ฒŒ ํŽธ๋ฆฌ
  2. ๊ณ ๊ฐ ์„œ๋น„์Šค ์‹ค์‹œ๊ฐ„ API๋Š” FALSE
    • ์ปค๋„ฅ์…˜ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ ๋˜์ง€๋งŒ ์ง€์—ฐ ๋กœ๋”ฉ์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์ถ”๊ฐ€ ์ž‘์—…์ด ํ•„์š”
๋ฐ˜์‘ํ˜•