JPA์™€ Hibernate

+ Spring Data JPA

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

JPA(Java Persistence API)

JPA๋Š” Java์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค์ด๋‹ค. ๋”ฐ๋ผ์„œ ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์•˜๋‹ค.

๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ์— Java ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, ์ž๋ฐ” ์ง„์˜์—์„œ ORM ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ JDBC ์‚ฌ์ด์— ๋™์ž‘ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ORM์ด๋ž€, Object Relationsip Mapper์˜ ์•ฝ์ž๋กœ JDBC๋‚˜ Spring JDBC, iBatis์—์„œ๋Š” db ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ณ„๋„๋กœ ๋กœ์ง์„ ์ž‘์„ฑํ•˜๊ณ , ์ด๋ฅผ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ–ˆ์ง€๋งŒ ORM์€ SQL ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ ๋„ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ฐฉ์‹์˜ DB๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋Œ€ํ‘œ์ ์ธ ํ”„๋ ˆ์ž„์›Œํฌ๋กœ Hibernate๊ฐ€ ์กด์žฌํ•œ๋‹ค.

Hibernamte

Hibernate๋Š” JPA์˜ ๊ตฌํ˜„์ฒด์ด๋‹ค. ์‹ค์ œ๋กœ JPA์˜ ํ•ต์‹ฌ์ธ EntityManagerFactory, EntityManager, Entity Transaction์„ Hibernate์—์„œ๋Š” SessionFactory, Session, Trasaction์œผ๋กœ ์ƒ์† ๋ฐ›๊ณ  ๊ฐ๊ฐ Impl๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค.

Impl ํด๋ž˜์Šค๋Š” Hibernate์˜ ํด๋ž˜์Šค์ด๋‹ค.

JPA์™€ Hibernate๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

JPA

  • JPA๋Š” ORM ๋„๊ตฌ์— ์ผ๋ถ€ ๊ธฐ๋Šฅ๊ณผ ํ‘œ์ค€์„ ์ œ๊ณตํ•˜๋Š” Java ์‚ฌ์–‘์ผ ๋ฟ ๊ตฌํ˜„์ด ์•„๋‹ˆ๋‹ค.

  • ๊ฐ์ฒด-๊ด€๊ณ„ํ˜• ๋งคํ•‘์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค์ •ํ•˜๋Š” ๊ทœ์น™์˜ ์ง‘ํ•ฉ์ด๋‹ค.

  • ๋‹คํ˜•์„ฑ๊ณผ ์ƒ์†์„ ์ง€์›ํ•œ๋‹ค.

  • ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด๋กœ์„œ JPQL์„ ์‚ฌ์šฉํ•˜์—ฌ DB ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค.

Hibernate

  • JPA์˜ ๊ฐ€์ด๋“œ๋ผ์ธ์˜ ๊ตฌํ˜„์ฒด์ด๋‹ค.

  • JPA๊ฐ€ ์ œ๊ณตํ•œ ๊ณตํ†ต ํ‘œ์ค€์„ ๋”ฐ๋ฅธ๋‹ค.

  • RDB ์‹œ์Šคํ…œ์— Java ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š” ORM ๋„๊ตฌ์ด๋‹ค.

๊ฒฐ๋ก ์€ Hibernate๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๊ณ  JPA๋Š” API ์‚ฌ์–‘์ด๋‹ค.

์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ?

