[JPA] JPA란 무엇인가?

2022. 7. 27. 00:21JPA

  이번 글에서 알아볼 것은 JPA가 무엇인지에 관한 것이다. JPA(Java Persistence API)는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 그 말인 즉슨 실제로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈 소스로는 Hibernate가 있다.

 

JPA

  JPA에 알아보기에 앞서, ORM은 무엇일까? ORM은 이름 그대로 객체와 관계형 데이터베이스를 매핑한다는 뜻으로써, ORM 프레임워크는 객체와 테이플을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. 예를 들어 객체를 데이터베이스에 저장할 때, 개발자 입장에서는 INSERT SQL을 직접 작성하는 것이 아니라 객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 이 ORM 프레임워크가 적절한 INSERT SQL을 생성해서 데이터베이스에 객체를 저장해준다.

 

JPA 동작 과정

저장

JPA 저장

JPA를 사용해서 객체를 저장하는 코드는 다음과 같다.

jpa.persist(member); //저장

조회할 때도 JPA를 통해 객체를 직접 조회하면 된다.

 

조회

JPA 조회

JPA를 사용해서 객체를 조회하는 코드는 다음과 같다.

Member member = jpa.find(memberId); // 조회

  ORM 프레임워크는 단순히 SQL을 개발자 대신 생성해서 데이터베이스에 넘겨주는것 뿐만 아니라 객체와 데이터베이스 사이에서 오는 선천적인 패러다임 불일치 문제들을 해결해 준다. 따라서, 객체 입장에서는 정교한 객체 모델링이 가능해지고 관계형 데이터베이스 입장에서는 데이터베이스에 맞도록 모델링하면 된다. 그리고 이 둘을 어떻게 매핑해야 하는지 매핑 방법만 ORM 프레임워크에게 알려주면 된다.

 

왜 JPA 인가?

1) 생산성

  • JPA를 사용하면 다음 코드처럼 자바 컬렉션에 객체를 저장하듯 JPA에게 저장할 객체를 전달하면 된다.
jpa.persist(member); // 저장
Member member = jpa.find(memberId); // 조회
  • 지루하고 반복적인 코드와 CRUD용 SQL을 개발자가 직접 작성하지 않고 프레임워크가 대신해줄 수 있다. 이런 기능을 사용하면 데이터베이스 설계 중심의 패러다임을 객체 설계 중심으로 역전시킬 수 있다.

2) 유지보수

  • SQL을 직접 다루면 엔티티에 필드를 하나만 추가해도 관련된 CRUD SQL과 결과를 매핑하기 위핸 JDBC API 코드를 모두 변경해야 한다. 반면 JPA를 사용하면 이런 과정을 JPA가 대신 해주기 때문에 유지보수해야 하는 코드 수가 줄어든다.

3) 패러다임의 불일치 해결

  • JPA는 상속, 연관관계, 객체 그래프 탐색, 비교하기 등과 같은 패러다임의 불일치 문제를 해결해준다.

4) 성능

  • JPA는 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공한다. JPA는 애플리케이션과 데이터베이스 사이에서 동작하는데, 이러한 사이의 계층은 최적화 관점에서 시도해볼 수 있는 것이 많다.
String memberId = "helloId";
Member member1 = jpa.find(memberId);
Member member2 = jpa.find(memberId);
  • 위의 코드같은 경우 JDBC API를 사용해 해당 코드를 직접 작성했다면 회원을 조회할 때마다 SELECT SQL가 나가서 데이터베이스와 두 번 통신했을 것이다. 그렇지만, JPA를 사용하면 SELECT SQL은 처음 한 번만 나가고, 두 번째에는 조회한 회원 객체를 재사용한다.
  • 추가로, 하이버네이트는 SQL 힌트를 넣을 수 있는 기능도 제공한다.

5) 데이터 접근 추상화와 벤더 독립성

  • 관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많다. 예를 들어 페이징 처리같은 경우는 데이터베이스마다 그 사용법이 각각 다르다. 애플리케이션은 결국, 처음 선택한 데이터베이스 기술에 종속되고 다른 데이터베이스로 추후에 변경하기 어려워진다.
  • JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공하여 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 하고, JPA에게 어떤 데이터베이스 기술을 사용하는지만 알려주면 된다.

6) 표준

  • JPA는 자바 진영의 ORM 기술 표준이다. 표준을 사용하면 다른 구현 기술로 손쉽게 변경 가능하다.

 

 

 

출처)) 자바 ORM 표준 JPA 프로그래밍 - 김영한