Spring Data JPA 🌱

YaR LabΒ·2024λ…„ 1μ›” 26일

SpringBoot 🌱

λͺ©λ‘ 보기
7/11
post-thumbnail

1️⃣ μ„€λͺ…

  • JPA λŠ” μžλ°” ν‘œμ€€ ORM(Object Relational Mapping) μž„

    ORM

    • 객체λ₯Ό DB와 λ§€ν•‘ ν•΄ 쀌
  • JPA λŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œμ„œ μžλ°” ν‘œμ€€λͺ…μ„Έμ„œ
  • JPA λ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ” κ΅¬ν˜„μ²΄κ°€ ν•„μš”
  • λŒ€ν‘œμ μœΌλ‘œ Hibernate, Eclipse Link 등이 있음
  • Spring μ—μ„œ JPA λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” 이 κ΅¬ν˜„μ²΄λ₯Ό 직접 닀루지 μ•ŠμŒ

2️⃣ μ‚¬μš© 이유

  • JPA <- Hibernate <- Spring Data JPA
  • κ΅¬ν˜„μ²΄ ꡐ체 μš©μ˜μ„± (Hibernate 외에 λ‹€λ₯Έ κ΅¬ν˜„μ²΄λ‘œ μ‰½κ²Œ ꡐ체 ν•  수 있음)
  • μ €μž₯μ†Œ ꡐ체 μš©μ˜μ„± (κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€ 외에 λ‹€λ₯Έ μ €μž₯μ†Œλ‘œ μ‰½κ²Œ ꡐ체 ν•  수 있음)

3️⃣ spring-boot-starter-data

  • μŠ€ν”„λ§ λΆ€νŠΈμš© Spring Data Jpa 좔상화 라이브러리
  • μŠ€ν”„λ§ λΆ€νŠΈ 버전에 맞좰 μžλ™μœΌλ‘œ JPA κ΄€λ ¨ λΌμ΄λΈŒλŸ¬λ¦¬λ“€μ˜ 버전을 κ΄€λ¦¬ν•΄μ€Œ

4️⃣ h2

  • 인메λͺ¨λ¦¬ κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€
  • λ³„λ„μ˜ μ„€μΉ˜ 없이 ν”„λ‘œμ νŠΈ μ˜μ‘΄μ„±λ§ŒμœΌλ‘œ 관리 κ°€λŠ₯
  • λ©”λͺ¨λ¦¬μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μž¬μ‹œμž‘ν• λ•Œλ§ˆλ‹€ μ΄ˆκΈ°ν™” 됨
  • ν…ŒμŠ€νŠΈ μš©λ„λ‘œ 많이 μ‚¬μš©

5️⃣ @Entity

  • ν…Œμ΄λΈ”κ³Ό 링크될 ν΄λž˜μŠ€μž„μ„ λ‚˜νƒ€λƒ„
  • κΈ°λ³Έκ°’μœΌλ‘œ 클래슀의 μΉ΄λ©œμΌ€μ΄μŠ€ 이름을 μ–Έλ”μŠ€μ½”μ–΄ 넀이밍(_)으둜 ν…Œμ΄λΈ” 이름을 맀칭함 (ex. SalesManager.java -> sales_manager table)
  • μ ˆλŒ€ Setter λ₯Ό λ§Œλ“€μ§€ μ•ŠμŒ
  • μƒμ„±μžλ₯Ό 톡해 값을 μ±„μš°λŠ” 것이 기본적인 ꡬ쑰
  • κ°’ 변경이 ν•„μš”ν•œ μ΄λ²€νŠΈκ°€ μžˆμ„ 경우 그에 λ§žλŠ” λ©”μ„œλ“œλ₯Ό λ”°λ‘œ κ΅¬ν˜„ν•˜λŠ” 것을 μ „μ œλ‘œ 함

6️⃣ @Id

  • ν•΄λ‹Ή ν…Œμ΄λΈ”μ˜ PK(primary key) ν•„λ“œλ₯Ό λ‚˜νƒ€λƒ„

7️⃣ @GeneratedValue

  • PK 생성 κ·œμΉ™μ„ λ‚˜νƒ€λƒ„
  • auto_increment 같은 μ˜΅μ…˜μ„ 쀄 수 있음
  • λ°‘μ˜ μ˜ˆμ œμ™€ 같이 μŠ€ν”„λ§ 2.0 μ—μ„œλŠ” GenerationType.IDENTITY μ˜΅μ…˜μ„ μΆ”κ°€ν•΄μ•Όλ§Œ auto_increment κ°€ 됨
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

8️⃣ @Column

  • ν…Œμ΄λΈ”μ˜ μ»¬λŸΌμ„ λ‚˜νƒ€λ‚΄λ©° ꡳ이 μ„ μ–Έν•˜μ§€ μ•Šμ•„λ„ ν•΄λ‹Ή 클래슀의 ν•„λ“œλŠ” λͺ¨λ‘ 컬럼이 됨
  • κΈ°λ³Έκ°’ 외에 μΆ”κ°€λ‘œ 변경이 ν•„μš”ν•œ μ˜΅μ…˜μ΄ 있으면 μ‚¬μš©

9️⃣ Entity Repository

  • JPA μ—μ„œλŠ” DAO λŒ€μ‹  Repository μΈν„°νŽ˜μ΄μŠ€λ₯Ό μƒμ„±ν•˜λ©΄, μžλ™μœΌλ‘œ @Entity ν΄λž˜μŠ€μ™€ DBλ₯Ό μ—°κ²°ν•˜λŠ” κ΅¬ν˜„μ²΄λ₯Ό λ§Œλ“€μ–΄μ„œ μ—°κ²°ν•΄μ€Œ

1️⃣0️⃣ @MappedSuperclass

  • @MappedSuperclass μ–΄λ…Έν…Œμ΄μ…˜μ΄ 뢙은 좔상 클래슀λ₯Ό 상속 ν•  경우 μΆ”μƒν΄λž˜μŠ€μ˜ ν•„λ“œλ„ 컬럼으둜 인식함

1️⃣1️⃣ @EntityListeners(AuditingEntityListener.class)

  • Auditing κ°μ‹œ κΈ°λŠ₯을 ν¬ν•¨μ‹œν‚΄

1️⃣2️⃣ @CreatedDate

  • Entity κ°€ μƒμ„±λ˜μ–΄ μ €μž₯될 λ•Œ μ‹œκ°„μ΄ μžλ™ μ €μž₯ 됨

1️⃣3️⃣ @LastModifiedDate

  • μ‘°νšŒν•œ Entity의 값을 λ³€κ²½ν•  λ•Œ μ‹œκ°„μ΄ μžλ™ μ €μž₯ 됨

μΆœμ²˜πŸ“š

πŸ“— μŠ€ν”„λ§ λΆ€νŠΈμ™€ AWS둜 혼자 κ΅¬ν˜„ν•˜λŠ” μ›Ή μ„œλΉ„μŠ€

0개의 λŒ“κΈ€