JPA가 뭔지 알아보자

squareyun·2023년 1월 7일
0

JPA

목록 보기
1/1

본 게시글은 김영한님의 ‘자바 ORM 표준 JPA 프로그래밍 기본편’을 수강하며 공부한 내용입니다.

이거 왜 사용함?

  1. 반복문제

기존 개발자들은 SQL 중심적인 개발을 해왔다. 많은 테이블에서 CRUD 처리를 해주어야 하는데, 여기서 반복되는 행위는 개발자를 지루하게 한다. 개발자는 반복을 싫어한다.

  1. 객체와 RDB의 차이점로 인한 문제
  • 테이블에는 상속의 개념이 복잡하여 객체에 저장하고 조회하는 작업이 불편하다.
  • 객체는 참조를 사용하고 (단방향), 테이블은 외래 키를 사용하여 (양방향) 다른 형태를 지닌다.
  • 객체는 자유롭게 객체 그래프를 탐색할 수 있어야 하지만, RDB는 실행하는 SQL에 따라 탐색 범위가 결정되어 버린다.
  • 엔티티 신뢰 문제가 발생한다.
  • 모든 객체를 미리 로딩할 수 없다.

정리하면, 진정한 의미의 계층 분할이 어렵다. 객체답게 모델링 할수록 매핑 작업만 늘어간다. 위에 언급한 문제점들은 자바 컬렉션을 사용한다면 훨씬 쉽게 처리할 수 있다. 객체를 자바 컬렉션과 유사하게 DB에 저장하기 위해 JPA를 사용한다.

JPA가 뭐고

Java Persistence API의 약자로, 자바 진영의 ORM 기술 표준이다.

그럼 ORM은 뭔데

Object-relational mapping의 약자로, 객체는 객체대로 설계하고 관계형 데이터베이스는 관계형 데이터베이스대로 설계해도 되는 것을 의미한다.
그렇게 하면 ORM 프레임워크가 중간에서 알아서 매핑해줘서 패러다임의 불일치를 해결해준다.

동작 예시

MemberDAO를 persist로 저장하면, JPA는

  • Entity 분석
  • Insert SQL 작성
  • JDBC API 사용
  • 패러다임 불일치 해결

해준다.

JPA는 표준 명세이다.

JPA는 인터페이스의 모음으로, 이것을 구현한 3가지 구현체로 하이버네이트, EclipseLink, DataNucleus가 있다. 근데 거의 대부분 하이버네이트를 사용한다.

장점 정리

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성 향상
  • 유지보수 용이
    • 필드 변경 시 기존에는 SQL 다 수정해야 했지만, JPA는 필드를 추가하기만 하면 됨
  • 패러다임 불일치 해결
    • 상속관계, 연관관계 알아서 해줌
    • 신뢰할 수 있는 엔티티 → 자유로운 객체 그래프 탐색
  • 성능 향상
    • 1차 캐시와 동일성 보장: 같은 트랜잭션 안에서는 같은 엔티티 반환
    • 트랜잭션을 지원하는 쓰기 지연: 커밋할 때까지 SQL를 버퍼로 모으고 BATCH SQL로 한번에 전송 → 네트워크 통신 비용 감소 효과
    • 지연 로딩: 객체가 실제 사용될 때 로딩
    • 즉시 로딩: JOIN SQL로 한번에 연관된 객체 미리 조회
  • 데이터 접근 추상화와 벤더 독립성
  • 표준
profile
백엔드 엔지니어

0개의 댓글