
์๋ก
๊ฐ๋ฐ์ ํ๋ ค๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋น ์ง๋์ผ ๋น ์ง ์ ์๋ ์์ ์ค ํ๋์ด๋ค.
ํนํ ๊ฐ์ฒด์งํฅ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ๊ทน์ ์ด๋ป๊ฒ ์ขํ ์ ์์์ง ๊ณ ๋ฏผํ ํ์๊ฐ ์๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅํ ๊ฐ๋ ์ด ๋ฐ๋ก ORM์ด๋ค. ๋ํ Java์์๋ JPA์ ์ด๋ฅผ ๊ตฌํํ ๋ํ์ ํ๋ ์์ํฌ์ธ Hibernate ๊ฐ ๋๋ฆฌ ์ฌ์ฉ๋๊ณ ์๋ค. ๋ฐ๋ผ์ ์ด๋ฒ ํฌ์คํ ์์๋ ORM๊ณผ JPA ๊ทธ๋ฆฌ๊ณ Hibernate์ ๋ํด์ ํฌ์คํ ํด ๋ณด๋ ค๊ณ ํ๋ค.
JPA(Java Persistent API)
- Java ORM ๊ธฐ์ ์ ๋ํ API ํ์ค ๋ช ์ธ๋ฅผ ์๋ฏธ
- ORM์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ์๋ ๊ฒ → ์ฝ๊ฒ ๋งํ๋ฉด ORM์ ๊ตฌํํ๊ธฐ ์ํ Java์ ๊ณต์ ๋ฌธ๋ฒ ๋ฐ ๊ณต์
- JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ JPA๋ฅผ ๊ตฌํํ Hibernate, EclipseLink, DataNucleus ์ ๊ฐ์ ORM ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ผ ํจ

