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๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ƒํ˜ธ์ž‘์šฉํ•  ๋•Œ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ณต์žกํ•œ ์ž‘์—…์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.