JPA, Spring Data JPA Document - dev-team-projects/DeliTalk GitHub Wiki

์ž‘์„ฑ์ž : ์ž„์„ฑ์ค€


JPA, Spring Data JPA

  • ๋‘˜ ๋‹ค Java ORM ๊ธฐ์ˆ ๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

JPA - Java Persistence API

  • ๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• DB ๊ฐ„์˜ ๋งคํ•‘์„ ์œ„ํ•œ ํ‘œ์ค€ ๋ช…์„ธ์ž…๋‹ˆ๋‹ค.

  • DB ์—ฐ๋™์— ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ˆ ์€ ๊ฐ€์žฅ ์ „ํ†ต์ ์ธ JDBC๋ถ€ํ„ฐ Spring DAO, Mybatis, Hibernate ๋“ฑ ORM์— ์ด๋ฅด๊ธฐ ๊นŒ์ง€ ๋‹ค์–‘ํ•˜๊ฒŒ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

  • ์ด ์ค‘ Hibernate ๊ฐ™์€ ๊ฒฝ์šฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‚ฌ์šฉํ•˜๋Š” SQL๊นŒ์ง€๋„ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ผ๋“ค์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

  • ์ด๋Ÿฐ ORM๋“ค์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ‘œ์ค€ํ™”ํ•œ ๊ฒƒ์ด JPA์ž…๋‹ˆ๋‹ค.

ํŠน์ง•

DB ์ถ”์ƒํ™”

  • JPA๋ฅผ ํ†ตํ•ด DB์˜ ์ข…๋ฅ˜์™€ ์ƒ๊ด€์—†์ด ๊ฐ์ฒด ์ค‘์‹ฌ DB ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ

  • ์—”ํ‹ฐํ‹ฐ ๋งคํ•‘, ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ, ์ฟผ๋ฆฌ API ๋“ฑ์˜ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด DB์™€ ๊ฐ์ฒด ๊ฐ„์˜ ๋งคํ•‘์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

JPA ๊ฐœ๋… ์ดํ•ดํ•˜๊ธฐ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ ํ˜น์€ ์šด์šฉ ์ค‘ ์ƒ์„ฑ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด DB ๊ฐ™์€ ์ €์žฅ๊ณต๊ฐ„์— ์ €์žฅํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
DB ์—ฐ๋™ ๊ธฐ์ˆ ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ SQL์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๊ตฌ๋ถ„๋ฉ๋‹ˆ๋‹ค.
  • Mybatis ํ”„๋ ˆ์ž„์›Œํฌ์˜ ๊ฒฝ์šฐ์—๋Š” SQL์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ XML ํŒŒ์ผ์— ๋“ฑ๋กํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€๋งŒ Hibernate ORM์˜ ๊ฒฝ์šฐ์—๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ SQL์„ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๊ฐ€ SQL์„ ์ง์ ‘ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

SQL์„ ์ง์ ‘ ๋‹ค๋ฃจ๋Š” ๊ธฐ์ˆ ์˜ ๋ฌธ์ œ์ 

๊ฒŒ์‹œ๊ธ€์ผ ๊ฒฝ์šฐ BOARD_TB ํ…Œ์ด๋ธ”๊ณผ BoardVO ํด๋ž˜์Šค๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์‹œ๊ธ€ CRUD ์ž‘์—…์„ ์œ„ํ•ด์„œ๋Š” ์ด ๋‘ ๊ฐ€์ง€๋ฅผ ์—ฐ๊ฒฐํ•  SQL๊ตฌ๋ฌธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

INSERT...
SELECT...
UPDATE...
DELETE...

๊ทธ๋ฆฌ๊ณ  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ JDBC๋ฅผ ์ด์šฉํ•  ๊ฒฝ์šฐ
๋“œ๋ผ์ด๋ฒ„ ํด๋ž˜์Šค ๋กœ๋”ฉ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ
์ปค๋„ฅ์…˜ ์—ฐ๊ฒฐ,
Statement ๊ฐ์ฒด ์ƒ์„ฑ,
SQL ์ „์†ก ๋ฐ ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ,
์—ฐ๊ฒฐํ•ด์ œ ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ๋ฐ˜๋ณต ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

