์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 

JPA & Spring Data JPA ๊ธฐ์ดˆ

JPA์™€ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์˜ ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[๋ฐฑ์—”๋“œ, ์›น ๊ฐœ๋ฐœ] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • JPA ๊ธฐ๋ณธ ๋งคํ•‘

  • ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ๊ธฐ๋ณธ ์‚ฌ์šฉ๋ฒ•

DB ์—ฐ๋™์˜ ์—ด์‡  JPA! 
์‹ค๋ฌด ์ค‘์‹ฌ์˜ ํ•ต์‹ฌ ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ๐Ÿš€

๋ฐฑ์—”๋“œ ์‹ค๋ฌด์ž๋ฅผ ์œ„ํ•œ 
JPA & ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

JPA & Spring Data JPA?

JPA๋Š” ๊ฐ์ฒด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์— ์˜์†ํ™”ํ•ด์ฃผ๋Š” ๋„๊ตฌ๋กœ, ORM์„ ์œ„ํ•œ JAVA EE ํ‘œ์ค€ ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋Š” ์Šคํ”„๋ง์—์„œ JPA๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฐ๋™ํ•ด ์ฃผ๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

JPA๋ฅผ ๋น ๋ฅด๊ฒŒ ์ตํžˆ๊ณ  ์‹ถ์€ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž์ด์‹ ๊ฐ€์š”? ์Šคํ”„๋ง๊ณผ JPA๋ฅผ ์ด์šฉํ•œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•ด์•ผ ํ•˜๋‚˜์š”? ์ด ๊ฐ•์˜๋Š” ์ž๋ฐ”์—์„œ DB ์—ฐ๋™์„ ํ•  ๋•Œ ํ™œ๋ฐœํ•˜๊ฒŒ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์ธ JPA๋ฅผ ์ตํžˆ๊ณ , ์Šคํ”„๋ง์—์„œ JPA๋ฅผ ์—ฐ๋™ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์˜ ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ•์„ ๋ฐฐ์šฐ๊ธฐ ์œ„ํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค. 

์‹ค์ œ ํ˜„์—…์—์„œ ์“ฐ์ด๋Š” JPA ๊ด€๋ จ ๊ธฐ๋Šฅ์˜ 90%๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

์ด ๊ฐ•์˜๋Š” ์‹ค๋ฌด์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” JPA ๋ฐ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ๊ธฐ๋ณธ๊ธฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ตํžˆ๋Š” ๋ฐ ์ดˆ์ ์„ ๋‘๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•์˜๋ฅผ ๋“ฃ๊ณ  ๋‚˜๋ฉด JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์—์„œ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ , ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์‹ค์ œ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” JPA ๊ด€๋ จ ๊ธฐ๋Šฅ์˜ 90% ์ •๋„๋ฅผ ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์•Œ๋ ค๋“œ๋ฆฝ๋‹ˆ๋‹ค. 

โœ… ์„ ์ˆ˜ ์ง€์‹์„ ํ™•์ธํ•ด์ฃผ์„ธ์š”!

  • ์ž๋ฐ”์—์„œ JDBC, MyBatis๋ฅผ ์ด์šฉํ•œ DB ์—ฐ๋™ ๊ฒฝํ—˜์ด ์žˆ๋Š” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋ˆ„๊ตฌ๋‚˜ ๋“ค์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•™์Šต ๋‚ด์šฉ ๐Ÿ“š

์‹ค์ œ JPA ํ”„๋กœ์ ํŠธ์— ์“ฐ์ด๋Š” JPA ๋ฐ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์„ ๋น ๋ฅด๊ฒŒ ํ•™์Šตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • JPA์˜ ๊ธฐ๋ณธ ๋งคํ•‘ ์„ค์ •
  • ์˜์† ์ปจํ…์ŠคํŠธ
  • ์‹๋ณ„์ž ์ƒ์„ฑ ๋ฐฉ์‹
  • @Embeddable ์„ค์ •
  • ์ฝœ๋ ‰์…˜ ๋งคํ•‘
  • ์—”ํ‹ฐํ‹ฐ ๊ฐ„ ์—ฐ๊ด€ ๋งคํ•‘
  • JPQL & Criteria
  • Spring Data JPA ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ
  • Spring Data JPA Specification ์‚ฌ์šฉ
JPA ๊ธฐ์ดˆ - ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘ ์„ค์ • ์ค‘
Spring Data JPA - ์‹œ์ž‘ํ•˜๊ธฐ ์ค‘

โ€œ๋ฐฑ๋ฐœ์˜ ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๋Š” ์„œ๋ฒ„ ๊ฐœ๋ฐœ์ž, ์ตœ๋ฒ”๊ท ์ž…๋‹ˆ๋‹ค.โ€

