๋‚ด์ผ๋ฐฐ์›€์บ ํ”„

Spring ์ž…๋ฌธ 2์ฃผ์ฐจ : JPA - 1

KIMHYEYUN 2023. 11. 7. 11:38
๋ฐ˜์‘ํ˜•

JPA๋ž€?

ORM์ด๋ž€?

๐Ÿ’Ž Obect-Relational Mapping

๋ฐ˜๋ณต์ ์ด๊ณ  ๋ฒˆ๊ฑฐ๋กœ์šด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์—์„œ์˜ SQL ์ž‘์—…์„ ์ค„์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด์„œ ORM(๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘)๊ธฐ์ˆ ๋“ค์ด ๋“ฑ์žฅ

  • ORM์€ ๊ฐ์ฒด์™€ DB์˜ ๊ด€๊ณ„๋ฅผ ๋งคํ•‘ํ•ด์ฃผ๋Š” ๋„๊ตฌ

JPA๋ž€?

๐Ÿ’Ž Java-Persistence API (์ž๋ฐ” ORM ๊ธฐ์ˆ ์— ๋Œ€ํ•œ ํ‘œ์ค€ ๋ช…์„ธ)

  • JPA๋Š” Java ORM ๊ธฐ์ˆ ์˜ ๋Œ€ํ‘œ์ ์ธ ํ‘œ์ค€ ๋ช…์„ธ์„œ

  • JPA๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ JDBC ์‚ฌ์ด์—์„œ ๋™์ž‘

  • JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด DB ์—ฐ๊ฒฐ ๊ณผ์ •์„ ์ง์ ‘ ๊ฐœ๋ฐœํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

  • ๋˜ํ•œ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๊ฐ„์ ‘์ ์œผ๋กœ DB ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์‰ฝ๊ฒŒ DB ์ž‘์—…์„ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

ํ•˜์ด๋ฒ„๋„ค์ดํŠธ(Hibernate)๋ž€?

  • JPA๋Š” ํ‘œ์ค€ ๋ช…์„ธ์ด๊ณ , ์ด๋ฅผ ์‹ค์ œ ๊ตฌํ˜„ํ•œ ํ”„๋ ˆ์ž„์›Œํฌ ์ค‘ ์‚ฌ์‹ค์ƒ ํ‘œ์ค€์ด ํ•˜์ด๋ฒ„๋„ค์ดํŠธ
  • ์Šคํ”„๋ง ๋ถ€ํŠธ์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉ

    ์‚ฌ์‹ค์ƒ ํ‘œ์ค€ (de facto, ๋””ํŒฉํ† )
    ๋ณดํ†ต ๊ธฐ์—…๊ฐ„ ์น˜์—ดํ•œ ๊ฒฝ์Ÿ์„ ํ†ต์ƒˆ ์‹œ์žฅ์—์„œ ๊ฒฐ์ •๋˜๋Š” ๋น„ ๊ณต์‹์  ํ‘œ์ค€
    ์ถœ์ฒ˜: ์œ„ํ‚ค๋ฐฑ๊ณผ

Entity

Entity๋ž€?

  • JPA์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ํด๋ž˜์Šค ์ฆ‰, ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ
  • Entity ํด๋ž˜์Šค๋Š” DB์˜ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜์–ด JPA์— ์˜ํ•ด ๊ด€๋ฆฌ๋จ

