[JPA] JPA란 무엇인가?

2jjong·2024년 6월 8일

JPA는 자바 진영의 ORM 기술 표준이다. JPA는 다음 그림처럼 애플리케이션과 JDBC API 사이에서 동작한다.

ORM은 Object-Relational Mapping 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻이다. ORM 프레임워크는 다음 그림과 같이 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다.


JPA 저장


JPA 조회

ORM 프레임워크는 단순히 SQL을 개발자 대신 생성해서 데이터베이스에 전달해주는 것뿐만 아니라 앞서 이야기한 다양한 패러다임의 불일치 문제들도 해결해준다. 따라서 객체 측면에서는 정교한 객체 모델링을 할 수 있고 관계형 데이터베이스는 데이터베이스에 맞도록 모델링하면 된다. 그리고 둘을 어떻게 매핑해야 하는지 매핑 방법만 ORM 프레임워크에게 알려주면 된다. 덕분에 개발자는 데이터 중심인 관계형 데이터베이스를 사용해도 객체지향 애플리케이션 개발에 집중할 수 있다.

JPA 소개

과거 자바 진영에서는 엔터프라이즈 자바 빈즈(EJB)라는 기술 표준을 만들었는데 그 안에는 엔티티 빈이라는 ORM 기술도 포함되어 있었다. 하지만 너무 복잡하고 기술 성숙도도 떨어졌으며 자바 엔터프라이즈 애플리케이션 서버에서만 동작했다. 이때 하이버네이트라는 오픈소스 ORM 프레임워크가 등장했는데 EJB의 ORM 기술과 비교해서 가볍고 실용적인 데다 기술 성숙도도 높았다. 또한 자바 엔터프라이즈 애플리케이션 서버 없이도 동작해서 많은 개발자가 사용하기 시작했다. 결국 EJB 3.0에서 하이버네이트를 기반으로 새로운 자바 ORM 기술 표준이 만들어졌는데 이것이 바로 JPA이다.

JPA는 자바 ORM 기술에 대한 API 표준 명세이다. 쉽게 이야기해서 인터페이스를 모두 모아둔 것이다. 따라서 JPA를 사용하려면 구현한 ORM 프레임워크를 선택해야 한다. 그림 1.8과 같이 ORM 프레임워크들이 있는데 가장 대중적인 것은 하이버네이트이다.

왜 JPA를 사용해야 하는가?

JPA를 사용해야 하는 이유는 여러 가지이다. 하나씩 살펴보자.

  • 생산성
    JPA를 사용하면 자바 컬렉션에 객체를 저장하듯이 JPA에게 저장할 객체를 전달만 하면 된다. INSERT SQL을 사용하고 JDBC API를 사용하는 반복적인 일은 JPA가 대신 처리해준다.
    따라서 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않아도 된다. 더 나아가 JPA에는 CREATE TABLE 같은 DDL 문을 자동으로 생성해주는 기능도 있다.
  • 유지보수
    SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 관련된 등록, 수정, 조회 SQL과 결과를 매핑하기 위한 JDBC API 코드를 모두 변경해야 했다. 반면에 JAP를 사용하면 이런 과정들을 대신해주므로 변경해야 할 코드가 줄어든다. 따라서 유지보수 해야 하는 코드 수가 줄어든다.
  • 패러다임 불일치 문제 해결
    JPA는 상속, 연관관계, 객체 그래프 탐색, 비교하기와 같은 패러다임의 불일치 문제를 해결해준다.
  • 성능
    JPA는 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공한다.
  • 데이터 접근 추상화와 벤더 독립성
    관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많다. 하지만 JPA를 사용하면 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해서 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 한다. 만약 데이터베이스를 변경하면 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 된다.
  • 표준
    JPA는 자바 진영의 ORM 기술 표준이다. 표준을 사용하면 다른 구현 기술로 손쉽게 변경할 수 있다.
profile
student

0개의 댓글