> JPA์ ์ญํ
- ORM์ ํ์คํํ๊ธฐ ์ํ ์๋ฐ API
- ๊ฐ๋ฐ์๋ JPA ๋ฌธ๋ฒ์ผ๋ก๋ง ์ฝ๋ฉํ๊ณ , ์ค์ ๋์์ ๊ตฌํ์ฒด(Hibernate ๋ฑ)๊ฐ ์ฒ๋ฆฌํจ
> ์ฃผ์๊ธฐ๋ฅ
- Entity(์ํฐํฐ) ๋งคํ
- JPQL(Java Persistence Query Language) ์ง์
- ํธ๋์ญ์ ์ฒ๋ฆฌ
ORM(Object Relational Mapping)
- ๊ฐ์ฒด์ DB์ ํ ์ด๋ธ์ด ๋งคํ์ ์ด๋ฃจ๋ ๊ฒ → ์ฝ๊ฒ ๋งํ๋ฉด ๊ฐ์ฒด๊ฐ ํ ์ด๋ธ์ด ๋๋๋ก ๋งคํ์์ผ์ฃผ๋ ๊ฒ
- ORM์ ์ด์ฉํ๋ฉด SQL ์ฟผ๋ฆฌ๊ฐ ์๋ ์ง๊ด์ ์ธ ์ฝ๋(๋ฉ์๋)๋ก์จ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์กฐ์ํ ์ ์์
- ์๋ฅผ ๋ค์ด, USER ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ค๊ณ ๊ฐ์
SELECT * FROM USER_TABLE; //์ฟผ๋ฆฌ๋ฌธ์ ์
๋ ฅํ์ฌ ์คํ
- ORM์ ์ฌ์ฉํ๋ฉด USER ํ ์ด๋ธ๊ณผ ๋งคํ๋ ๊ฐ์ฒด๋ฅผ user๋ผ๊ณ ํ ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ๋ฐ์ดํฐ ์กฐํ๊ฐ ๊ฐ๋ฅํจ
user.findAll(); //๋ฉ์๋๋ง ํธ์ถํ๋ฉด ๋๋ฏ๋ก ๋งค์ฐ ํธ๋ฆฌํจ
→ ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์์ฑํ์ง ์๊ณ ๋ฉ์๋ ํธ์ถ๋ง์ผ๋ก ์ฟผ๋ฆฌ๊ฐ ์ํ๋๋ค ๋ณด๋ ์์ฐ์ฑ์ด ๋์์ง
→ ๋จ, ๋ณต์กํ ์ฟผ๋ฆฌ๋ ORM์ผ๋ก ํํํ๋๋ฐ ํ๊ณ๊ฐ ์๊ณ ์ฑ๋ฅ์ด ๋๋ฆฌ๋ค๋ ๋จ์ ์ด ์์
> ์ ๋ฆฌํ์๋ฉด
- ๊ฐ์ฒด <-> ํ ์ด๋ธ
- ํ๋ <-> ์ปฌ๋ผ
- ๊ฐ์ฒด๋ฅผ SQL ์ฟผ๋ฆฌ๋ฌธ ์์ด DB์ ์ ์ฅํ๊ฑฐ๋ ์กฐํํ ์ ์์ → ๊ฐ๋ฐ์๋ ์ฟผ๋ฆฌ๋ฌธ ์์ฑ๋ณด๋จ ๊ฐ์ฒด๋ฅผ ๋ค๋ฃจ๋ ๋ฐ ์ง์ค
> ์ฅ์
- ์์ฐ์ฑ ์ฆ๊ฐ : ๋ฐ๋ณต์ ์ธ SQL ์ฟผ๋ฆฌ ์์ฑ์ ์ค์ฌ์ค
- ์ ์ง๋ณด์ ์ฉ์ด : ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋ ์ ์ง ๊ฐ๋ฅ
- DB ์ข ์์ฑ ๋ฎ์ : ๋ค์ํ DB์ ๋์ ๊ฐ๋ฅ
Hibernate
- JPA๋ฅผ ๊ตฌํํ ๋ํ์ ORM ํ๋ ์์ํฌ (JPA ์ธํฐํ์ด์ค๋ฅผ ์ค์ ์๋ํ๊ฒ ๋ง๋๋ ์์ง)
- JPA ํ์ค์ ๋ฐ๋ฅด๋ฉด์๋ ์์ฒด์ ์ธ ํธ๋ฆฌํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํจ
- ๋ค์ํ DB ์ง์
- ์บ์, ์ง์ฐ ๋ก๋ฉ(Lazy Loading), ์ฆ์ ๋ก๋ฉ(Eager Loading) ๋ฑ์ ๋ฌธ์ ํด๊ฒฐ
> ์ฅ์
- ์ฟผ๋ฆฌ๋ฅผ ์ง์ ์ฌ์ฉํ์ง ์๊ณ ๋ฉ์๋ ํธ์ถ๋ง์ผ๋ก ์ฟผ๋ฆฌ ์ํ์ด ๊ฐ๋ฅํจ
- ํ ์ด๋ธ ์ปฌ๋ผ์ด ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ JPA๊ฐ ํ๋ผ๋ฏธํฐ, ๊ฒฐ๊ณผ, SQL ๋ฑ์ ๋ชจ๋ ํ์ธํ์ฌ ์์ ํด์ฃผ๋ฏ๋ก ์ ์ง๋ณด์ ์ธก๋ฉด์์ ์ฉ์ดํจ
> ๋จ์
- ๋ฉ์๋ ํธ์ถ๋ก ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฏ๋ก ์ธ๋ฐํจ์ด ๋จ์ด์ง
- ๊ฐ์ฒด๊ฐ์ ๋งคํ์ด ์๋ชป๋๊ฑฐ๋ JPA๋ฅผ ์๋ชป ์ฌ์ฉํ์ฌ ์ํ๋ ๋์์ ์ํํ ์ ์๋ ๊ฒฝ์ฐ๋ ์์
> ์์ ์ฝ๋
//User Entity(์ํฐํฐ) ํด๋์ค
@Entity
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getter & Setter
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
↑ ์ฐ์ User ์ํฐํฐ ํด๋์ค๋ฅผ ์์ฑํจ
public class HibernateExample {
public static void main(String[] args) {
// SessionFactory ์์ฑ
SessionFactory factory = new Configuration()
.configure("hibernate.cfg.xml") // ์ค์ ํ์ผ ๋ก๋
.addAnnotatedClass(User.class) // ์ํฐํฐ ํด๋์ค ๋ฑ๋ก
.buildSessionFactory();
// ์ธ์
์ด๊ธฐ
Session session = factory.getCurrentSession();
try {
// ํธ๋์ญ์
์์
session.beginTransaction();
// ์ฌ์ฉ์ ์ ์ฅ
User newUser = new User("ํ๊ธธ๋", "test@gmail.com");
session.save(newUser);
// ๋ชจ๋ ์ฌ์ฉ์ ์กฐํ
List<User> userList = session.createQuery("from User", User.class).getResultList();
for (User u : userList) {
System.out.println("์กฐํ : " + u.getName() + " , " + u.getEmail());
}
// ํธ๋์ญ์
์ปค๋ฐ
session.getTransaction().commit();
} finally {
factory.close();
}
}
}
↑ SessionFactory๋ฅผ ์์ฑํ๊ณ ์ค์ ํ์ผ ๋ฐ ์ํฐํฐ ํด๋์ค๋ฅผ ๋ฑ๋กํ ๋ค์ ์ธ์
์ ์ด์ด ์กฐํ ์์
์ ๋ฆฌ
| ORM | JPA | Hibernate | |
| ๊ฐ๋ | ๊ฐ์ฒด-DB ์๋ ๋งคํ์์ผ์ฃผ๋ ๊ฒ | Java์์ ORM์ ์ํ ํ์ค ์ธํฐํ์ด์ค | JPA๋ฅผ ๊ตฌํํ ํ๋ ์์ํฌ(๊ตฌํ์ฒด) |
| ์์ | JPA, Hibernate, MyBatis | EntityManager ์ฌ์ฉ | HibernateJpaVendorAdapter ์ฌ์ฉ |
Reference
https://victorydntmd.tistory.com/195
[Spring JPA] ORM๊ณผ JPA ๊ทธ๋ฆฌ๊ณ Hibernate
2020.03.06 ์์ 1. JPA ( Java Persistent API )์ ORM ( Object Relational Mapping )JPAJPA๋ ์๋ฐ ORM ๊ธฐ์ ์ ๋ํ API ํ์ค ๋ช ์ธ๋ฅผ ์๋ฏธํฉ๋๋ค.JPA๋ ORM์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ชจ์๋ ๊ฒ์ด๋ฉฐ, JPA๋ฅผ ์ฌ์ฉํ๊ธฐ
victorydntmd.tistory.com
'๐ Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Spring] 04.MVC ๋? - MVC ๊ตฌ์กฐ ์ดํด (6) | 2025.07.22 |
|---|---|
| [Spring] 03.DI์ IoC ๊ฐ๋ ๋ฐ ์ด์ ๋ฆฌ (1) | 2024.04.15 |
| [Spring] 02.AOP๊ฐ๋ , Aspectํน์ง ์ด์ ๋ฆฌ (1) | 2024.01.04 |
| [Spring] 01.@Autowired,@Resource,@Inject ์ฐจ์ด (6) | 2023.11.20 |