Search
โœ”๏ธ

[JPA] ORM - JPA - Hibetnate ์ •๋ฆฌ (+ Spring Data JPA)

ORM (Object-Relational Mapping)

ORM์€ ๊ฐ์ฒด ๊ด€๊ณ„ ๋งคํ•‘์„ ์˜๋ฏธํ•˜๋Š”๋ฐ Java์™€ ๊ฐ™์€ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด์—์„œ ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์˜ ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
ORM์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๋ฆฌ๋˜๋Š” ๊ฐ์ฒด(ํด๋ž˜์Šค)๋“ค์€ ํ…Œ์ด๋ธ”๊ณผ ๋งคํ•‘๋˜๊ฒŒ ์„ค๊ณ„๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ”๊ณผ ๋ถˆ์ผ์น˜๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค.
ORM์€ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ ๋ถˆ์ผ์น˜๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ์ง์ ‘ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ๋ฉ”์†Œ๋“œ๋ฅผ ์‹คํ–‰ํ•จ์œผ๋กœ์จ CRUD๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

JPA (Java Persistence API)

JPA๋Š” ORM์„ Java์—์„œ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„๋œ ์ธํ„ฐํŽ˜์ด์Šค๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
์‹ค์ œ๋กœ JPA๋ฅผ ์ •์˜ํ•œ javax.persistence๋Š” ๋Œ€๋ถ€๋ถ„ interface, enum, exception, annotation ๋“ค๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
์œ„์™€ ๊ฐ™์€ ์ด์œ  ๋•Œ๋ฌธ์— ๋ฐ”๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋˜๋Š”๋ฐ, ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๊ตฌํ˜„์ฒด๊ฐ€ Hibernate์ด๋‹ค.
JPA์˜ ์ฃผ์š”ํ•œ ํŠน์ง•
1.
ORM์˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค
2.
ORM์„ ์œ„ํ•œ ๋ช…์„ธ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๊ตฌํ˜„์ฒด์— ์ข…์†๋˜์ง€ ์•Š๋Š”๋‹ค.
3.
๊ธฐ๋ณธ์ ์ธ CRUD ์ž‘์—…์„ ๊ฐ„๋‹จํžˆ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ํŠธ๋žœ์žญ์…˜ ๋ฐ ์ง€์—ฐ ๋กœ๋”ฉ ๋“ฑ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Hibernate

ํ•˜์ด๋ฒ„๋„ค์ดํŠธ๋Š” JPA๋ฅผ ๊ตฌํ˜„ํ•œ ORM ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๊ฐ„๋‹จํ•œ ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์˜ˆ์ œ์ด๋‹ค.

์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค

@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters }
Java
๋ณต์‚ฌ

ํ•˜์ด๋ฒ„๋„ค์ดํŠธ ์ฝ”๋“œ

public class HibernateExample { public static void main(String[] args) { SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory(); Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); // Create User user = new User(); user.setName("John"); user.setEmail("john@example.com"); session.save(user); // Read User retrievedUser = session.get(User.class, user.getId()); System.out.println("Retrieved User: " + retrievedUser.getName()); transaction.commit(); session.close(); sessionFactory.close(); } }
Java
๋ณต์‚ฌ

Spring Data JPA

Spring Data JPA๋Š” Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ชจ๋“ˆ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
JPA(์˜ˆ: Hibernate)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฉฐ, ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด ํŽธ๋ฆฌํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.
Spring Data JPA๋Š” JPA๋ฅผ ๊ตฌํ˜„ํ•œ ๊ตฌํ˜„์ฒด๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— Hibernate์™€ ๊ฐ™์€ ๊ตฌํ˜„์ฒด๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค. (Spring Data JPA๋Š” ์ž์ฒด์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํ†ต์‹ ํ•˜์ง€ ์•Š๋Š”๋‹ค.)