2024. 5. 30. 03:03ㆍBack-End
Java Persistence API (JPA)는 자바 플랫폼에서 객체 관계 매핑(ORM) 기술을 위한 표준이다.
ORM(Object-Relational Mapping)은 객체 지향 프로그래밍 언어의 객체를 관계형 데이터베이스의 테이블과 매핑하는 기술이다.
이 글에서는 JPA의 핵심 요소인 EntityManagerFactory, EntityManager, persist 등에 대해 상세히 알아보고, JPA 구현체 중 하나인 Hibernate에 대해서도 설명할 것이다.
ORM과 Hibernate
ORM (Object-Relational Mapping)
ORM은 객체 지향 프로그래밍 언어의 객체와 관계형 데이터베이스의 테이블 사이의 변환을 자동화하는 기술이다. ORM을 사용하면 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호작용할 수 있다. ORM의 주요 장점은 다음과 같다:
- 생산성 향상: 데이터베이스와의 상호작용을 추상화하여 개발 생산성을 높일 수 있다.
- 유지보수 용이: 코드가 간결해지고, 데이터베이스 스키마 변화에 유연하게 대응할 수 있다.
- 객체 지향적 프로그래밍: 객체 지향 패러다임에 맞는 코드를 작성할 수 있다.
Hibernate
Hibernate는 JPA의 가장 널리 사용되는 구현체 중 하나로, 강력하고 유연한 ORM 프레임워크이다. Hibernate는 JPA 표준을 구현하며, 추가적인 기능을 제공한다. Hibernate를 사용하면 JPA의 장점을 활용하면서도 다양한 확장 기능을 사용할 수 있다.
JPA의 주요 요소
EntityManagerFactory와 EntityManager
JPA에서 데이터베이스와의 상호작용을 관리하는 주요 인터페이스는 EntityManagerFactory와 EntityManager이다.
- EntityManagerFactory: JPA 애플리케이션에서 데이터베이스와의 연결을 관리하는 팩토리 클래스이다. EntityManagerFactory는 애플리케이션 전체에서 하나만 생성되며, 여러 EntityManager 인스턴스를 생성하는 데 사용된다.
- EntityManager: 실제 데이터베이스 작업을 수행하는 인터페이스이다. 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 관리하며, 엔티티의 생명주기를 관리한다.
EntityManager와 EntityManagerFactory 예제
다음은 EntityManagerFactory와 EntityManager를 사용하는 예제이다.
JPADemo.java
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
public class JPADemo {
public static void main(String[] args) {
// EntityManagerFactory 생성
EntityManagerFactory emf = Persistence.createEntityManagerFactory("my-persistence-unit");
// EntityManager 생성
EntityManager em = emf.createEntityManager();
// 트랜잭션 시작
em.getTransaction().begin();
// 새로운 엔티티 생성 및 저장
Person person = new Person();
person.setName("John Doe");
em.persist(person);
// 트랜잭션 커밋
em.getTransaction().commit();
// EntityManager 종료
em.close();
// EntityManagerFactory 종료
emf.close();
}
}
Person.java
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// Getters and setters
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;
}
}
설명
- Persistence.createEntityManagerFactory("my-persistence-unit"): persistence.xml 파일에서 정의한 my-persistence-unit 이름의 영속성 유닛을 기반으로 EntityManagerFactory를 생성하는 코드이다.
- emf.createEntityManager(): EntityManagerFactory를 사용하여 EntityManager를 생성하는 코드이다.
- em.getTransaction().begin(): 트랜잭션을 시작하는 코드이다.
- em.persist(person): 새로운 엔티티를 데이터베이스에 저장하는 코드이다.
- em.getTransaction().commit(): 트랜잭션을 커밋하여 변경사항을 데이터베이스에 반영하는 코드이다.
- em.close(): EntityManager를 닫는 코드이다.
- emf.close(): EntityManagerFactory를 닫는 코드이다.
JPA의 주요 메서드
persist
persist 메서드는 새로운 엔티티를 영속성 컨텍스트에 저장한다. 엔티티가 영속성 컨텍스트에 저장되면, 트랜잭션이 커밋될 때 데이터베이스에 반영된다.
find
find 메서드는 데이터베이스에서 엔티티를 조회한다.
Person foundPerson = em.find(Person.class, personId);
remove
remove 메서드는 영속성 컨텍스트에서 엔티티를 삭제한다.
em.remove(person);
merge
merge 메서드는 분리된(Detached) 엔티티를 영속성 컨텍스트에 병합한다.
Person mergedPerson = em.merge(detachedPerson);
결론
JPA와 Hibernate는 자바 애플리케이션에서 데이터베이스와의 상호작용을 단순화하고, 생산성을 향상시키는 강력한 도구이다. EntityManagerFactory와 EntityManager는 JPA의 핵심 요소로, 데이터베이스 연결을 관리하고 CRUD 작업을 수행한다.
persist, find, remove, merge와 같은 주요 메서드를 사용하여 엔티티의 생명주기를 관리할 수 있다.
Hibernate는 JPA의 표준 구현체로, 추가적인 기능과 유연성을 제공하여 더욱 강력한 데이터베이스 관리를 가능하게 한다.
'Back-End' 카테고리의 다른 글
kafka (0) | 2024.08.04 |
---|---|
[AWS] EC2와 RDS 설정 및 프로젝트 배포 (0) | 2024.06.12 |
관계 매핑 전략(@OneToMany, @ManyToOne, @OneToOne, @ManyToMany), 상속 매핑 전략 (SINGLE_TABLE, JOINED, TABLE_PER_CLASS) (0) | 2024.05.30 |
로깅(SLF4J) (0) | 2024.05.30 |