# JPA

Java Persistence API


๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , JPA API๋ฅผ ํ™œ์šฉํ•ด DB๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

JPA๋Š” ์˜ค๋Š˜๋‚  ์Šคํ”„๋ง์—์„œ ๋งŽ์ด ํ™œ์šฉ๋˜๊ณ  ์žˆ์ง€๋งŒ, ์Šคํ”„๋ง์ด ์ œ๊ณตํ•˜๋Š” API๊ฐ€ ์•„๋‹Œ ์ž๋ฐ”๊ฐ€ ์ œ๊ณตํ•˜๋Š” API๋‹ค.

์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ช…์„ธ๋กœ, ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋‹ค.


# ORM(Object Relational Mapping)

ORM ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์ž๋ฐ” ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• DB๋ฅผ ๋งคํ•‘ํ•œ๋‹ค. ์ฆ‰, ๊ฐ์ฒด๊ฐ€ DB ํ…Œ์ด๋ธ”์ด ๋˜๋„๋ก ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ์ด๋‹ค. ORM์„ ์‚ฌ์šฉํ•˜๋ฉด, SQL์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ ์ง๊ด€์ ์ธ ๋ฉ”์†Œ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. ( ๊ฐœ๋ฐœ์ž์—๊ฒŒ ์ƒ์‚ฐ์„ฑ์„ ํ–ฅ์ƒ์‹œ์ผœ์ค„ ์ˆ˜ ์žˆ์Œ )

์ข…๋ฅ˜๋กœ๋Š” Hibernate, EclipseLink, DataNucleus ๋“ฑ์ด ์žˆ๋‹ค.


์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” spring-boot-starter-data-jpa๋กœ ํŒจํ‚ค์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•˜๋ฉฐ, ์ด๋Š” Hibernate ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํ™œ์šฉํ•œ๋‹ค.


JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ JDBC ์‚ฌ์ด์—์„œ ๋™์ž‘ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ์ž๊ฐ€ JPA๋ฅผ ํ™œ์šฉํ–ˆ์„ ๋•Œ JDBC API๋ฅผ ํ†ตํ•ด SQL์„ ํ˜ธ์ถœํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ˜ธ์ถœํ•˜๋Š” ์ „๊ฐœ๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค.

์ฆ‰, ๊ฐœ๋ฐœ์ž๋Š” JPA์˜ ํ™œ์šฉ๋ฒ•๋งŒ ์ตํžˆ๋ฉด DB ์ฟผ๋ฆฌ ๊ตฌํ˜„์—†์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.


# JPA ํŠน์ง•

  1. # ๊ฐ์ฒด ์ค‘์‹ฌ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ

    SQL ์ค‘์‹ฌ ๊ฐœ๋ฐœ์ด ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด, CRUD ์ž‘์—…์ด ๋ฐ˜๋ณตํ•ด์„œ ์ด๋ฃจ์–ด์ ธ์•ผํ•œ๋‹ค.

    ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด์•ผํ•  ๋•Œ ์ด์— ํ•ด๋‹นํ•˜๋Š” CRUD๋ฅผ ์ „๋ถ€ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฉฐ, ์ถ”ํ›„์— ์ปฌ๋Ÿผ์ด ์ƒ์„ฑ๋˜๋ฉด ๊ด€๋ จ SQL์„ ๋ชจ๋‘ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค. ๋˜ํ•œ ๊ฐœ๋ฐœ ๊ณผ์ •์—์„œ ์‹ค์ˆ˜ํ•  ๊ฐ€๋Šฅ์„ฑ๋„ ๋†’์•„์ง„๋‹ค.


  2. # ์ƒ์‚ฐ์„ฑ ์ฆ๊ฐ€

    SQL ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ , ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด์— JPA ๋ฉ”์†Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค์šฐ ํŽธ๋ฆฌ์„ฑ์„ ์ œ๊ณตํ•ด์ค€๋‹ค.


  3. # ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด

    ์ฟผ๋ฆฌ ์ˆ˜์ •์ด ํ•„์š”ํ•  ๋•Œ, ์ด๋ฅผ ๋‹ด์•„์•ผ ํ•  DTO ํ•„๋“œ๋„ ๋ชจ๋‘ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€๋งŒ JPA์—์„œ๋Š” ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ์ •๋ณด๋งŒ ๋ณ€๊ฒฝํ•˜๋ฉด ๋˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ดํ•˜๋‹ค.

  4. # ์„ฑ๋Šฅ ์ฆ๊ฐ€

    ์‚ฌ๋žŒ์ด ์ง์ ‘ SQL์„ ์งœ๋Š” ๊ฒƒ๊ณผ ๋น„๊ตํ•ด์„œ JPA๋Š” ๋™์ผํ•œ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์บ์‹œ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต์  ๋†’์€ ์„ฑ๋Šฅ ํšจ์œจ์„ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.


# ์ œ์•ฝ์‚ฌํ•ญ

JPA๋Š” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ณด๋‹ค๋Š” ์‹ค์‹œ๊ฐ„ ์ฟผ๋ฆฌ์— ์ตœ์ ํ™”๋˜์–ด์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ํ†ต๊ณ„ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ๋ณต์žกํ•œ ์ž‘์—…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ๊ธฐ์กด์˜ Mybatis์™€ ๊ฐ™์€ Mapper ๋ฐฉ์‹์ด ๋” ํšจ์œจ์ ์ผ ์ˆ˜ ์žˆ๋‹ค.

Spring์—์„œ๋Š” JPA์™€ Mybatis๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ƒํ™ฉ์— ๋งž๋Š” ๋ฐฉ์‹์„ ํƒํ•˜์—ฌ ๊ฐœ๋ฐœํ•˜๋ฉด ๋œ๋‹ค.



# [์ฐธ๊ณ  ์‚ฌํ•ญ]

์ตœ์ข… ์ˆ˜์ • : 12/17/2022, 7:23:59 AM