โžก๏ธ ์ด๊ฒƒ์„ Mybatis ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋А ์ •๋„๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ SQL ๊ตฌ๋ฌธ์„ ๋ณ„๋„์˜ XML ํŒŒ์ผ์— ๋“ฑ๋กํ•˜์—ฌ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋ฏ€๋กœ
์œ ์ง€๋ณด์ˆ˜๊ณผ์ •์—์„œ SQL์ด ์ˆ˜์‹œ๋กœ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ํŠน์ • ํ…Œ์ด๋ธ”์— ์ปฌ๋Ÿผ์ด ์ถ”๊ฐ€๋  ๊ฒฝ์šฐ
VO์—๋„ ํ•„๋“œ ๋ณ€์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๊ณ 
๊ด€๋ จ SQL ๊ตฌ๋ฌธ๋„ ์ „๋ถ€ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ์ฝ”๋“œ๋„ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โžก๏ธ ๊ฒฐ๊ตญ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์Šต๋‹ˆ๋‹ค.

SQL์„ ์ง์ ‘ ๋‹ค๋ฃจ์ง€ ์•Š๋Š”๋‹ค๋ฉด

  • ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์€ Hibernate์™€ ๊ฐ™์€ ORM ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ORM์€ VO ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ •๋ณด๋ฅผ DB๊ฐ€์•„๋‹Œ Map ๊ฐ™์€ ์ปฌ๋ ‰์…˜์— ์ €์žฅํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.
    • โžก๏ธ ํŠน์ • ์ปฌ๋Ÿผ์ด ์ถ”๊ฐ€๋  ์‹œ ๋ณ€์ˆ˜๋งŒ ์ถ”๊ฐ€ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๊ด€๋ฆฌ๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.

JPA๋Š” JDBC API์™€ ๊ฐ™์€ ๊ฐœ๋…

  • JDBC API๋Š” JDBC ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ DB ์—ฐ๋™์„ ์ฒ˜๋ฆฌํ•˜๋ฉด ์‹คํ–‰๋  ๋•Œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋“œ๋ผ์ด๋ฒ„ ๊ฐ์ฒด๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•ด์•ผ ์ถ”ํ›„ DB๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ DB์— ์ข…์†์ ์ธ ๋“œ๋ผ์ด๋ฒ„๋งŒ ๊ต์ฒดํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.
  • ์ด์ฒ˜๋Ÿผ JPA๋„ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ DB๋ฅผ ์ฒ˜๋ฆฌํ•˜๋ฉด ์‹ค์ œ๋กœ๋Š” JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

โžก๏ธ ์ด ๊ตฌํ˜„์ฒด๊ฐ€ Hibernate์ž…๋‹ˆ๋‹ค.

  • JPA ์‚ฌ์šฉ ์‹œ ๊ฐœ๋ฐœ ์‹œ์ ์—๋Š” Hibernate๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ค์ œ ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋  ๋•Œ๋Š” ๋‹ค๋ฅธ ORM ๊ธฐ์ˆ ๋กœ ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

JPA ๋™์ž‘ ์›๋ฆฌ

  • JPA๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์ปฌ๋ ‰์…˜์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ๊ณผ ๋น„์Šทํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

  • ๊ฒฐ๊ตญ ์ปฌ๋ ‰์…˜์— ์ €์žฅ๋œ ๊ฐ์ฒด๋ฅผ ํ…Œ์ด๋ธ”์˜ ROW์™€ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” JDBC API๋ฅผ ์ด์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • JPA๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ JDBC ์‚ฌ์ด์— ์กด์žฌํ•˜์—ฌ JDBC์˜ ๋ณต์žกํ•œ ์ฒ˜๋ฆฌ๋ฅผ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

