๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ก JPA ์˜ ์ •์˜

Java Persistance API ์˜ ์•ฝ์ž

  • Java ์ง„์˜์—์„œ ORM (Object-Relation Mapping) ๊ธฐ์ˆ  ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค ๋ชจ์Œ
  •  ORM : ๊ฐ์ฒด๋Š” ๊ฐ์ฒด๋Œ€๋กœ, ๋ฐ์ดํ„ฐ๋Š” ๋ฐ์ดํ„ฐ ๋Œ€๋กœ ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ
  • ์ž๋ฐ”์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์ •์˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค
  • JPA๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋งํ•˜๊ณ  ์ด ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„์ฒด๋กœ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๋“ค ์ค‘์— Hibernate, Open JPA ๋“ฑ์ด ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 
  • ํ•˜์ง€๋งŒ Spring์—์„œ ์ง์ ‘ ์‚ฌ์šฉํ•  ๋•Œ Hibernate๊ฐ™์€ ๊ตฌํ˜„์ฒด๋ฅผ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•จ (๋ณดํ†ต์€ Spring Data JPA )

๐Ÿ’ก JPA ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ธฐ ๊นŒ์ง€ 

 

1. ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ 

xml์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๊ฐ์ฒด์˜ ๋ชจ๋ธ๋ง์ด ์•„๋‹Œ, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์— ์ดˆ์ ์„ ๋‘๊ณ  SQL ์ž‘์„ฑํ•˜๋Š”๋ฐ ์‹œ๊ฐ„์ด ๋” ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

  • RDBMS : ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ €์žฅํ• ์ง€์— ๋Œ€ํ•œ ์ดˆ์ 
  • ๊ฐ์ฒด์ง€ํ–ฅ : ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ , ๊ธฐ๋Šฅ๊ณผ ์†์„ฑ์„ ํ•œ ๊ณณ์—์„œ ๊ด€๋ฆฌ ( ๋‹คํ˜•์„ฑ, ์ถ”์ƒํ™”, ์บก์Šํ™” ๋“ฑ๋“ฑ )

๋‘ ๊ฐ€์ง€์˜ ์„œ๋กœ ๋‹ค๋ฅธ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ผ์น˜์‹œ์ผœ ์ฃผ๊ธฐ ์œ„ํ•œ ๊ธฐ์ˆ 

 

 

2. ๊ณผ๊ฑฐ์—๋Š” JDBC๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ–ˆ๋‹ค. mybatis๊ฐ™์€ ๊ฒƒ๋“ค.

JDBC : Java Database Connectivity

*Java ์—์„œ DB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ œ๊ณตํ•˜๋Š” API

 

JDBC ๋“œ๋ผ์ด๋ฒ„์—์„œ ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” DB์˜ ๋“œ๋ผ์ด๋ฒ„(oracle, mysql … ๋“ฑ )๋งŒ ์„ ํƒํ•˜๋ฉด ์ถ”๊ฐ€ ํ™˜๊ฒฝ์„ค์ • ์—†์ด ์–ด๋–ค Database๋“ ์ง€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜, ๊ฐœ๋ฐœ์ž๊ฐ€ connection ๊ด€๋ฆฌ์™€ ์˜ˆ์™ธ์ฒ˜๋ฆฌ, ๋ฌด์ˆ˜ํžˆ ๋งŽ์€ try catch… ์ ˆ์„ ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์–ต์„ ๋– ์˜ฌ๋ ค ๋ณด๋ฉด ์—ฌ๊ฐ„ ๋ถˆํŽธํ–ˆ๋˜ ๊ฒŒ ์•„๋‹ˆ๋‹ค.

์ด ๋ถˆํŽธํ•จ์„ ํ•ด์†Œํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ๊ฒŒ Spring JDBC์ด๋ฉฐ 

 

spring JDBC๋Š” JDBC Driver manager ๊ฐ€ ํ•ด์•ผํ•  ์ผ์„ Jdbc Template์— ์œ„์ž„ํ•œ๋‹ค.

