๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

ํ”„๋กœ์ ํŠธ/๊ณ ๋ฏผ ์ƒ๋‹ด ํ”Œ๋žซํผ

์™ธ๋ถ€ API ํ˜ธ์ถœ์„ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด FACADE ๊ณ„์ธต์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด, OSIV ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ๊ณ ๋ คํ•˜์ž!

๋ฌธ์ œ ์ƒํ™ฉ: ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์—”ํ‹ฐํ‹ฐ ๋ณ€๊ฒฝ ์‹œ ๋ณ€๊ฒฝ๊ฐ์ง€๊ฐ€ ์ž‘๋™ํ•˜๋Š”๊ฐ€?

์™ธ๋ถ€ API ํ˜ธ์ถœ์„ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด FACADE ํŒจํ„ด์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
3๊ฐœ์˜ ์„œ๋น„์Šค๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋ฐ–์—์„œ ์™ธ๋ถ€ API๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์˜€๊ณ , ์ฝ”๋“œ ๊ตฌ์กฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•˜์Šต๋‹ˆ๋‹ค.

// ํŠธ๋žœ์žญ์…˜์—์„œ ์™ธ๋ถ€ API ํ˜ธ์ถœ์„ ๋ถ„๋ฆฌํ•˜๊ณ ์ž ๋งŒ๋“  Facade ๊ฐ์ฒด
public class Facade {

    private final Service1 service1;
    private final Service2 service2;

    public ... createSomething(...) {
        // 1๋ฒˆ ์„œ๋น„์Šค ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘
        EntityA entityA = service1.doSomething(...);

        // ์™ธ๋ถ€ API ํ˜ธ์ถœ (ํŠธ๋žœ์žญ์…˜ ์™ธ๋ถ€)
        externalApi.call();

        // 1๋ฒˆ ์„œ๋น„์Šค์˜ ๋ฐ˜ํ™˜๊ฐ’์„ 2๋ฒˆ ์„œ๋น„์Šค์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ
        service2.processSomething(entityA);
    }
}

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๋Š” 1๋ฒˆ ์„œ๋น„์Šค์˜ ๋ฐ˜ํ™˜๊ฐ’์ธ entityA๋ฅผ 2๋ฒˆ ์„œ๋น„์Šค์—์„œ ๋ณ€๊ฒฝํ•  ๋•Œ, ๋ณ€๊ฒฝ๊ฐ์ง€(dirty checking)๊ฐ€ ์ ์šฉ๋˜๋Š”์ง€ ์—ฌ๋ถ€์˜€์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ํŠธ๋žœ์žญ์…˜์—์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋ณ€๊ฒฝ๊ฐ์ง€๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€์— ๋Œ€ํ•œ ํ™•์ธ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

 

ํ•ด๊ฒฐ ๊ณผ์ •: ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ํŠธ๋žœ์žญ์…˜์˜ ๊ด€๊ณ„ ์ดํ•ด

์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ์Šคํ”„๋ง์˜ ํŠธ๋žœ์žญ์…˜์ด ์–ด๋–ค ์ƒํ˜ธ์ž‘์šฉ์„ ํ•˜๋Š”์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ผ๋ฐ˜์ ์œผ๋กœ JPA์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ํŠธ๋žœ์žญ์…˜๋งˆ๋‹ค ์ƒˆ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, A์„œ๋น„์Šค์—์„œ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ณ , B์„œ๋น„์Šค์˜ ํŠธ๋žœ์žญ์…˜์ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํŠธ๋žœ์žญ์…˜ ์ „ํŒŒ ์˜ต์…˜์ด REQUIRES_NEW๋กœ ์„ค์ •๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •์„ ํ•œ๋‹ค๋ฉด,

  1. A์„œ๋น„์Šค์˜ ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜๋ฉฐ A๋งŒ์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  2. B์„œ๋น„์Šค ํ˜ธ์ถœ ์‹œ, ์ „ํŒŒ ์˜ต์…˜์ด REQUIRES_NEW์ด๋ฏ€๋กœ B์—์„œ ์ƒˆ๋กœ์šด ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜๋ฉฐ B๋งŒ์˜ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  3. B์„œ๋น„์Šค๋Š” A์„œ๋น„์Šค์™€ ์ „ํ˜€ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜ ๋ฐ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

