JPA : Java Persistence API

2023. 11. 15. 22:16백엔드/Spring Boot

ORM (Object Relational Mapping)

객체와 관계형 데이터베이스 간의 매핑을 자동화하는 프로그래밍 기술이나 기술 집합이다. 

Ex. Hibernate, EclipseLink, MyBatis

 

JPA

: JPA는 자바 진영의 ORM(Object-Relational Mapping)의 기술 표준으로 사용하는 인터페이스의 모음으로 JPA를 사용하면 객체지향 프로그래밍의 이점을 살리면서 DB와의 통합을 효율적으로 할 수 있다.

 

JPA 특징

1. 애노테이션 기반 매핑

: 어노테이션을 사용하여 객체와 DB간의 정보를 매핑 정보를 지정하여 복잡한 쿼리를 작성하지 않고도 DB 연동을 수행할 수 있다. 

@Entity
@Table(name = "employees")
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "employee_name")
    private String name;

    // ... 다른 필드 및 메서드들
}

 

2. JPQL (Java Persistence Query Language)

: 객체 지향적인 쿼리 언어인 JPQL을 제공하여 데이터베이스에 대한 객체 기반의 쿼리를 작성할 수 있다.

TypedQuery<Employee> query = entityManager.createQuery(
    "SELECT e FROM Employee e WHERE e.department = :dept", Employee.class);
query.setParameter("dept", desiredDepartment);
List<Employee> result = query.getResultList();

 

3. Entity Manager

: 엔티티 매니저는 트랜잭션을 관리하고 영속성 컨텍스트를 제공하여 객체의 상태를 추적하며 엔티티의 생명주기를 관리한다. 

EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();

Employee newEmployee = new Employee();
newEmployee.setName("John Doe");

entityManager.persist(newEmployee);

entityManager.getTransaction().commit();
entityManager.close();

 

4. 데이터베이스 독립성 유지 

  • JPA는 객체 지향적인 방식으로 DB와 상호작용하도록 개발되어 있어 데이터베이스 종속성을 낮추고 여러 종류의 데이터베이스에 대해 동일한 코드를 사용할 수 있도록 한다. 
  • 플랫폼간의 이식성을 높여주고 다른 데이터베이스 시스템으로 전환할 때 유연하게 대처할 수 있다.

 

5. 복잡한 쿼리를 작성하기 어려움

: JPQL은 객체 지향 쿼리 언어이지만, 복잡한 쿼리를 작성하기 위해서는 SQL에 비해 다소 복잡한 문법을 사용해야 한다.

특히 복잡한 조인이나 집계 함수와 같은 경우에는 난이도가 올라갈 수 있다.