๊ฐœ๋ฐœ์ž๋Š” ๋ฉ”์„œ๋“œ์— ์ฟผ๋ฆฌ๋งŒ ๋งคํ•‘ํ•˜๋ฉด DB๋ฅผ ์†์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ( → SQL Mapper (mybatis ๋„ mapper์˜ ํ•œ ์ข…๋ฅ˜ )์„ ์‚ฌ์šฉํ•ด์„œ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๊ฒƒ )

 

๊ทธ๋Ÿฌ๋‚˜ xml ๊ธฐ๋ฐ˜์€ ์ˆ˜์ • ์‹œ DTO ๋ฅผ ํ•จ๊ป˜ ์ˆ˜์ •ํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์กด์žฌํ•˜๋ฉฐ ๊ธฐ๋ณธ CRUD ์ฒ˜๋Ÿผ ์ฝ”๋“œ์˜ ๋ฐ˜๋ณต์ด ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋œ๋‹ค. 

 


๐Ÿ’ก ์žฅ ๋‹จ์  

 

ORM ์€ SQL Mapper ์—†์ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค. 

๊ทธ๋ ‡๋‹ค๊ณ  ORM์ด ๋ฌด์กฐ๊ฑด์ ์œผ๋กœ ์ข‹์€ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. 

 

SQL Mapper ์˜ ์žฅ์ ์œผ๋กœ๋Š” ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ํ˜น์€ ํ”„๋กœ์‹œ์ €๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ธˆ์œต, ํ†ต๊ณ„ ๊ฐ™์€ ์‹œ์Šคํ…œ์€ ์•„์ง xml ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ˜•ํƒœ๊ฐ€ ๋งŽ๋‹ค. 

๋‹จ, ๊ธฐ๋ณธ CRUD ์ž‘์„ฑ ์‹œ ์ค‘๋ณต ์ฝ”๋“œ ์ž‘์„ฑ์˜ ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ๋‹ค.

 

๋ฐ˜๋ฉด ORM ์€ ??

๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์‚ฌ์šฉ์—๋Š” ํ•œ๊ณ„๊ฐ€ ์žˆ์œผ๋‚˜, ๊ธฐ๋ณธ CRUD ๋ฅผ ์ œ๊ณตํ•˜๋ฉฐ

์ฟผ๋ฆฌ ์ž‘์„ฑ ์‹œ DB์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค. (์˜ˆ, Oracle ๊ณผ Mysql ์˜ ๋ฌธ๋ฒ•์€ ๋‹ค๋ฅด๋‹ค.)

 

๊ทธ๋Ÿฌ๋‚˜ ์ดˆ๊ธฐ ๋Ÿฌ๋‹ ์ปค๋ธŒ๊ฐ€ ๋†’๊ณ  ๋ณต์žกํ•œ ํ”„๋กœ์‹œ์ €๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ์žˆ์–ด ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์ด ๋” ๋ณต์žกํ•ด์งˆ ๊ฐ€๋Šฅ์„ฑ์€ ์žˆ๋‹ค. 

 


๐Ÿ’ก Spring Data JPA ๋Š” ? 

 

์œ„์— ์„ค๋ช…ํ•œ JPA ๋ฅผ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ Spring ์ธก์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด Spring Data JPA ์ด๋‹ค.

JPARepository๋ฅผ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋ฉฐ Hibernate๊ฐ™์€ JPA ๊ตฌํ˜„์ฒด๋“ค์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š”๊ฒŒ Spring JPA ์ธ ๊ฒƒ

 

JPA<- Hibernate <- Spring JPA

 

SpringData JPA ๊ฐ€ ์—ฐ๊ฒฐ์„ ์ค‘์žฌํ•ด์ฃผ๋ฉด์„œ DB์— ์ข…์†๋˜์ง€ ์•Š๊ณ  ๋ณ€๊ฒฝ์— ์ข‹๋‹ค.