* ์ถœ์ฒ˜: ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์™€ ํŠธ๋žœ์žญ์…˜ propagation

 

๋”ฐ๋ผ์„œ FACADE ๊ณ„์ธต์˜ ์ฝ”๋“œ์—์„œ 1๋ฒˆ ์„œ๋น„์Šค์˜ ํŠธ๋žœ์žญ์…˜์ด ์ปค๋ฐ‹๋˜๊ณ , 2๋ฒˆ ์„œ๋น„์Šค์˜ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๊ฒŒ ๋˜๋ฉฐ ์ด๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๊ฒŒ ๋  ๊ฒƒ์ด๋ผ๊ณ  ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ๊ฐ„๊ณผํ•œ ์ : OSIV ์„ค์ • ์—ฌ๋ถ€

ํ•˜์ง€๋งŒ, ๊ฐ„๊ณผํ•œ ๊ฒƒ์ด ์žˆ์œผ๋‹ˆ OSIV ์„ค์ • ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.

OSIV ๋ž€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋ฒ”์œ„ ๋‚ด์—์„œ๋„ ์ง€์—ฐ ๋กœ๋”ฉ์„ ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ƒ๋ช… ๋ฒ”์œ„๋ฅผ ํŠธ๋žœ์žญ์…˜ ๋ฒ”์œ„ ๋ฐ–์—์„œ๋„ ์œ ์ง€์‹œ์ผœ์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ค€์˜์† ์ƒํƒœ๊ฐ€ ์•„๋‹Œ ์˜์†์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๊ธฐ๋ณธ์ ์œผ๋กœ OSIV๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, WARN ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ํ™œ์„ฑํ™” ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

WARN JpaBaseConfiguration$JpaWebConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning

 

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

๊น€์˜ํ•œ๋‹˜์˜ ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ฑ…์— ๋”ฐ๋ฅด๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ƒ์กด ๋ฒ”์œ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉด ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋‚˜, ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ์—์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ๋‹จ ํŠธ๋žœ์žญ์…˜์€ ์‹œ์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค
    • ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— DB์ปค๋„ฅ์…˜์€ ์•„์ง ํš๋“ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. DB์ปค๋„ฅ์…˜๊ณผ ๊ฐ™์€ ๋ฆฌ์†Œ์Šค๋Š” ํŠธ๋žœ์žญ์…˜ ๋™๊ธฐํ™” ๋งค๋‹ˆ์ €(TransactionSynchronizationManager) ๊ฐ€ ์–ป์Šต๋‹ˆ๋‹ค.
  2. ์„œ๋น„์Šค ๊ณ„์ธต์—์„œ @Transactional๋กœ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•  ๋•Œ 1๋ฒˆ์—์„œ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋‘” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ฐพ์•„์™€์„œ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ๋‹ค.
  3. ์„œ๋น„์Šค ๊ณ„์ธต์ด ๋๋‚˜๋ฉด ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•˜๊ณ  ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•œ๋‹ค. ์ด๋•Œ ํŠธ๋žœ์žญ์…˜์€ ๋๋‚ด์ง€๋งŒ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋Š” ์ข…๋ฃŒํ•˜์ง€ ์•Š๋Š”๋‹ค.
  4. ์ปจํŠธ๋กค๋Ÿฌ์™€ ๋ทฐ๊นŒ์ง€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๊ฐ€ ์œ ์ง€๋˜๋ฏ€๋กœ ์กฐํšŒํ•œ ์—”ํ‹ฐํ‹ฐ๋Š” ์˜์† ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค.
  5. ์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ๋‚˜, ์Šคํ”„๋ง ์ธํ„ฐ์…‰ํ„ฐ๋กœ ์š”์ฒญ์ด ๋Œ์•„์˜ค๋ฉด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ์ข…๋ฃŒํ•œ๋‹ค. ์ด๋•Œ ํ”Œ๋Ÿฌ์‹œ๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ๋ฐ”๋กœ์ข…๋ฃŒํ•œ๋‹ค.

