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는 다양한 데이터베이스를 지원하므로, 데이터베이스 변경 시에도 애플리케이션 코드의 수정을 최소화할 수 있습니다.