jdbc๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ sql ์ฟผ๋ฆฌ๋“ค์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๋ฉด์„œ ์ค‘๋ณต๋œ ์ฝ”๋“œ๋“ค์ด ๋ฐœ์ƒํ•˜์˜€๋‹ค. ๋˜, ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งคํ•‘ํ•˜๋Š” ์ž‘์—…์ด๋‹ค. RDB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋„๋ฉ”์ธ ๋ชจ๋ธ๋“ค์„ ๊ด€๊ณ„ํ˜•์œผ๋กœ ๋ฌถ๊ธฐ ์œ„ํ•จ์ธ๋ฐ, ์ด๋ฅผ ์•Œ์•„์„œ ๋งคํ•‘ํ•ด์ค€๋‹ค.

  • ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ : CRUD ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•ด์ฃผ๊ณ  ๋ฐ˜๋ณต์ ์ธ SQL ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š์•„๋„ ๋จ

  • ์œ ์ง€๋ณด์ˆ˜ : ๊ฐ์ฒด ์ˆ˜์ •์— ๋”ฐ๋ฅธ SQL ์ฝ”๋“œ ์ˆ˜์ • ์ž‘์—…์ด ํ•„์š” ์—†๋‹ค.

  • ๋ฐ์ดํ„ฐ ๊ด€๊ณ„ ๋งคํ•‘ : ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ

  • ์„ฑ๋Šฅ : ์บ์‹ฑ ์ง€์›

๋‹จ์ ์€ ๋ฌด์—‡์ผ๊นŒ?

ORM์€ ํŽธํ•˜์ง€๋งŒ ์‹ค์ œ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š”๊ฒƒ ๋งŒํผ์€ ์„ฑ๋Šฅ์ด ์ข‹์ง€ ์•Š๋‹ค๊ณ  ํ•œ๋‹ค.

๊ฐ„๋‹จํ•œ ์„œ๋น„์Šค๋‚˜ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณณ์—์„œ๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์ข‹๊ฒ ์ง€๋งŒ, ์„œ๋น„์Šค๊ฐ€ ๋ณต์žกํ•˜๊ณ  ๊ทธ๋งŒํผ ์š”๊ตฌ์‚ฌํ•ญ์ด ํฌ๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ๋‹ค๋ฉด ๋ชจ๋“  ๊ณณ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋Š” ํž˜๋“ค๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” JPA๊ฐ€ ์ง€์›ํ•˜๋Š” JPQL์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ Query๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜๊ฑฐ๋‚˜, ORM๊ณผ MyBatis๋ฅผ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, QueryDSL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค.

JPA๋Š” ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Entity์˜ ์ƒ๋ช…์ฃผ๊ธฐ, ์บ์‹œ, ์“ฐ๊ธฐ ์ง€์—ฐ, ์ƒ์† ์ „๋žต, ์ปฌ๋ ‰์…˜ ๋งคํผ ๋“ฑ DB๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜๋“ค์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๋ฅผ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋А๋ƒ์— ๋”ฐ๋ผ์„œ ์„ฑ๋Šฅ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

Spring Data JPA

Data JPA๋Š” JPA๋ฅผ ๋” ํŽธํ•˜๊ณ  ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค์–ด๋†“์€ ๋ชจ๋“ˆ์ด๋‹ค. JPA๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœํ•˜๋ฉด @Entity์™€ ๊ฐ™์€ ์–ด๋…ธํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜๋ฉด ์•Œ์•„์„œ DDL์„ ์ˆ˜ํ–‰ํ–ˆ์—ˆ๋‹ค. ์ด๊ฒƒ์ด Spring Data JPA์ด๋‹ค.

JpaRepository๋ฅผ ์‚ฌ์šฉํ•ด์„œ JPA์˜ ๊ตฌํ˜„์ฒด์ธ Hibernate๋กœ ์š”์ฒญ์„ ์ „๋‹ฌํ•˜๊ณ , Hibernate๋Š” ๊ทธ์— ๋งž๋Š” JDBC API๋ฅผ ์‚ฌ์šฉํ•ด์„œ DB์— ์ ‘๊ทผํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์• ํ”Œ๋ฆฌ์—์ด์…˜์— ๋ฐ˜ํ™˜ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

JPA๋Š” ๋‚ด๋ถ€์—์„œ JDBC API๊ฐ€ ์‹ค์ œ๋กœ ๋™์ž‘ํ•˜๊ณ  ์žˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์„ ๋ฟ ๋™์ž‘์€ ๋™์ผํ•˜๋‹ค.

Last updated