JDBC API๋ฅผ ๋ชฐ๋ผ๋„ DB๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ DB ์‚ฌ์ด์—์„œ JPA์˜ ์—ญํ• 

JPA์˜ ์—ญํ• 

๊ทธ๋Ÿผ JPA๋Š” Mybatis์™€ ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†๋Š” ๊ฒƒ์ธ๊ฐ€..?

JPA์™€ Mybatis์˜ ์ฐจ์ด

  • JPA๋Š” DB ์—ฐ๋™๋ฟ ์•„๋‹ˆ๋ผ SQL๊นŒ์ง€ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
๊ตฌ๋ถ„ JPA (ORM) Mybatis (SQL Mapper)
SQL ์ž‘์„ฑ ์ž๋™ ์ƒ์„ฑ (JPQL๋กœ ํ•„์š” ์‹œ ์ž‘์„ฑ) ์ง์ ‘ ์ž‘์„ฑ (XML or Annotation)
๊ฐ์ฒด ๋งคํ•‘ Entity ๊ธฐ๋ฐ˜ ResultMap ๋“ฑ ์ˆ˜๋™ ๋งคํ•‘
์œ ์ง€๋ณด์ˆ˜์„ฑ ์ปฌ๋Ÿผ ๋ณ€๊ฒฝ ์‹œ ์—”ํ‹ฐํ‹ฐ ์ˆ˜์ • SQL๊ณผ ๊ฐ์ฒด ๋‘˜ ๋‹ค ์ˆ˜์ • ํ•„์š”
๋Ÿฌ๋‹์ปค๋ธŒ ์ƒ๋Œ€์ ์œผ๋กœ ๋†’์Œ ์ƒ๋Œ€์ ์œผ๋กœ ๋‚ฎ์Œ
์ž์œ ๋„ ๋‚ฎ์Œ (์ถ”์ƒํ™” ๋†’์Œ) ๋†’์Œ (SQL ์™„์ „ ์ œ์–ด ๊ฐ€๋Šฅ)

JPA์˜ SQL ์ƒ์„ฑ ๋งค์ปค๋‹ˆ์ฆ˜

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์กด์žฌํ•˜๊ณ  ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ CRUD SQL๋ฌธ์€ ์–ด๋А ์ •๋„ ๋น„์Šทํ•˜๋ฏ€๋กœ VO ํด๋ž˜์Šค๋ฅผ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„๊ณผ ๋™์ผํ•˜๊ฒŒ ์—ฐ๊ฒฐํ•˜๊ณ  ์ปฌ๋Ÿผ์„ VO ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜์™€ ์—ฐ๊ฒฐํ•˜๋ฉด ์–ด๋А์ •๋„ ํš์ผํ™”๋œ SQL์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Spring Data JPA

  • Spring Data JPA๋Š” JPA๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜์—ฌ DB ์ ‘๊ทผ ์ฝ”๋“œ๋ฅผ ๋”์šฑ ๊ฐ„๊ฒฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” Spring ํ”„๋กœ์ ํŠธ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค.

    • JPA๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๋ชจ๋“ˆ์ž…๋‹ˆ๋‹ค.
      • Spring Data JPA๋Š” JPA + Spring Data๋ผ๋Š” ๋ณ„๋„์˜ ์ถ”์ƒํ™” ๊ณ„์ธต์„ ์ถ”๊ฐ€ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” Repository ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์ •์˜ํ•˜๊ณ , Spring Data JPA๊ฐ€ ์ด๋ฅผ ์ž๋™์œผ๋กœ ๊ตฌํ˜„ํ•ด ์ค๋‹ˆ๋‹ค.

JPA๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ XML ์„ค์ •์„ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

ํŠน์ง•

JPA ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฐ˜๋ณต์ ์ธ CRUD ์ฝ”๋“œ ์ž‘์„ฑ์„ ์ค„์—ฌ์ค๋‹ˆ๋‹ค.

๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ถ”์ƒํ™”

  • JPA ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋กœ์ง (CRUD, ํŽ˜์ด์ง•, ์ •๋ ฌ ๋“ฑ)์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์ค๋‹ˆ๋‹ค.

