[JPA] 자바 ORM 표준 프로그래밍 정리 #1

y__hi_2X·2022년 1월 19일
2

JPA

목록 보기
1/4

이 글은 김영한님의 '자바 ORM 표준 프로그래밍' 교재를 바탕으로 정리한 글입니다. :)

💡JPA란?

객체와 관계형 DB 간의 차이를 해결해 주는 ORM 프레임워크이다. JPA는 개발자 대신 적절한 SQL(CRUD)를 생성해 데이터베이스에 전달해 줄 뿐만 아니라 기존 JDBC API의 패러다임 불일치 문제도 해결해 준다.

ORM(Object-Relational Mapping)은 이름 그대로 객체와 관계형 데이터베이스를 매핑해준다. JPA는 이러한 ORM 기술에 대한 API 표준 명세이다.
현재 다양한 ORM 프레임워크이 존재하지만 그중 하이버네이트가 가장 대중적으로 사용된다.

JPA의 필요성

SQL을 직접 다룰 때 발생하는 문제

  • 객체와 데이터베이스 간 구조적 차이
    보통 데이터베이스는 객체 구조와는 다른 데이터 중심의 구조를 가진다.
    때문에 객체를 직접 DB에 저장하지 못하고 개발자가 객체와 DB 사이에서 SQL과 JDBC API를 이용해 변환 작업을 직접 해줘야 한다.
    이러한 이유로 애플리케이션이 점점 커질수록 작업해야 할 SQL과 API는 무수히 늘어날 것이다.

  • SQL에 의존적인 개발
    객체 간의 연관관계를 전적으로 SQL을 통해 표현하기 때문에 논리적으로 엔티티와 SQL 사이에 강력한 의존관계가 발생한다. 이로 인해 엔티티 수정이 필요할 경우 DAO를 열어 실행되는 SQL을 확인해야 하고 이는 진정한 의미의 계층 분할이 아니다.

  • 유지보수의 어려움
    위와 같이 엔티티와 SQL 간 강력한 의존관계가 생긴다. 때문에 엔티티에 변경이 일어날 때 관련 DAO와 SQL 대부분을 변경해야 해 유지보수가 어려워지는 문제가 발생한다.

JPA의 장점

  • 생산성
    기존에는 개발자가 SQL을 작성하고 JDBC API를 사용하는 반복적인 작업을 모두 진행해야 했지만 JPA는 이러한 작업을 모두 대신 처리해 준다.

  • 유지보수
    SQL을 직접 다루는 경우, 엔티티에 변경이 일어나면 관련 SQL을 모두 수정하는 작업이 필요하다. 하지만 JPA를 사용하면 이러한 작업을 JPA가 대신해주기에 개발자가 유지보수해야할 코드 수가 적어진다.

  • 패러다임의 불일치 해결
    상속, 연관관계, 객체 그래프 탐색, 비교하기와 같이 객체와 관계형 데이터베이스 사이에서 발생하는 패러다임 불일치 문제를 JPA를 사용해 해결할 수 있다.

  • 성능
    JPA는 엔티티 매니저 내부에 영속성 컨텍스트를 두어 엔티티를 비휘발성으로 관리한다. 예를 들어 아래와 같이 같은 트랜잭션 안에서 동일 데이터를 조회하는 코드가 있다고 가정해 보자.

    EntityManager em;
    
    String memberId = "user1";
    Member member1 = em.find(memberID);
    Member member2 = em.find(memberID);

    엔티티 매니저를 통해 데이터가 한 번 조회해왔다면 이 이후부터 조회되는 데이터는 엔티티 매니저에 이미 저장된 데이터를 조회하기 때문에 DB 통신을 여러 번 하지 않는다. 이러한 동작 방식을 통해 JPA는 애플리케이션과 데이터베이스 사이에서 최적화된 성능을 지원한다.

  • 데이터 접근 추상화와 벤더 독립성
    아래와 같이 JPA는 애플리케이션과 데이터베이스 사이 추상화된 접근 계층을 제공하기에 특정 데이터베이스 기술에 종속되지 않는다. 때문에 데이터베이스를 변경하게 되더라도 일부 설정만 변경해 주면 된다.

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


읽어주셔서 감사합니다. 🥳

2개의 댓글

comment-user-thumbnail
2022년 4월 20일

JPA가 뭔지 궁금했었는데 궁금증 해소하고 갑니다~^^

1개의 답글