๊ทธ๋ž˜์„œ, spring.jpa.open-in-view: false ์„ค์ •์„ ํ†ตํ•ด OSIV ๊ธฐ๋Šฅ์„ ๋„์ง€ ์•Š์•˜๋‹ค๋ฉด OSIV ํ™œ์„ฑํ™”์— ์˜ํ•ด 1๋ฒˆ ์„œ๋น„์Šค์™€ 2๋ฒˆ ์„œ๋น„์Šค๋Š” ๊ฐ™์€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋˜๋ฉฐ 1๋ฒˆ ์„œ๋น„์Šค์˜ ๋ฐ˜ํ™˜๊ฐ’์ธ ์—”ํ‹ฐํ‹ฐ A๋Š” 2๋ฒˆ ์„œ๋น„์Šค์—์„œ ๋ณ€๊ฒฝ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

OSIV ๋‹จ์  : DB ์ปค๋„ฅ์…˜ ๋ฏธ ๋ฐ˜๋‚ฉ

๊ทธ๋Ÿฌ๋‚˜, ์ด๋Š” ์—ฌ๊ธฐ์„œ ์˜ณ์ง€ ๋ชปํ•œ ์„ ํƒ์ž…๋‹ˆ๋‹ค.

OSIV ํ™œ์„ฑํ™”๋กœ ์ธํ•ด ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ ๋ฒ”์œ„๊ฐ€ ๋Š˜์–ด๋‚ฌ๋‹ค๋Š” ๊ฒƒ์€ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•˜๋ฉฐ ์–ป์€ DB ์ปค๋„ฅ์…˜์„ HTTP ์š”์ฒญ์ด ๋๋‚ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋‚ฉํ•˜์ง€ ์•Š๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

์ฆ‰, [1๋ฒˆ ์„œ๋น„์Šค ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘]๊ณผ [2๋ฒˆ ์„œ๋น„์Šค ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘] ์‚ฌ์ด์— ์žˆ๋Š” ์™ธ๋ถ€ API ํ˜ธ์ถœํ•  ๋•Œ๋„ DB ์ปค๋„ฅ์…˜์„ ์œ ์ง€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์ด๋Š” ์™ธ๋ถ€ API ํ˜ธ์ถœ์„ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ถ„๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด FACADE ํŒจํ„ด์„ ๋„์ž…ํ•ด์„œ ์™ธ๋ถ€ API ํ˜ธ์ถœํ•˜๋Š” ๋™์•ˆ์€ DB์ปค๋„ฅ์…˜์„ ๋ฐ˜๋‚ฉํ•˜๊ณ  ํŠธ๋žœ์žญ์…˜์„ ์งง๊ฒŒ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์ด์—ˆ์ง€๋งŒ, ์ •์ž‘ OSIV ํ™œ์„ฑํ™”๋กœ ์ธํ•ด ์™ธ๋ถ€ API ํ˜ธ์ถœ๋™์•ˆ DB์ปค๋„ฅ์…˜์ด ๋ฐ˜ํ™˜๋˜์ง€ ์•Š๋Š” ๊ผด์ด ๋ฉ๋‹ˆ๋‹ค.

 

