Skip to content

Latest commit

ย 

History

History
99 lines (64 loc) ยท 5.88 KB

01.md

File metadata and controls

99 lines (64 loc) ยท 5.88 KB

01. JPA ์†Œ๊ฐœ

๐Ÿ‘ฉ๐Ÿผโ€๐Ÿš€ ์ด ๊ธ€์€ ๊น€์˜ํ•œ๋‹˜์˜ '์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ'์„ ๊ณต๋ถ€ํ•˜๋ฉฐ ์ •๋ฆฌํ•œ ๊ฒƒ์ž„์„ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.


1.1 SQL์„ ์ง์ ‘ ๋‹ค๋ฃฐ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์ 

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

1. ๋ฐ˜๋ณต์ ์ธ ์ž‘์—…

  • ๊ฐ์ฒด ์ค‘์‹ฌ์ ์œผ๋กœ ์งœ์—ฌ์ง„ ์ž๋ฐ”์™€ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์œผ๋กœ ์งœ์—ฌ์ง„ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ฐจ์ด๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ ๋ฐ”๋กœ ์ €์žฅ์ด ๋ถˆ๊ฐ€, ๋”ฐ๋ผ์„œ ์ค‘๊ฐ„์—์„œ ๋ณ€ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”
  • ์ด๋Ÿฌํ•œ ๊ณผ์ •์€ ๊ต‰์žฅํžˆ ๋งŽ์€ SQL๋ฌธ๊ณผ JDBC API๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”๋ฐ ์ด๋Š” ์ง€๋ฃจํ•จ์˜ ์—ฐ์†

2. SQL์— ์˜์กด์ ์ธ ๊ฐœ๋ฐœ

  • ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„์ง€ ์—†์„์ง€๋Š” ์‚ฌ์šฉ๋˜๋Š” SQL์— ๋‹ฌ๋ ค ์žˆ์œผ๋ฏ€๋กœ ์ด๋Š” SQL์„ ์‚ฌ์šฉํ•˜๋Š” ๊ณ„์ธต์„ ์ถ”์ƒํ™” ์‹œ์ผœ๋„ ์–ด๋–ค SQL์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ผ์ผ์ด ํ™•์ธ์„ ํ•ด์•ผ ํ•จ(๋…ผ๋ฆฌ์  ์ข…์†)
  • ์ด๋Š” ์ฆ‰, ์—”ํ‹ฐํ‹ฐ(๋ชจ๋ธ๋งํ•œ ๊ฐ์ฒด)๋ฅผ ์‹ ๋ขฐ ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ๊ณผ ๋™์ผ

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

  • ํ˜„๋Œ€์˜ ๋ณต์žกํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋Œ€๋ถ€๋ถ„ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ
  • ๊ฐ์ฒด๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ ์–ด๋”˜๊ฐ€์— ์˜๊ตฌ์ ์œผ๋กœ ๋ณด๊ด€, ๋ฉ”์„œ๋“œ๋Š” ํด๋ž˜์Šค์— ์ด๋ฏธ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค์˜ ์†์„ฑ๋งŒ ๋”ฐ๋กœ ์ €์žฅ ๋ฐ ๋ณต๊ตฌ
  • ๋‹จ์ˆœํ•œ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ํŒŒ์ผ ํ˜น์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋ฉด ๋˜์ง€๋งŒ, ์ƒ์† ๋ฐ›๋Š”๋‹ค๊ฑฐ๋‚˜ ์ฐธ์กฐ๋ฅผ ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ์ €์žฅํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š์Œ
    ์˜ˆ) ์ถ•๊ตฌ ์„ ์ˆ˜๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅ, ํ•ด๋‹น ๊ฐ์ฒด๋Š” ํŒ€์„ ์ฐธ์กฐ ํ˜•ํƒœ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Œ ๋‹จ์ˆœํžˆ ์ถ•๊ตฌ ์„ ์ˆ˜๋งŒ ์ €์žฅํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์„ ์ˆ˜๋Š” ํŒ€ ๊ฐ์ฒด๋ฅผ ์žƒ์–ด๋ฒ„๋ฆผ
  • ๋Œ€์ฒด์•ˆ์œผ๋กœ ์ž๋ฐ”์—์„œ๋Š” ์ง๋ ฌํ™”/์—ญ์ง๋ ฌํ™”๋ฅผ ์ œ๊ณตํ•˜์ง€๋งŒ ์ด๋Š” ์ง๋ ฌํ™” ๋˜์–ด์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ค์›€
  • ํ˜„์‹ค์ ์œผ๋กœ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์ด๋Š” ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์œผ๋กœ ๊ตฌ์กฐํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ์ฒด์ง€ํ–ฅ์—์„œ์˜ ์ถ”์ƒํ™”, ์ƒ์†, ๋‹คํ˜•์„ฑ๊ณผ ๊ฐ™์€ ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
  • ์ด๋ฅผ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜๋ผ๊ณ  ํ•จ

