JPA

JPA ๊ตฌ์กฐ

JPA๋ž€?

  • JPA๋Š” Java Persistence API. ์ž๋ฐ”์˜ ์˜์†์„ฑ(์ง€์†์„ฑ) APIโ€ฆ ์กฐ๊ธˆ๋งŒ ๋” ์•Œ์•„๋ณด์ž.
  • JAVA APP <-> JDBC ์‚ฌ์ด์—์„œ ๋™์ž‘ํ•œ๋‹ค.
  • JPA๋ฅผ ํ†ตํ•ด์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ๋–„๋ฌธ์— JDBC๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ์œ„์˜ ํŠน์ง•์œผ๋กœ ์ธํ•ด์„œ SQL ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์—์„œ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋œ๋‹ค.
  • ํ˜„์žฌ ์ž๋ฐ” ์ง„์˜์˜ ORM ๊ธฐ์ˆ  ํ‘œ์ค€
  • JPA๋Š” ORM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ์•„๋‘” ๊ฒƒ์ด๊ณ , JPA๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Hibernate, EclipseLink, DataNucleus์™€ ๊ฐ™์€ ORM์„ ์‚ฌ์šฉํ•œ๋‹ค.

ORM (Object-relational Mapping)

  • ๊ฐœ๋ฐœํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฐ์ฒด์™€ DB์˜ ํ…Œ์ด๋ธ”์ด ๋งคํ•‘๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  • java์—๋งŒ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ , ๋‹ค์–‘ํ•œ ์–ธ์–ด/ํ”„๋ ˆ์ž„์›Œํฌ์—๋„ ์žˆ๋‹ค.

    <example>
    
    1. DB
    SELECT * FROM members WHERE members.memberId = 1
    
    2. ORM
    member = member.findAllByMemberId(1);
    
  • DB query๋ฅผ ์ง์ ‘ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ํ…Œ์ด๋ธ” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์œผ๋‹ˆ, ์ƒ์‚ฐ์„ฑ์ด ๋งค์šฐ ๋†’์•„์ง„๋‹ค.
  • ํ•˜์ง€๋งŒ, query๊ฐ€ ๋ณต์žกํ•ด์ง€๋ฉด, ORM๋งŒ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š”๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ๊ณ , ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด ์—„์ฒญ๋‚˜๊ฒŒ ๊ธธ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

JPA ์ด์ „์˜ ๋ฌธ์ œ์ 

  • Mybatis์—์„œ๋Š” SQL ๋ฐ˜๋ณต ์ž‘์—…์ด ๋งค์šฐ ๋งŽ์•˜๋‹ค. ํ…Œ์ด๋ธ”์ด ์ข€ ์ˆ˜์ •๋˜๋ฉด, ์ด์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  DAO์˜ SQL์„ ์ˆ˜์ •ํ–ˆ๋‹ค.
  • DAO์™€ ํ…Œ์ด๋ธ”์ด ๊ฐ•ํ•œ ์˜์กด์„ฑ์„ ๊ฐ–๊ณ  ์žˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ฐ์ฒด ๋ชจ๋ธ๋ง๋ณด๋‹ค ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ ๋ชจ๋ธ๋ง(ํ…Œ์ด๋ธ” ์„ค๊ณ„)์„ ์šฐ์„ ์‹œํ–ˆ๋‹ค.
  • ๊ฐ์ฒด์ง€ํ–ฅ์˜ ์žฅ์ (์ถ”์ƒํ™”, ์บก์Аํ™”, ์ •๋ณด์€๋‹‰, ์ƒ์†, ๋‹คํ˜•์„ฑ)์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด๋ฅผ ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ๋ชฉ์ (VO, DTO)์—๋งŒ ์‚ฌ์šฉํ–ˆ๋‹ค.

์ฆ‰, ๊ฐ์ฒด์ง€ํ–ฅ ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐœ๋ฐœํ•˜๊ณ  ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์ „ํ˜€ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋А๋ผ๊ฒŒ ๋œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์„ ๋งคํ•‘ ์‹œ์ผœ์ฃผ๋Š” ORM์ด ์ฃผ๋ชฉ ๋ฐ›๊ธฐ ์‹œ์ž‘ํ–ˆ๊ณ , ์ž๋ฐ” ์ง„์˜์—์„œ๋Š” JPA๋ผ๋Š” ํ‘œ์ค€ ์ŠคํŽ™์ด ์ •์˜ ๋˜์—ˆ๋‹ค.