๊ฐ„ํŽธํ•œ ๊ฐœ๋ฐœ

  • ๊ฐœ๋ฐœ์ž๋Š” ๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ ์ž‘์„ฑ ๋Œ€์‹ , ๋ฉ”์„œ๋“œ ์ด๋ฆ„๋งŒ์œผ๋กœ ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฐ„๋‹จํ•œ ์„ค์ •์„ ํ†ตํ•ด DB ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค ๋งคํ•‘๋ฒ•

์–ด๋…ธํ…Œ์ด์…˜ ์„ค๋ช…
@Entity ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์ž„์„ ๋ช…์‹œ. ์ด ํด๋ž˜์Šค๋Š” JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋ฉ๋‹ˆ๋‹ค.
@Table ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ” ์ด๋ฆ„๊ณผ ์ถ”๊ฐ€ ์„ค์ •์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉ. ํด๋ž˜์Šค๋ช…๊ณผ ํ…Œ์ด๋ธ”๋ช…์ด ๊ฐ™์œผ๋ฉด ์ƒ๋žต ๊ฐ€๋Šฅ.
@Id **๊ธฐ๋ณธ ํ‚ค(primary key)**๋ฅผ ์ง€์ •. ๋ฐ˜๋“œ์‹œ ํ•œ ๊ฐœ ์ด์ƒ ํ•„์š”.
@GeneratedValue ๊ธฐ๋ณธ ํ‚ค์˜ ๊ฐ’ ์ƒ์„ฑ ์ „๋žต์„ ์ง€์ • (์˜ˆ: AUTO, IDENTITY, SEQUENCE, TABLE). ๋ณดํ†ต auto-increment์— ์‚ฌ์šฉ.

์ถ”๊ฐ€๋กœ ์ž์ฃผ ์“ฐ์ด๋Š” ์–ด๋…ธํ…Œ์ด์…˜

์–ด๋…ธํ…Œ์ด์…˜ ์„ค๋ช…
@Column ์ปฌ๋Ÿผ์˜ ์ด๋ฆ„, ๊ธธ์ด, nullable ์—ฌ๋ถ€ ๋“ฑ ์†์„ฑ์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉ.
@Enumerated Enum ํƒ€์ž…์„ ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉ. (ORDINAL ๋˜๋Š” STRING)
@Lob Large Object ํƒ€์ž… ๋งคํ•‘ (BLOB, CLOB).
@Transient DB์— ๋งคํ•‘ํ•˜์ง€ ์•Š๋Š” ํ•„๋“œ์— ์‚ฌ์šฉ.
@Temporal (๊ตฌ๋ฒ„์ „) ๋‚ ์งœ ํƒ€์ž… ๋งคํ•‘ํ•  ๋•Œ ์‚ฌ์šฉ (Date, Calendar). ํ˜„์žฌ๋Š” LocalDate, LocalDateTime ๊ถŒ์žฅ.
@Embedded ์ž„๋ฒ ๋””๋“œ ํƒ€์ž…(๋‚ด์žฅ ํƒ€์ž…) ๋งคํ•‘.
@Embeddable ์ž„๋ฒ ๋””๋“œ ํƒ€์ž… ํด๋ž˜์Šค์— ์‚ฌ์šฉ.
์–ด๋…ธํ…Œ์ด์…˜ ์„ค๋ช…
@Repository JPA Repository๋ฅผ Spring Bean์œผ๋กœ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉ. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋„ ๋‹ด๋‹น.
@Query JPQL ๋˜๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ‘ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ.
@Modifying Update/Delete ์ฟผ๋ฆฌ์— ๋ถ™์—ฌ์•ผ ํ•จ.
@EntityListeners ์—”ํ‹ฐํ‹ฐ ์ƒ๋ช…์ฃผ๊ธฐ ์ด๋ฒคํŠธ ์ฝœ๋ฐฑ ๋“ฑ๋ก.