๊ฒฐ๋ก : OSIV ๋น„ํ™œ์„ฑํ™” ๋ฐ ์ฝ”๋“œ ์ˆ˜์ •

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ ์ž yml ํŒŒ์ผ์— spring.jpa.open-in-view: false ์„ค์ •์„ ์ฃผ์–ด OSIV ์„ค์ •์„ ๋„๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์›๋ž˜ ๊ถ๊ธˆํ–ˆ๋˜ '๋ฐ˜ํ™˜๊ฐ’ A๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋น„์Šค์˜ ํŠธ๋žœ์žญ์…˜์—์„œ ๋ณ€๊ฒฝ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?' ์— ๋Œ€ํ•œ ๋‹ต์€

  • OSIV๊ฐ€ ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ: 1๋ฒˆ ์„œ๋น„์Šค(ํŠธ๋žœ์žญ์…˜)์™€ 2๋ฒˆ ์„œ๋น„์Šค(ํŠธ๋žœ์žญ์…˜)์—์„œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ๊ณต์œ ํ•ด์„œ ๋ณ€๊ฒฝ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.
    • ๋ณ€๊ฒฝ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋‘ ์„œ๋น„์Šค์— ํŠธ๋žœ์žญ์…˜์ด ๊ผญ ์žˆ์–ด์•ผ๋งŒ ํ•ฉ๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜์ด ์žˆ์–ด์•ผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ๋‚ด์šฉ์„ DB๋กœ flush ํ•˜๊ธฐ ๋•Œ๋ฌธ
  • OSIV๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋œ ๊ฒฝ์šฐ: ์„œ๋กœ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์—์„œ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ๊ฐ์ง€๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Œ

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

 

๋งˆ์น˜๋ฉฐ

์‚ฌ์‹ค ์ด ๊ณผ์ •์—์„œ ๋‹ค๋ฃฌ OSIV ์„ค์ •๊ณผ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋Š”, ์ด์ „์— JPA ๊ฐ•์˜๋ฅผ ๋“ค์œผ๋ฉฐ ์ด๋ฏธ ํ•™์Šตํ–ˆ๋˜ ๋‚ด์šฉ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๊ฐ•์˜๋ฅผ ๋“ค์„ ๋‹น์‹œ์—๋Š” ๋‹จ์ˆœํžˆ ๋ˆˆ์œผ๋กœ ๋ณด๊ณ  ๋จธ๋ฆฌ๋กœ ์ดํ•ดํ•œ ๊ฒƒ์— ๊ทธ์ณค๊ณ , ์‹œ๊ฐ„์ด ์ง€๋‚˜๋‹ˆ ๊ทธ ๋‚ด์šฉ์ด ์ •ํ™•ํžˆ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์Šค์Šค๋กœ ๊ณ ๋ฏผํ•˜๊ณ  ํ•ด๊ฒฐํ•˜๋Š” ๊ณผ์ •์—์„œ ์ง€์‹์„ ์ฒดํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌผ๋ก , OSIV ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์€ ๊ฐ•์˜๋ฅผ ๋ฏธ๋ฆฌ ๋“ฃ์ง€ ์•Š์•˜๋‹ค๋ฉด ๋” ๋Šฆ๊ฒŒ ๊นจ๋‹ฌ์•˜์„์ง€๋„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์Šค์Šค๋กœ ์ƒ๊ฐํ•˜๊ณ  ์ง€์‹์„ ํ™œ์šฉํ•  ๋•Œ, ๊ฐ€์žฅ ์˜๋ฏธ ์žˆ๋Š” ํ•™์Šต์„ ํ•  ์ˆ˜ ์žˆ์Œ์„ ๋‹ค์‹œ ํ•œ๋ฒˆ ๋Š๋ผ๋ฉฐ ๋งˆ๋ฌด๋ฆฌ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.  

 

 

์ฐธ๊ณ 

- '์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ' ์ฑ…

- F lab: ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ์˜ OSIV(Open Session In View) ํŒจํ„ด ์ดํ•ด์™€ ์ ์šฉ