Hibernate

์œ„์˜ ๋ฌธ์ œ์ ๋“ค์„ ํ•ด๊ฒฐํ•ด์ค€ ๊ฒƒ์ด Hibernate. ๋ฌผ๋ก  ์žฅ๋‹จ์ ์€ ์žˆ๋‹ค.

์žฅ์ 

  1. ์ƒ์‚ฐ์„ฑ

    • SQL์„ ์ง์ ‘ ์‚ฌ์šฉ X -> ๋ฉ”์†Œ๋“œ ์‚ฌ์šฉ -> SQL ๋ฐ˜๋ณต ์ž‘์—… X
      • ๋‹ค๋งŒ, SQL์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋ฟ SQL์„ ์ž˜ ์•Œ์•„์•ผ JPA๋ฅผ ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
      • Hibernate๊ฐ€ ์‹คํ–‰ํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ฝ˜์†”๋กœ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, SQL์„ ์ž˜ ์•Œ์•„์•ผ ์ฟผ๋ฆฌ๊ฐ€ ์ƒ๊ฐ๋Œ€๋กœ ์ˆ˜ํ–‰๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์œ ์ง€๋ณด์ˆ˜

    • ํ…Œ์ด๋ธ”์ด ์ˆ˜์ •๋์„ ๊ฒฝ์šฐ, ๊ด€๋ จ๋œ ๊ท€์ฐฎ์€ ์ผ๋“ค์„ JPA๊ฐ€ ๋Œ€์‹ ํ•ด์ค˜์„œ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์ข‹๋‹ค.
  3. ๋‹ค์–‘ํ•œ DB์— ํ˜ธํ™˜ ๊ฐ€๋Šฅ

    • ์—ฌ๋Ÿฌ DB ๋ฒค๋”( MySQL, Oracle ๋“ฑ.. )๋งˆ๋‹ค SQL ์‚ฌ์šฉ์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์‹œ ์ฒ˜์Œ ์„ ํƒํ•œ DB๋ฅผ ๋‚˜์ค‘์— ๋ฐ”๊พธ๋Š” ๊ฒƒ์€ ๋งค์šฐ ์–ด๋ ต.
    • ๊ทธ๋Ÿฐ๋ฐ JPA๋Š” ์ถ”์ƒํ™”๋œ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ณ„์ธต์„ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ฒค๋”์— ์ข…์†์ ์ด์ง€ ์•Š๋‹ค.
    • ์ฆ‰, ์„ค์ • ํŒŒ์ผ์—์„œ JPA์—๊ฒŒ ์–ด๋–ค DB๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ์–ผ๋งˆ๋“ ์ง€ DB๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜๊ฐ€ ์žˆ๊ฒŒ ๋œ๋‹ค.

๋‹จ์ 

  1. ์„ฑ๋Šฅ

    • ๋ฐ”๋กœ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค JPA ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์ž‘์ด ์ถ”๊ฐ€์ ์œผ๋กœ ์žˆ์œผ๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค.
    • ๊ณผ๊ฑฐ ORM์€ ์„ฑ๋Šฅ์ด ์ •๋ง ๋งŽ์ด ์•ˆ ์ข‹์•˜์œผ๋‚˜, ํ˜„์žฌ๋Š” ๋งŽ์ด ๋ฐœ์ „ํ•˜์˜€์Œ.
  2. ์„ธ๋ฐ€ํ•จ

    • ๋ฐ”๋กœ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์— ๋น„ํ•ด ์„ธ๋ฐ€ํ•จ์ด ๋–จ์–ด์ง„๋‹ค. JPA๋ฅผ ์ž˜๋ชป ์‚ฌ์šฉํ–ˆ์„ ๊ฒฝ์šฐ ์˜๋„ํ•œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ํž˜๋“ค๋‹ค.
    • JPA์—์„œ ๋‹ค๋ฃจ๊ธฐ ํž˜๋“  ๊ฒƒ๋“ค์„ ๋ณด์™„ํ•˜๊ธฐ ์œ„ํ•ด JPQL, nativeQuery ๋“ฑ์„ ์ง€์›ํ•œ๋‹ค.
  3. ๋Ÿฌ๋‹์ปค๋ธŒ

    • ๊ธฐ์กด์— ๋น„ํ•ด ๋ฐฐ์›Œ์•ผํ•  ๊ฒƒ์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•œ๋‹ค.

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