์Šคํ”„๋ง๊ณผ JPA๋ฅผ ์ด์šฉํ•œ ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ ๊ฒฝํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. โ€˜์Šคํ”„๋ง 5 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธโ€™, โ€˜JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธโ€™ โ€˜๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐโ€™, โ€˜ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐโ€™ ๋“ฑ์˜ ์ฑ…์„ ์ง‘ํ•„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๊ธฐ์ˆ  ์„œ์ ์„ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (์ €์„œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ)
์œ ํŠœ๋ธŒ์—์„œ ๊ฐœ๋ฐœ ๊ด€๋ จ ์˜์ƒ์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. (์ฑ„๋„ ๋ฐ”๋กœ๊ฐ€๊ธฐ)

Q&A ๐Ÿ’ฌ

Q. SQL์ด๋‚˜ JDBC ๊ฒฝํ—˜์ด ์—†์–ด๋„ ๋˜๋‚˜์š”?

์ตœ์†Œํ•œ ์ž๋ฐ”์—์„œ ๊ธฐ๋ณธ์ ์ธ SELECT, UPDATE, DELETE, INSERT ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฝํ—˜์€ ์žˆ์–ด์•ผ ๊ฐ•์˜ ๋‚ด์šฉ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q. ๊ฐ•์˜์—์„œ ์–ธ๊ธ‰ํ•œ JPA ๋ฒ„์ „์ด 3.0์ธ๋ฐ ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ๋Š” JPA 2 ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „์œผ๋กœ ์ธํ•œ ์ฐจ์ด๋Š” ์—†๋‚˜์š”?

๊ฐ•์˜์—์„œ ์†Œ๊ฐœํ•˜๋Š” ๋‚ด์šฉ์€ ํŒจํ‚ค์ง€ ๋ช…์„ ์ œ์™ธํ•˜๋ฉด ๊ธฐ๋Šฅ์ƒ ์ฐจ์ด๊ฐ€ ์—†์œผ๋‹ˆ ๊ฐ•์˜์—์„œ ์†Œ๊ฐœํ•œ ๋‚ด์šฉ์„ ๋™์ดํ•˜๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Q. ๊ฐ•์˜์—์„œ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ๋Š” ์–ด๋””์„œ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๊นƒํ—ˆ๋ธŒ ๋งํฌ๋ฅผ ํ†ตํ•ด ๊ณต๊ฐœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. (https://github.com/madvirus/jpa-basic)

Q. QueryDSL์€ ์™œ ์•ˆ ๋‹ค๋ฃจ๋‚˜์š”?

๊ฐ•์˜์—์„œ๋„ ์–ธ๊ธ‰ํ•˜์ง€๋งŒ ๋ชฉ๋ก, ์ƒ์„ธ์™€ ๊ฐ™์€ ์กฐํšŒ ๊ธฐ๋Šฅ์€ SQL์„ ์ง์ ‘ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜(JdbcTemplate์ด๋‚˜ MyBatis), ๊ฒ€์ƒ‰ ์กฐ๊ฑด ์กฐํ•ฉ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ Specification์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค.

ํ•จ๊ป˜ ๋ณด๋ฉด ์ข‹์€ ๊ฐ•์˜ ๐Ÿ“บ

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ๊ธฐ๋ณธ์ ์ธ JPA ์‚ฌ์šฉ๋ฒ•์„ ์ตํžˆ๊ณ  ์‹ถ์€ ๋ถ„

  • ์Šคํ”„๋ง์—์„œ JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์€ ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • JDBC, MyBatis๋ฅผ ์ด์šฉํ•œ DB ์—ฐ๋™ ๊ฒฝํ—˜

  • ์ž๋ฐ”์—์„œ SELECT, UPDATE, DELETE, INSERT ๋“ฑ์˜ ๊ธฐ๋ณธ์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ ๊ฒฝํ—˜

์•ˆ๋…•ํ•˜์„ธ์š”
์ตœ๋ฒ”๊ท ์ž…๋‹ˆ๋‹ค.

7,773

๋ช…

์ˆ˜๊ฐ•์ƒ

296

๊ฐœ

์ˆ˜๊ฐ•ํ‰

41

๊ฐœ

๋‹ต๋ณ€

4.9

์ 

๊ฐ•์˜ ํ‰์ 

2

๊ฐœ

๊ฐ•์˜

๊ฐ์ฒด ์ง€ํ–ฅ, ๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„, ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ๋“ฑ์— ๊ด€์‹ฌ์ด ๋งŽ์€ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ์ €์„œ:

  • ๋„๋ฉ”์ธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ
  • ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜๊ธฐ
  • JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ
  • ์Šคํ”„๋ง5 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ž…๋ฌธ
  • JSP 2.3 ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ €์ž
๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

25๊ฐœ โˆ™ (3์‹œ๊ฐ„ 56๋ถ„)

๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!