1. ์ƒ์†

  • ๊ฐ์ฒด๋Š” ์ƒ์†์ด ์กด์žฌ, ํ…Œ์ด๋ธ”์€ ์ƒ์†์ด๋ž€ ๊ธฐ๋Šฅ์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ
  • ์Šˆํผํƒ€์ž…๊ณผ ์„œ๋ธŒํƒ€์ž… ๊ด€๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ…Œ์ด๋ธ”์—์„œ ์ƒ์†๊ณผ ๋น„์Šทํ•˜๊ฒŒ ์„ค๊ณ„๋Š” ๊ฐ€๋Šฅ
  • ํ•˜์ง€๋งŒ ์ด๋Š” ํ•œ๋ฒˆ์— ์กฐํšŒํ•˜๋Š” SQL์€ ์กด์žฌํ•˜์ง€ ์•Š์•„ ์ž‘์„ฑํ•ด์•ผ ํ•  ์ฝ”๋“œ๊ฐ€ ๋งŽ๊ณ , ์ž์‹ ํƒ€์ž…์— ๋”ฐ๋ผ 'DTYPE'๋„ ์ €์žฅ

2. ์—ฐ๊ด€๊ด€๊ณ„

  • ๊ฐ์ฒด - ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด ์ ‘๊ทผ
    ํ…Œ์ด๋ธ” - ์™ธ๋ž˜ํ‚ค ๊ฐ€์ง€๊ณ  ์กฐ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ด€๋œ ํ…Œ์ด๋ธ” ์กฐํšŒ
  • ๊ฐ์ฒด๋Š” ์ฐธ์กฐ๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‚˜ ํ…Œ์ด๋ธ”์€ ์™ธ๋ž˜ํ‚ค ํ•˜๋‚˜๋กœ ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅ
  • ๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”์— ๋งž์ถ”์–ด ์™ธ๋ž˜ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ๊ด€๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๋ฉด ํ…Œ์ด๋ธ”์— ์ €์žฅ/ ์กฐํšŒ๋Š” ํŽธ๋ฆฌ
  • ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ์ฒด์—์„œ ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ๋ฐ”๋กœ ์ ‘๊ทผ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฉฐ ๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŠน์ง•์„ ์žƒ์–ด๋ฒ„๋ฆฌ๊ธฐ ์‰ฌ์›€

3. ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰

  • ๊ฐ์ฒด๋Š” ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด ์—ฐ๊ด€๋œ ๊ฐ์ฒด๋ฅผ ๊ณ„์†ํ•ด์„œ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์Œ, ์ด๋ฅผ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์ด๋ผ ํ•จ
    ์ถ•๊ตฌ ์„ ์ˆ˜ โ†’ ํŒ€ โ†’ ๊ตฌ๋‹จ์ฃผ๋ผ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฐธ์กฐ๊ฐ€ ๋˜์–ด ์žˆ์„ ์‹œ์— ์ถ•๊ตฌ ์„ ์ˆ˜์—์„œ ๊ตฌ๋‹จ์ฃผ๊นŒ์ง€ ํƒ์ƒ‰ ๊ฐ€๋Šฅ
  • ๋ฐ˜๋ฉด SQL์€ ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ตฌ๊ฐ„์ด ์ •ํ•ด์ง
  • ์ด๋Š” ์–ธ์ œ ์—ฐ๊ฒฐ๊ณ ๋ฆฌ๊ฐ€ ๋Š์–ด์งˆ์ง€ ๋ชจ๋ฅด๋Š” ๊ฐ์ฒด ๊ทธ๋ž˜ํ”„์—์„œ๋Š” ์น˜๋ช…์ 
  • ๋˜, ์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” SQL์„ ์ง์ ‘ ํ™•์ธ(๋…ผ๋ฆฌ์  ์ข…์†)

