JPA, JPA, JPA ๋ง์ ์ฌ๋๋ค์ด ๋งํ์ง๋ง, JPA ์ Spring data JPA๋ฅผ ํผ์ฉํด์, ์ฐฉ๊ฐํด์ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋ง์ ๊ฒ ๊ฐ๋ค.
๋ฌผ๋ก ๋๋ํ ๋ง์ฐฌ๊ฐ์ง์ด๋ค. JPA๋ EntityManager ๋ฅผ ์ด์ฉํ์ฌ, EntityManager ์ ๋ฉ์๋๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ CRUD ํ๋ ๊ฑธ๋ก ์๊ณ ์์ง๋ง, ์ค์ ํ๋ก์ ํธ๋ฅผ ํด๋ณด๋ฉด EntityManager ๋ฅผ ์ฌ์ฉํ๋๊ฒ ์๋๋ผ Repository ์ธํฐํ์ด์ค๋ฅผ ์์ ๋ฐ์ ์ฌ์ฉํ๊ณ ์๋ค. ๋ฌด์จ ์ฐจ์ด ์ผ๊น?
์ด์ฐธ์ JPA์ Spring data JPA ๊ฐ๋ ์ ๋ค์ก์ ๋ณด๋ ค๊ณ ํ๋ค.
JPA (Java Persistence API)
JPA๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ํ์ค API๋ค. JPA๋ ์๋ฐ ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ๋งคํํ๊ณ , CRUD(Create, Read, Update, Delete) ์์ ์ ์ฝ๊ฒ ์ํํ ์ ์๋๋ก ๋์์ค๋ค.
์ฃผ์ ํน์ง
- ํ์ค ์คํ: JPA๋ ์๋ฐ EE์ ์ผ๋ถ๋ก, ORM(Object-Relational Mapping) ํ์ค์ ์ ์ํ๋ค.
- POJO ๋ชจ๋ธ: ์ํฐํฐ ํด๋์ค๋ ์ผ๋ฐ ์๋ฐ ๊ฐ์ฒด(POJO)๋ก ์์ฑ๋๋ฉฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ค.
- ์ฟผ๋ฆฌ ์ธ์ด: JPA๋ JPQL(Java Persistence Query Language)์ด๋ผ๋ ๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ์ ๊ณตํ๋ค.
- ํธ๋์ญ์ ๊ด๋ฆฌ: JPA๋ ํธ๋์ญ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ๋ค.
JPA ์ฃผ์ ๊ตฌ์ฑ ์์
- EntityManager: ์ํฐํฐ์ ๋ผ์ดํ์ฌ์ดํด์ ๊ด๋ฆฌํ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ํํ๋ค.
- Entity: ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ๊ณผ ๋งคํ๋๋ ์๋ฐ ํด๋์ค๋ค.
- JPQL: ๊ฐ์ฒด ์งํฅ ์ฟผ๋ฆฌ ์ธ์ด๋ก, SQL๊ณผ ์ ์ฌํ์ง๋ง ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ๋์์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
์์
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getters and setters
}
public class UserDAO {
// ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ ์์ฑ ์๋ต
EntityManager em = entityManagerFactory.createEntityManager();
TypedQuery<User> query = em.createQuery("SELECT u FROM User u", User.class);
List<User> users = query.getResultList();
for (User user : users) {
System.out.println("User Name: " + user.getName());
}
em.close();
//์บ์น๋ฌธ ๋ฐ ํ์ด๋๋ฌธ ์๋ต
}
Spring Data JPA
Spring Data JPA๋ Spring ํ๋ ์์ํฌ์ ๋ชจ๋๋ก, JPA๋ฅผ ๋์ฑ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋์์ค๋ค. Spring Data JPA๋ JPA์ Hibernate์ ๊ธฐ๋ฅ์ ์ถ์ํํ์ฌ ๋ฐ๋ณต์ ์ธ ๋ฐ์ดํฐ ์ ๊ทผ ์ฝ๋๋ฅผ ์ค์ด๊ณ , ๊ฐ๋ฐ ์์ฐ์ฑ์ ํฅ์์ํจ๋ค. ์ํฐํฐ ๋งค๋์ ํฉํ ๋ฆฌ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ํฐํฐ ๋งค๋์ ๋ฅผ ์์ฑํ๊ณ close ํ๋ ๋ฐ๋ณต๋๋ ์ฝ๋๋ค์ ์์ฑํ์ง ์๊ฒ ํด์ฃผ๋ฉฐ, ์ค์ Repository ์ธํฐํ์ด์ค๋ง์ ํ์ฅํ์ฌ ๋ณธ์ธ์ ๋ ํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ค๋ฉด, ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ์ฒด(๊ธฐ๋ณธ ๊ฐ์ผ๋ก ํ์ด๋ฒ๋ค์ดํธ)๋ฅผ ์์ฑํด ์ค๋ค.
์ฃผ์ ํน์ง
- Repository ์ถ์ํ: ๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ํตํด ๋ฐ์ดํฐ ์ ๊ทผ ๊ณ์ธต์ ์ถ์ํํ๋ค.
- ์๋ ๊ตฌํ: ๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ๋ฉด, Spring Data JPA๊ฐ ์ด๋ฅผ ์๋์ผ๋ก ๊ตฌํํ๋ค.
- ๋ฉ์๋ ์ฟผ๋ฆฌ: ๋ฉ์๋ ์ด๋ฆ์ ๊ธฐ๋ฐ์ผ๋ก ์๋์ผ๋ก ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ค.
- ํ์ด์ง ๋ฐ ์ ๋ ฌ: ํ์ด์ง๊ณผ ์ ๋ ฌ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์์
import org.springframework.data.jpa.repository.JpaRepository;
public interface UserRepository extends JpaRepository<User, Long> {
User findByName(String name);
}
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
public User findUser(Long id) {
return userRepository.findById(id).orElse(null);
}
public User findUserByName(String name) {
return userRepository.findByName(name);
}
}
+ Hibernate (ํ์ด๋ฒ๋ค์ดํธ)
Hibernate๋ JPA์ ๊ตฌํ์ฒด ์ค ํ๋๋ก, JPA ํ์ค์ ๋ฐ๋ฅด๋ฉด์ ์ถ๊ฐ์ ์ธ ๊ธฐ๋ฅ๊ณผ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ ๊ณตํ๋ค. Hibernate๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ JPA ๊ตฌํ์ฒด๋ค. (์ด์ธ ๊ตฌํ์ฒด๋ก EclipseLink , DataNucleus ๋ฑ์ด ์๋ค.)
JPA์ Hibernate์ ์์ ๋ฐ ๊ตฌํ ๊ด๊ณ๋ฅผ ๋ํ๋ธ ๊ฒ์ด๋ค.
JPA์ ํต์ฌ์ธ EntityManagerFactory , EntityManager , EntityTransaction์Hibernate์์๋ ๊ฐ๊ฐSessionFactory , Session , Transaction ์ผ๋ก ์์๋ฐ๊ณ ๊ฐ๊ฐ Impl๋ก ๊ตฌํํ๊ณ ์์์ ํ์ธํ ์ ์๋ค.
์ฃผ์ ํน์ง
- JPA ๊ตฌํ: Hibernate๋ JPA ํ์ค์ ๊ตฌํํ๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ํ๋ค.
- ์ถ๊ฐ ๊ธฐ๋ฅ: JPA ํ์ค์ ํฌํจ๋์ง ์๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์๋ฅผ ๋ค์ด, 2์ฐจ ์บ์, ๋ค์ดํฐ๋ธ SQL ์ง์, ๋ณต์กํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋งคํ ๋ฑ์ ์ง์ํ๋ค.
- ํ์ฅ์ฑ: JPA ํ์ค์ ๋ง์ง ์๋ ๊ฒฝ์ฐ, Hibernate ๊ณ ์ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
์ฐจ์ด์ ์์ฝ
๊ฐ๋ | JPA | Hibernate | Spring Data JPA |
์ ์ | ์๋ฐ ํ์ค ORM API | JPA์ ๊ตฌํ์ฒด ์ค ํ๋ | Spring ํ๋ ์์ํฌ์ ๋ฐ์ดํฐ ์ ๊ทผ ๋ชจ๋ |
์ฃผ์ ํน์ง | ์ํฐํฐ ๋งคํ, JPQL, ํธ๋์ญ์ ๊ด๋ฆฌ | JPA ํ์ค ๊ตฌํ, ์ถ๊ฐ ๊ธฐ๋ฅ ์ ๊ณต | ๋ฆฌํฌ์งํ ๋ฆฌ ์ถ์ํ, ์๋ ๊ตฌํ, ๋ฉ์๋ ์ฟผ๋ฆฌ |
์ฌ์ฉ ๋ฐฉ์ | ํ์ค API ์ฌ์ฉ | JPA ํ์ค API + Hibernate ๊ธฐ๋ฅ ์ฌ์ฉ | ๋ฆฌํฌ์งํ ๋ฆฌ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ฌ์ฉ |
์ถ๊ฐ ๊ธฐ๋ฅ | ์์ | 2์ฐจ ์บ์, ๋ค์ดํฐ๋ธ SQL, ๋ณต์กํ ๋งคํ ์ง์ | ํ์ด์ง, ์ ๋ ฌ, ๋ฉ์๋ ์ฟผ๋ฆฌ, ์ปค์คํ ์ฟผ๋ฆฌ ์ง์ |
๊ตฌํ ํ์์ฑ | ์ง์ ๊ตฌํ ํ์ | ์ง์ ๊ตฌํ ํ์ | ์ธํฐํ์ด์ค ์ ์๋ง์ผ๋ก ์๋ ๊ตฌํ |
์ฐธ๊ณ
์ธํ๋ฐ - ์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ / ๊น์ํ
๋๊ธ