응애개발자
article thumbnail
Published 2023. 7. 9. 12:52
JPA란 무엇인가? Spring/JPA
728x90

JPA는 자바 진영의 ORM 기술 표준이다.

JPA

 

ORM이란?

ORM은 이름 그대로 객체와 관계형 DB를 매핑한다는 뜻이다. ORM 프레임 워크는 객체와 테이블을 매핑해서 패러다임의 불일치 문제를 개발자 대신 해결해준다. 예를 들어 개발자가 객체를 저장할 때 INSERT SQL을 직접 작성하는 것이 아닌 객체를 마치 자바 컬렉션에 저장하듯이 ORM 프레임워크에 저장하면 된다. 그러면 ORM 프레임워크가 적절한 INSERT SQL을 생성해서 DB에 객체를 저장해준다.

 

 

객체 저장

ex)jpa.persist(member); //저장

JPA 저장

 

 

객체 조회

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

JPA 조회

 

어느 정도 성숙한 객체지향 언어에는 대부분 ORM 프레임워크들이 있는데 단순히 객체 하나를 CRUD하는 정도의 기능만 제공 하는 것부터 패러다임 불일치 문제를 대부분 해결해주는 ORM 프레임워크도 있다. 자바 진영에도 다양한 ORM 프레임워크들이 있는데 그중에 하이버네이트 프레임워크가 가장 많이 사용된다. 하이버네이트는 대부분의 패러다임 불일치 문제를 해결해주는 성숙한 ORM 프레임워크이다.

 

1. JPA 소개

과거에는 자바 빈즈(EJB) 기술 표준을 만들었는데 그 안에는 엔티티 빈이라는 ORM 기술도 포함되어 있었다. 하지만 복잡하고 성숙도도 떨어졌으며 자바 엔터프라이즈(J2EE) 서버에서만 동작했다.

그래서 하이버네이트라는 ORM 프레임워크가 등장했다.(자바 엔터프라이즈 서버 없이도 동작)

JPA 표준 인터페이스와 구현체

 

JPA는 자바 ORM 기술에 대한 API 표준 명세이다. 쉽게 말해 인터페이스를 모아둔 것이다.

ORM 프레임워크는 하이버네이트, EclipseLink, DataNucleus 가 있는데 이중 하이버네이트가 대중적으로 많이 사용한다.

 

JPA 장점

  1. 특정 구현 기술에 대한 의존도를 줄일 수 있다.
  2. 다른 구현 기술로 손쉽게 이동할 수 있다.

 

JPA 표준은 일반적이고 공통 적인 기능의 모음이므로 표준을 먼저 이해하고 필요에 따라 JPA 구현체가 제공하는 기능을 알아가면 된다.

 

2. 왜 JPA를 사용해야 하는가?

  1. 생산성
    지루하고 반복적인 일은 JPA가 대신 처리해준다. 더 나아가서 JPA에는 CREATE TABLE같은 DDL문을 자동으로 생성해주는 기능도 있다. 이런 기능들을 사용하면 DB설계 중심의 패러다임을 객체 설계 중심으로 역전시킬 수 있다.

  2. 유지보수
    SQL을 직접 다루면 JDBC API코드를 모두 변경해야 했지만 JPA를 사용하면 이런 과정을 대신 처리해주므로 유지보수 해야하는 코드 수가 줄어든다.
  3. 패러다임 불일치 해결
    JPA는 상속, 연관관계, 객체 그래프 탐색, 비교와 같은 패러다임 불일치 문제를 해결해준다. 더 자세히 알려면
 

JPA 패러다임의 불일치

애플리케이션이 발전하며 그 내부 복잡성도 증가, 그래서 현대의 복잡한 애플리케이션은 대부분 객체지향 언어로 개발한다. 문제는 도메인 모델을 저장할때 발생한다. 예를들어 회원 객체를 저

eungae-d.tistory.com

이 글을 참조하자.

 

  4. 성능

      JPA는 애플리케이션과 DB 사이에서 다양한 성늘 최적화 기회를 제공한다. 

        JDBC API를 사용하면 회원을 조회할 때마다 SELECT SQL을 이용하여 DB와 두번 통신했을 것이다. JPA를 사용하면
        SQL을 한 번만 DB에서 전달하고 두번째는 조회한 회원 객체를 재사용한다.

 

 

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

      JPA는 다른 DB를 사용한다고 변경하면 JPA에게 다른 DB를 사용한다고 알려주기만 하면 된다.

      예를들어 JPA를 사용하면 로컬 개발 환경은 H2 DB를 사용하고 개발이나 상용환경은 오라클이나 MySQL DB를사용할 수 있다.

 

 

'Spring > JPA' 카테고리의 다른 글

엔티티 매핑  (0) 2023.07.11
영속성 관리  (0) 2023.07.10
JPA 시작  (0) 2023.07.09
JPA 패러다임의 불일치  (0) 2023.07.09
JPA 소개  (0) 2023.07.07
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!