4. ๋น„๊ต

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ๋Š” ๊ธฐ๋ณธ ํ‚ค๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ฐ ๋กœ์šฐ๋ฅผ ๊ตฌ๋ถ„, ๊ฐ์ฒด๋Š” ๋™์ผ์„ฑ(์ฃผ์†Œ ๊ฐ’์„ ๋น„๊ต)๊ณผ ๋™๋“ฑ์„ฑ(๋‚ด๋ถ€ ๊ฐ’์„ ๋น„๊ต) ๋น„๊ต๋ผ๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๊ตฌ๋ถ„

1.3 JPA๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

  • JPA(Java Persistence API)๋Š” ์ž๋ฐ” ์ง„์˜์˜ ORM ๊ธฐ์ˆ  ํ‘œ์ค€, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ JDBC API ์‚ฌ์ด์—์„œ ๋™์ž‘
  • ORM(Object-Relational Mapping)์€ ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ์ฒด์™€ ํ…Œ์ด๋ธ”์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ถˆ์ผ์น˜๋กœ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ์ ์„ ๊ฐœ๋ฐœ์ž ๋Œ€์‹  ํ•ด๊ฒฐ
  • ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๋Š” ๊ฐœ๋ฐœ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ์กฐ์„ฑ

์†Œ๊ฐœ

  • ๊ณผ๊ฑฐ ์ž๋ฐ” ์ง„์˜์€ EJB(Enterprise Java Beans)๋ผ๋Š” ๊ธฐ์ˆ  ํ‘œ์ค€์ด ์กด์žฌ, ๊ทธ ์•ˆ์— ์—”ํ‹ฐํ‹ฐ ๋นˆ์ด๋ผ๋Š” ORM ๊ธฐ์ˆ  ํฌํ•จ
  • ์ด๋Š” ๊ต‰์žฅํžˆ ๋ณต์žกํ•˜๊ณ  ๊ธฐ์ˆ ์˜ ์„ฑ์ˆ™๋„๊ฐ€ ๋–จ์–ด์ง€๋ฉฐ ์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์—์„œ๋งŒ ๋™์ž‘
  • ์ด๋•Œ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋ž€ ์˜คํ”ˆ์†Œ์Šค ORM์ด ๋“ฑ์žฅ, ์ด์ „ ์—”ํ‹ฐํ‹ฐ ๋นˆ์˜ ๋ฌธ์ œ์ ๋“ค์„ ๋ชจ๋‘ ํ•ด๊ฒฐ
  • EJB 3.0์—์„œ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๊ธฐ๋ฐ˜์œผ๋กœ ์ƒˆ๋กœ์šด ์ž๋ฐ” ORM ๊ธฐ์ˆ  ํ‘œ์ค€์ด ์ƒ์„ฑ, ์ด๊ฐ€ ๋ฐ”๋กœ JPA
  • ์ฆ‰, JPA๋Š” ์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ API ํ‘œ์ค€ ๋ช…์„ธ

์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์ƒ์‚ฐ์„ฑ โ†‘

    JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ž๋ฐ” ์ปฌ๋ ‰์…˜์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋“ฏ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ์ €์žฅ ๊ฐ€๋Šฅ
    ์ด๋Š” JPA์—์„œ ์•Œ์•„์„œ ํ•ด์ฃผ๋ฉฐ CRUD์™€ ๊ฐ™์€ ๋ฐ˜๋ณต์ ์ธ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋จ

  • ์œ ์ง€๋ณด์ˆ˜ โ†‘

    ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ์กด์— ์‹ ๊ฒฝ์จ์•ผ ํ–ˆ๋˜ SQL๋ฌธ, JDBC API ์ฝ”๋“œ ๋“ฑ์„ JPA์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์œ ์ง€๋ณด์ˆ˜ํ•  ์ฝ”๋“œ์˜ ์–‘์ด ์ค„์–ด๋“ฆ

  • ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ถˆ์ผ์น˜ ํ•ด๊ฒฐ

  • ์„ฑ๋Šฅ

    ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—ฌ๋Ÿฌ๋ฒˆ ์ ‘๊ทผํ•˜์—ฌ ๊ฐ€์ ธ์˜ฌ ๋ฐ์ดํ„ฐ๋“ค๋„ ์žฌ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ์กด ์ฝ”๋“œ๋ณด๋‹ค ๋” ๋†’์€ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์คŒ

  • ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์ถ”์ƒํ™”, ๋ฒค๋” ๋…๋ฆฝ์„ฑ

    ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์ด์— ์ถ”์ƒํ™”๋œ ๊ณ„์ธต์„ ์ œ๊ณตํ•˜์—ฌ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ข…์†๋˜์ง€ ์•Š๋„๋ก ํ•จ

  • ํ‘œ์ค€