๐ฑ ์ด ๊ธ์ ์ฐ๋ ์ด์
์ทจ์ ์ค๋น๋ฅผ ํ๋ฉฐ ๋ฉด์ ์ ๋ณด๋ค๋ณด๋ฉด JPA ์ ๊ฐ๋ ์ ๋งค๋ฒ ๋์ฌ๋งํผ ๋จ๊ณจ ์ง๋ฌธ์ด๋ผ๊ณ ๋ณผ ์ ์์ต๋๋ค. ํ์ง๋ง, ๋งค๋ฒ Hibernate ๋ JPA ์ ๊ตฌํ์ฒด์ ๋๋ค! ๋ผ๋ ๋๋ต๋ง ํด์๊ณ , ์์งํ ์ฐจ์ด๋ฅผ ์ ๋๋ก ์ดํดํ๊ณ ์์ง ์๋ค๊ณ ๋๊ผ์ต๋๋ค. ๊ทธ๋์ ์ด๋ฒ ๊ธฐํ์ JPA, Hibernate, Spring Data JPA ์ ์ฐจ์ด์ ๋ํด ๊ณต๋ถํ๊ณ ์ ๋ฆฌํด๋ณด๋ ์๊ฐ์ ๊ฐ์ ธ๋ณด๋ ค ํฉ๋๋ค. ๐
๐ค JPA ๋?
JPA ๋ Java Persistence API ์ ์ฝ์๋ก, ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ด์ ๋ฐ์ดํฐ ์์์ฑ์ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ์คํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ๋ ๊ธฐ์ ์ ๋๋ค. JPA ๋ ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋งคํํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ๊ธฐ์ ์ ORM ์ด๋ผ๊ณ ํฉ๋๋ค.
์ฌ๊ธฐ์ JPA ๋ ์ธํฐํ์ด์ค๋ผ๋ ์ ์ ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ด ์ธํฐํ์ด์ค๋ javax.persistence
ํจํค์ง์ ์ ์๋์ด ์์ผ๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ํธ์์ฉ์ ์ํ ๋ฉ์๋๋ค์ ํฌํจํ๊ณ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ JPA ์ ๋ช
์ธ๋ ๊ธฐ๋ฅ๋ค์ ์ค์ ๋ก ๋์ํ๊ฒ ํ๊ธฐ ์ํด์๋ ์ด๋ฅผ ๊ตฌํํ ORM ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ํ์ ์ธ JPA ๊ตฌํ์ฒด๋ก Hibernate, EclipseLink, OpenJPA ๋ฑ์ด ์กด์ฌํฉ๋๋ค.
๐ค ORM ์ด๋?
ORM ์ Object-Relational Mapping ์ ์ฝ์๋ก, ๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์๋ํํ๋ ๊ธฐ์ ์ ๋๋ค. ORM ์ ๊ฐ๋ฐ์๊ฐ ์ง์ SQL ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ณ ์กฐํํ ์ ์๊ฒ ํด์ค๋๋ค. JPA ๋ ์ด๋ฌํ ORM ๊ธฐ์ ์ ํ ์ข ๋ฅ๋ก, ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋งคํ์ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์ธํฐํ์ด์ค์ ๋๋ค.
๐ค Hibernate ๋?
Hibernate ๋ ์์์ ์ธ๊ธํ๋ ๊ฒ์ฒ๋ผ JPA ์ ๊ตฌํ์ฒด ์ค ํ๋์ ๋๋ค.
์ ์ฌ์ง์ Hibernate ๊ณต์๋ฌธ์์์ ์ ๊ณตํ๋ JPA ์ธํฐํ์ด์ค์ Hibernate ๊ตฌํ์ฒด ๊ฐ์ ์์ ๋ฐ ๊ตฌํ ๊ด๊ณ๋ฅผ ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ํ๋ธ ๋ชจ์ต์
๋๋ค. ๋ค์ด์ด๊ทธ๋จ์ ์ดํด๋ณด๋ฉด JPA ์ ์ธํฐํ์ด์ค์ธ EntityManagerFactory
, EntityManager
, EntityTransaction
์ Hibernate ๊ตฌํ์ฒด์์ ์์๋ฐ์ ๊ตฌํํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
Hibernate ๋ JPA ์ ๊ตฌํ์ฒด ์ค ํ๋์ด๊ธฐ ๋๋ฌธ์, JPA ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ฐ๋์ Hibernate ๋ฅผ ์ฌ์ฉํ ํ์๋ ์์ต๋๋ค. ํ๋ก์ ํธ์ ์๊ตฌ์ฌํญ๊ณผ ์ํฉ์ ๋ฐ๋ผ EclipseLink, OpenJPA ์ ๊ฐ์ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ฅผ ์ฌ์ฉํ ์๋ ์๊ณ , ์ฌ์ง์ด๋ ์ง์ JPA ์ ๊ตฌํ์ฒด๋ฅผ ๊ตฌํํด์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ํ์ง๋ง, Hibernate ๊ฐ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์ด์ ๋ ์ค๋ ๊ธฐ๊ฐ ๋์ ๋ง์ ๊ฐ๋ฐ์๋ค์๊ฒ ์ฌ์ฉ๋๋ฉฐ ์ฑ์ํด์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ด๋ผ๋ ๊ฒ์ ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๐ค Spring Data JPA ๋?
Spring Data JPA ๋ Hibernate ์ JPA ๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ ๋ฐ์ดํฐ ์์ธ์ค ๊ธฐ์ ์ ๋ณด๋ค ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ง์ํ๋ Spring Framework ์ ํ๋ก์ ํธ ์ค ํ๋์ ๋๋ค.
Spring Data JPA ์์๋ JPA ๋ฅผ ํ๋จ๊ณ ๋ ์ถ์ํ์ํจ Repository
๋ผ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํด์ ๊ฐ๋ฐ์๊ฐ JPA ๋ฅผ ๋ ์ฝ๊ณ ๊ฐํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ฃผ๊ณ ์์ต๋๋ค. Repository
์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๊ตฌํ์ฒด์ธ SimpleJpaRepository
์ ์ฝ๋๋ฅผ ๋ณด๋ฉด ๋ด๋ถ์ ์ผ๋ก JPA ์ ์ธํฐํ์ด์ค ์ค ํ๋์ธ EntityManager
๋ฅผ ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
package org.springframework.data.jpa.repository.support;
import ...
@Repository
@Transactional(readOnly = true)
public class SimpleJpaRepository<T, ID> implements JpaRepositoryImplementation<T, ID> {
...
private final EntityManager em;
...
@Override
public Optional<T> findById(ID id) {
...
}
// Other methods
}
'โ๏ธ ๋ฐฑ์๋: Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Spring] Slack API ํ์ฉํ์ฌ ์๋ฌ ๋ชจ๋ํฐ๋งํ๊ธฐ (0) | 2023.08.03 |
---|---|
[Spring] JPA ์์์ฑ ์ปจํ ์คํธ ์ดํดํ๊ธฐ (0) | 2023.06.27 |
[Spring] ๋ฉํฐ ๋ชจ๋ ํ๋ก์ ํธ ์ ์ฉ (0) | 2023.06.26 |
[Spring] JPA ๋น๊ด์ ๋ฝ ์ ์ฉ์ผ๋ก ๋์์ฑ ๋ฌธ์ ํด๊ฒฐํ๊ธฐ (0) | 2023.06.15 |
[Spring] MySQL๊ณผ mongoDB ๋ฐ์ดํฐ๋ฒ ์ด์ค 2๊ฐ ์ฐ๋ํ๊ธฐ (0) | 2023.05.10 |
Spring ๋ฌดํ์คํฌ๋กค ๊ตฌํ (2) - ์คํ์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ (0) | 2023.01.01 |
Spring ๋ฌดํ์คํฌ๋กค ๊ตฌํ (1) - ์ปค์ ๊ธฐ๋ฐ ํ์ด์ง๋ค์ด์ (0) | 2023.01.01 |