• [Spring] JPA๋ž€? JPA ๊ฐœ๋…๊ณผ ์žฅ๋‹จ/ ORM์ด๋ž€/ Spring Data JPA

    2023. 10. 13.

    by. @leeeun

    ORM์ด๋ž€?

    • ORM(Object Relational Mapping) ์˜ ์•ฝ์ž
    • ๊ฐ์ฒด ์ง€ํ–ฅ์˜ class์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(Relational Database)๋ฅผ ๋งคํ•‘์‹œํ‚จ๋‹ค๋Š” ์ถ”์ƒํ™”๋œ ๊ฐœ๋…
    • ๊ธฐ์ˆ ์ ์œผ๋กœ๋Š” ๊ฐ์ฒด๋ฅผ RDB ํ…Œ์ด๋ธ”์— SQL๋ฌธ์„ ์ผ์ผ์ด ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ์ž๋™์œผ๋กœ ์˜์†ํ™” ํ•ด์ฃผ๋Š” ๊ฒƒ

    • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ์™€ ๊ฐ์ฒด ์ง€ํ–ฅ์—์„œ ํด๋ž˜์Šค๋กœ ์„ค๊ณ„ํ•˜๋Š” ๋ชจ์Šต์ด ์œ ์‚ฌํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ๊ฐ์ฒด ์ง€ํ–ฅ์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ƒ๊ฐ์—์„œ ์‹œ์ž‘
    • ํŠน์ •ํ•œ ์–ธ์–ด์— ์ข…์†์ ์ธ ๊ฐœ๋…์ด ์•„๋‹˜

     

    ์žฅ์ 

    • SQL๋ฌธ์ด ์•„๋‹Œ Method๋ฅผ ํ†ตํ•ด DB๋ฅผ ์กฐ์ž‘→ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ์ฒด ๋ชจ๋ธ์„ ์ด์šฉํ•˜์—ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ์Œ.(๋‚ด๋ถ€์ ์œผ๋กœ๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ DB๋ฅผ ์กฐ์ž‘ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋ฅผ ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์•„๋„๋จ)
    • Query์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ์„ ์–ธ๋ฌธ, ํ• ๋‹น ๋“ฑ์˜ ๋ถ€์ˆ˜์ ์ธ ์ฝ”๋“œ๊ฐ€ ์ค„์–ด๋“ค์–ด, ๊ฐ์ข… ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณ„๋„๋กœ ์ž‘์„ฑํ•˜์—ฌ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ž„
    • ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅ
    • ๋งคํ•‘ํ•˜๋Š” ์ •๋ณด๊ฐ€ Class๋กœ ๋ช…์‹œ ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ERD๋ฅผ ๋ณด๋Š” ์˜์กด๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๊ณ  ์œ ์ง€๋ณด์ˆ˜ ๋ฐ ๋ฆฌํŒฉํ† ๋ง์— ์œ ๋ฆฌ
    • ex) ๊ธฐ์กด ๋ฐฉ์‹์—์„œ MySQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ PostgreSQL๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด๋ฉด, ์ƒˆ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์งœ์•ผํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น€. ์ด๋Ÿฐ ๊ฒฝ์šฐ์— ORM์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Œ

     

    JPA๋ž€?

    • Java Persistence API์˜ ์•ฝ์ž, ์ž๋ฐ”์˜ ORM์„ ์œ„ํ•œ ํ‘œ์ค€ ๊ธฐ์ˆ 
    • ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ํ‘œ์ค€(์ธํ„ฐํŽ˜์ด์Šค)
    • ๊ธฐ์กด์˜ JDBC ๋“ฑ์„ ์ด์šฉํ•ด์„œ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋˜ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ๊ด€๋ จ ์ž‘์—…์„ JPA ๊ณ„์ธต์—์„œ ์ฒฏ๋ฆฌ
    • JPA ์ž์ฒด๋Š” ์ŠคํŽ™์— ๋ถˆ๊ณผํ•˜๋ฏ€๋กœ ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ์ œํ’ˆ์ด๋‚˜ ํ”„๋ ˆ์ž„ ์›Œํฌ์˜ ์กด์žฌ๊ฐ€ ํ•„์ˆ˜์ ์ž„

    • ex) Hibernate : ORM ํ”„๋ ˆ์ž„์›Œํฌ, EclipseLink….

     

    JPA ์‚ฌ์šฉ์˜ ์žฅ์  (ORM์˜ ์žฅ์ ๊ณผ ์œ ์‚ฌ)

    • SQL ์ฟผ๋ฆฌ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์ž‘์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์–ด ์ฝ”๋“œ๋Ÿ‰์˜ ๊ฐ์†Œ
    • ๊ฐ€๋…์„ฑ์ด ์ข‹์Œ
    • ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜์ • ๊ฐ€๋Šฅ (์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ˆ˜์›”)
    • DB ๋ฒค๋”(ํšŒ์‚ฌ)์— ๋…๋ฆฝ์ ์ธ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ
    • ๋งคํ•‘๋œ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•ด์„œ SQL์„ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰ → SQL์ด ์•„๋‹Œ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ
    • ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐ (์ž๋ฐ”๋Š” ์ƒ์†์„ ์ง€์›ํ•˜์ง€๋งŒ db์—์„œ๋Š” ์ง€์› ์•ˆํ•˜๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ)

    JPA ์‚ฌ์šฉ์˜ ๋‹จ์ 

    • ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋งŽ์Œ
    • ๊ทผ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„๊ฐ€ ๋ฐ˜์˜๋˜์–ด์•ผ ํ•จ
    • ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ฐ•๋ ฅํ•จ์„ ํ™œ์šฉํ•  ์ˆ˜ ์—†์Œ (native SQL ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์žˆ์œผ๋‚˜, ์ด ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋…๋ฆฝ์ ์ธ ๊ฐœ๋ฐœ์ด ๋ถˆ๊ฐ€๋Šฅ

     

    JPA๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ์˜ ๊ฐœ๋ฐœ ๊ตฌ์กฐ

     

    Spring Data JPA๋ž€?

    • JPA๋ฅผ ์Šคํ”„๋ง์—์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • JPA๋ฅผ ์ด์šฉํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ๋” ์ถ”์ƒํ™”์‹œ์ผœ ๋” ์‰ฝ๊ฒŒ JPA๋ฅผ ์ด์šฉํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ
    • ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์— ์ข…์†์ ์ธ SQL๋ฌธ ์—†์ด๋„ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅ
    • ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์žฅ์ ์€ ๊ธฐ์กด์˜ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋“ค๊ณผ์˜ ํ†ตํ•ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์  → ์ด๋ฅผ ์œ„ํ•œ ์–ด๋Œ‘ํ„ฐ๋“ค์„ ์ง€์› (๊ฐœ๋ฐœ์˜ ํŽธ์˜๋ฅผ ๋•๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ๋“ค์ด ๋งŽ์Œ)

     

     <์ฐธ๊ณ ,์ธ์šฉ>

    ๐Ÿ“– ์Šคํƒ€ํŠธ ์Šคํ”„๋ง ๋ถ€ํŠธ - ๊ตฌ๋ฉ๊ฐ€๊ฒŒ ์ฝ”๋”ฉ๋‹จ

    [JPA] JPA๋ž€? Spring Data JPA๋กœ ๊ฐ„๋‹จ ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ ๊ตฌํ˜„

    [Spring JPA] JPA ๋ž€?

     

    ๋Œ“๊ธ€