Home > Spring > πŸƒ[Spring] Hibernateλž€ λ¬΄μ—‡μΌκΉŒμš”?

πŸƒ[Spring] Hibernateλž€ λ¬΄μ—‡μΌκΉŒμš”?
Spring Framework

πŸƒ[Spring] Hibernateλž€ λ¬΄μ—‡μΌκΉŒμš”?

  • HibernateλŠ” μžλ°”μ—μ„œ μ‚¬μš©λ˜λŠ” ORM(Object-Relational Mapping) ν”„λ ˆμž„μ›Œν¬λ‘œ, κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(Relational Database, RDB)와 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°(Object-Oriented Programming, OOP) κ°„μ˜ 뢈일치λ₯Ό ν•΄κ²°ν•΄ μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€.
  • 객체 μ§€ν–₯적인 μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ 데이터λ₯Ό κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€(Relational Database, RDB)의 ν…Œμ΄λΈ”μ— μžλ™μœΌλ‘œ λ§€ν•‘ν•΄μ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€.

1️⃣ μ£Όμš” νŠΉμ§•.

1️⃣ ORM(Object-Relational Mapping)

  • λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”κ³Ό μžλ°” 클래슀 κ°„μ˜ 맀핑을 톡해, SQL(Structured Query Language) 문을 직접 μž‘μ„±ν•˜μ§€ μ•Šκ³ λ„ μžλ°” 객체둜 λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 예λ₯Ό λ“€μ–΄, λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ” ν–‰(Row)을 μžλ°” 객체둜 λ³€ν™˜ν•˜κ³ , μžλ°” 객체λ₯Ό ν…Œμ΄λΈ”μ˜ ν–‰(Row)으둜 λ³€ν™˜ν•˜λŠ” 과정이 μžλ™μœΌλ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€.

2️⃣ HQL(Hibernate Query Language)

  • SQL(Structed Query Language)κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ, λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ΄ μ•„λ‹Œ μžλ°” 객체λ₯Ό λŒ€μƒμœΌλ‘œ 질의λ₯Ό ν•  수 μžˆλ„λ‘ μ„€κ³„λœ 쿼리 μ–Έμ–΄μž…λ‹ˆλ‹€.
  • λ°μ΄ν„°λ² μ΄μŠ€μ— μ’…μ†λ˜μ§€ γ…‡λ‚³μ•„ λ‹€λ₯Έ DBMS(Database Management System, λ°μ΄ν„°λ² μ΄μŠ€ 관리 μ‹œμŠ€ν…œ)둜의 μ „ν™˜μ΄ μš©μ΄ν•©λ‹ˆλ‹€.

3️⃣ 캐싱(Caching)

  • HibernateλŠ” 1μ°¨, 2μ°¨ 캐싱을 μ œκ³΅ν•˜μ—¬ μ„±λŠ₯을 μ΅œμ ν™”ν•©λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 λ™μΌν•œ 데이터λ₯Ό μ—¬λŸ¬ 번 μš”μ²­ ν•  λ•Œ λ°μ΄ν„°λ² μ΄μŠ€μ— λΆˆν•„μš”ν•œ 접근을 쀄일 수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ νŠΈλžœμž­μ…˜ 관리.

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ νŠΈλžœμž­μ…˜μ„ 효과적으둜 관리해주며, μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ μ²˜λ¦¬ν•  수 있게 λ„μ™€μ€λ‹ˆλ‹€.

5️⃣ μžλ™ μŠ€ν‚€λ§ˆ 생성.

  • HibernateλŠ” μžλ°” 클래슀λ₯Ό 기반으둜 λ°μ΄ν„°λ² μ΄μŠ€ μŠ€ν‚€λ§ˆλ₯Ό μžλ™μœΌλ‘œ μƒμ„±ν•˜κ³  관리할 수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μž₯점.

πŸ‘‰ DB 독립성.

  • HibernateλŠ” νŠΉμ • λ°μ΄ν„°λ² μ΄μŠ€μ— μ’…μ†λ˜μ§€ μ•ŠμœΌλ©°, μ—¬λŸ¬ λ°μ΄ν„°λ² μ΄μŠ€μ— μ‰½κ²Œ μ μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘‰ 생산성 ν–₯상.

  • SQL을 직접 μž‘μ„±ν•  ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ 개발자의 생산성을 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

πŸ‘‰ μœ μ§€λ³΄μˆ˜ 용이.

  • 객체지ν–₯적인 μ½”λ“œλ₯Ό μœ μ§€ν•˜λ©° λ°μ΄ν„°λ² μ΄μŠ€ μž‘μ—…μ„ μ²˜λ¦¬ν•  수 μžˆμ–΄, μ½”λ“œμ˜ 가독성과 μœ μ§€ λ³΄μˆ˜μ„±μ΄ λ†’μŠ΅λ‹ˆλ‹€.

3️⃣ κ°„λ‹¨ν•œ 예.

@Entity
@Table(name = "User")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String email;
    
    // Getters and Setters
}
  • μœ„μ˜ μ˜ˆμ‹œμ—μ„œ User ν΄λž˜μŠ€λŠ” λ°μ΄ν„°λ² μ΄μŠ€ ν…Œμ΄λΈ”μ— λ§€ν•‘λ©λ‹ˆλ‹€.
    • @Entity와 @Table μ• λ…Έν…Œμ΄μ…˜μ„ 톡해 ν΄λž˜μŠ€κ°€ ν…Œμ΄λΈ”κ³Ό λ§€ν•‘λ˜κ³ , @Id μ• λ…Έν…Œμ΄μ…˜μ€ κΈ°λ³Έ ν‚€(Primary Key)λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.
  • HibernateλŠ” μžλ°” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ λ°μ΄ν„°λ² μ΄μŠ€μ™€ μƒν˜Έμž‘μš©ν•  λ•Œ 객체 μ§€ν–₯적으둜 데이터λ₯Ό μ²˜λ¦¬ν•  수 μžˆλ„λ‘ 도와주며, λ°μ΄ν„°λ² μ΄μŠ€μ˜ λ³΅μž‘ν•œ μž‘μ—…μ„ μ‰½κ²Œ 관리할 수 있게 ν•΄μ€λ‹ˆλ‹€.