์• ๋…ธํ…Œ์ด์…˜

  • @Entity : JPA๊ฐ€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Entity ํด๋ž˜์Šค๋กœ ์ง€์ •
    • name = "name" : ํด๋ž˜์Šค์˜ ์ด๋ฆ„ ์ง€์ • (default: ํด๋ž˜์Šค๋ช…)
    • JPA๊ฐ€ Entity ํด๋ž˜์Šค๋ฅผ ์ธ์Šคํ„ด์Šคํ™” ํ•  ๋•Œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ํ˜„์žฌ Entity ํด๋ž˜์Šค์—์„œ ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ
  • @Table : ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์„ ์ง€์ •
    • name = "name" : ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„ ์ง€์ • (default: Entity ๋ช…)
  • @Column
    • name = "name" : ํ•„๋“œ์™€ ๋งคํ•‘ํ•  ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ ์ง€์ • (default: ๊ฐ์ฒด์˜ ํ•„๋“œ๋ช…)
    • nullable = false : ๋ฐ์ดํ„ฐ์˜ null ๊ฐ’ ํ—ˆ์šฉ ์—ฌ๋ถ€ ์ง€์ •(default: true)
    • unique = true : ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต ๊ฐ’ ํ—ˆ์šฉ ์—ฌ๋ถ€ ์ง€์ •(default : false)
    • length = 100 : ๋ฐ์ดํ„ฐ์˜ ๊ฐ’(๋ฌธ์ž)์˜ ๊ธธ์ด์— ์ œ์•ฝ์กฐ๊ฑด์„ ๊ฒ€(default: 255)
  • @Id : ํ…Œ์ด๋ธ”์ด ๊ธฐ๋ณธ ํ‚ค๋ฅผ ์ง€์ •
    • ์ด ๊ธฐ๋ณธ ํ‚ค๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ Entity๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ณ  ๊ด€๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ์‹๋ณ„์ž ์—ญํ•  ์ˆ˜ํ–‰
      • ๋”ฐ๋ผ์„œ ๊ธฐ๋ณธ ํ‚ค ์ฆ‰, ์‹๋ณ„์ž ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์ง€ ์•Š๊ณ  ์ €์žฅํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒ
    • @Id ์˜ต์…˜๋งŒ ์„ค์ •ํ•˜๋ฉด ๊ธฐ๋ณธ ํ‚ค ๊ฐ’์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ™•์ธํ•˜๊ณ  ๋„ฃ์–ด์ค˜์•ผํ•˜๋Š” ๋ถˆํŽธํ•จ ๋ฐœ์ƒ
  • @GeneratedValue์˜ต์…˜์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ์„ DB์— ์œ„์ž„
    • ์—ฌ๋Ÿฌ ์ „๋žต ์กด์žฌ
    • ๊ทธ ์ค‘ GenerationType.IDENTITY
      • id bigint not null auto_increment : auto_increment ์กฐ๊ฑด์ด ์ถ”๊ฐ€๋จ
      • ํ•ด๋‹น ์˜ต์…˜์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ์ž๋™์œผ๋กœ ์ˆœ์„œ์— ๋งž๊ฒŒ ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ์ถ”๊ฐ€๋จ

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ

์˜์†์„ฑ ์ปจํ…์ŠคํŠธ๋ž€?

  • Persistence == ์˜์†์„ฑ(์ง€์†์„ฑ)

    ๊ฐ์ฒด์˜ ๊ด€์ ์—์„œ Persistence๋Š” ๊ฐ์ฒด๊ฐ€ ์ƒ๋ช…(์œ ์ง€๋˜๋Š” ์‹œ๊ฐ„)์ด๋‚˜ ๊ณต๊ฐ„(์œ„์น˜)์„ ์ž์œ ๋กญ๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ์ฒด์˜ ์„ฑ์งˆ์„ ์˜๋ฏธ

  • ๐Ÿ™ Entity ๊ฐ์ฒด๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ณต๊ฐ„

  • ๊ฐœ๋ฐœ์ž๋“ค์ด ์ง์ ‘ SQL์„ ์ž‘์„ฑํ•˜์ง€ ์•Š์•„๋„ JPA๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ DB์— ์ €์žฅ, ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๊ฐ€๋Šฅ
  • ์ด๋Ÿฌํ•œ ์ผ๋ จ์˜ ๊ณผ์ •์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด JPA๋Š” ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— Entity ๊ฐ์ฒด๋“ค์„ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌํ•˜๋ฉด์„œ DB์™€ ์†Œํ†ต

EntityManager

  • ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•˜์—ฌ Entity ๊ฐ์ฒด๋“ค์„ ์กฐ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” EntityManager๊ฐ€ ํ•„์š”
  • ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ Entity๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ด€๋ฆฌ์ž
  • ๊ฐœ๋ฐœ์ž๋“ค์€ EntityManager๋ฅผ ์‚ฌ์šฉํ•ด์„œ Entity๋ฅผ ์ €์žฅํ•˜๊ณ  ์กฐํšŒ, ์ˆ˜์ •, ์‚ญ์ œ ๊ฐ€๋Šฅ
  • EntityManager๋Š” EntityManagerFactory๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

EntityManagerFactory

  • EntityManagerFactory๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ DB ํ•˜๋‚˜์— ํ•˜๋‚˜๋งŒ ์ƒ์„ฑ๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•˜๋Š” ๋™์•ˆ ์‚ฌ์šฉ๋จ
  • EntityManagerFactory๋ฅผ ๋งŒใ„ท๋ฅด๊ธฐ ์œ„ํ•ด์„œ๋Š” DB์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•ด์•ผํ•จ
    • /resources/META-INF/persistence.xml์— ์ •๋ณด ์ž‘์„ฑ
  • EntityManagerFactory emf = Persistence.createEntityManagerFactory("memo");
  • ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด JPA๋Š” persistence.xml์˜ ์ •๋ณด๋ฅผ ํ† ๋Œ€๋กœ EntityManagerFactory๋ฅผ ์ƒ์„ฑํ•จ
  • EntityManager em = emf.createEntityManager(); -> EntityManager๋ฅผ ์ƒ์„ฑ
728x90
๋ฐ˜์‘ํ˜•