JPA(Java Persistence API)는 자바 애플리케이션에서 데이터베이스와의 상호작용을 위한 표준 API입니다.
JPA는 객체-관계 매핑(Object-Relational Mapping, ORM)을 기반으로 하여 객체 지향 도메인 모델과 관계형 데이터베이스 간의 불일치를 해결하고, 데이터 액세스 로직을 단순화합니다.
1. JPA 주요 개념
- 엔티티(Entity): 데이터베이스의 테이블과 매핑되는 자바 클래스입니다.
- 엔티티 매니저(EntityManager): 엔티티의 생성, 수정, 삭제 등의 작업을 수행하는 주요 인터페이스입니다.
- 영속성 컨텍스트(Persistence Context): 엔티티 객체를 관리하는 메모리 공간입니다.
- JPQL(Java Persistence Query Language): 데이터베이스에 대한 쿼리를 작성하기 위한 객체 지향 쿼리 언어입니다.
2. JPA 구현체
JPA는 명세일 뿐, 실제 구현은 별도의 라이브러리를 통해 이루어집니다. 대표적인 JPA 구현체로는 다음과 같은 것들이 있습니다.
- Hibernate: 가장 널리 사용되는 JPA 구현체로, 강력한 기능과 성능을 제공합니다.
- EclipseLink: Eclipse Foundation에서 개발한 오픈 소스 JPA 구현체입니다.
- Apache OpenJPA: Apache Software Foundation에서 개발한 오픈 소스 JPA 구현체입니다.
3. JPA 어노테이션
JPA는 어노테이션을 사용하여 엔티티 클래스와 데이터베이스 테이블 간의 매핑을 정의합니다. 주요 어노테이션은 다음과 같습니다.
@Entity
: 클래스가 엔티티임을 나타냅니다.@Table
: 엔티티와 매핑될 데이터베이스 테이블을 지정합니다.@Id
: 엔티티의 기본 키를 나타냅니다.@GeneratedValue
: 기본 키 생성 전략을 지정합니다.@Column
: 필드와 데이터베이스 컬럼 간의 매핑을 정의합니다.@OneToOne
,@OneToMany
,@ManyToOne
,@ManyToMany
: 엔티티 간의 관계를 정의합니다.
4. JPA 예제
다음은 JPA를 사용하여 간단한 엔티티 클래스를 정의하고 데이터베이스 작업을 수행하는 예제입니다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
@Entity
@Table(name = “users”)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false)
private String name;
@Column(nullable = false, unique = true)
private String email;
// Getters and Setters
}
public class UserService {
@PersistenceContext
private EntityManager entityManager;
public void createUser(User user) {
entityManager.persist(user);
}
public User findUserById(Long id) {
return entityManager.find(User.class, id);
}
public void updateUser(User user) {
entityManager.merge(user);
}
public void deleteUser(User user) {
entityManager.remove(user);
}
}
|
cs |
위 예제에서는 User
엔티티 클래스를 정의하고, @Entity
, @Table
, @Id
, @GeneratedValue
, @Column
어노테이션을 사용하여 데이터베이스 테이블과의 매핑을 설정하였습니다.
UserService
클래스에서는 EntityManager
를 주입받아 엔티티의 생성, 조회, 수정, 삭제 작업을 수행하였습니다.
JPA를 사용하면 데이터베이스와의 상호작용을 객체 지향적으로 처리할 수 있으며, 데이터 액세스 로직을 간소화할 수 있습니다.
또한 JPA는 다양한 데이터베이스를 지원하므로, 데이터베이스 변경 시에도 애플리케이션 코드의 수정을 최소화할 수 있습니다.