[자바 ORM 표준 JPA 프로그래밍] 1. JPA 소개

서요이·2022년 10월 3일
0
post-thumbnail

1. JPA 소개

SQL 중심적인 개발의 문제점

애플리케이션 - 객체 지향 언어 (Java, Scala, …)
데이터베이스 - 관계형 DB (Oracle, MySQL, …)
지금 시대는 객체를 관계형 DB에 관리

SQL 중심적인 개발의 문제점

  • 무한 반복, 지루한 코드 (CRUD)
  • 패러다임의 불일치: 객체 vs 관계형 데이터베이스 - 객체를 SQL로 변환

객체와 관계형 데이터베이스의 차이

  • 상속 - Table 슈퍼타입 서브타입 관계
    각각의 테이블에 따른 조인 SQL 작성, 각각의 객체 생성… 복잡
  • 연관 관계
    객체 - 참조 사용, 테이블 - 외래 키 사용 (join)
    객체 참조는 한 방향으로만 가능하지만 테이블은 양방향으로 join 가능
    객체를 테이블에 맞게 모델링 - 조회 시 매우 복잡
  • 객체 그래프 탐색
    객체는 자유롭게 객체 그래프를 탐색할 수 있어야 함
    처음 실행하는 SQL에 따라 탐색 범위 결정 - 엔티티 신뢰 문제 (논리적으로는 자유롭게 호출 불가)
    계층형 아키텍처에서 진정한 의미의 계층 분할이 어렵다.
  • 비교하기
    식별자가 같아도 SQL을 사용하면 값이 다름
  • 데이터 타입
  • 데이터 식별 방법

객체답게 모델링 할수록 매핑 작업만 늘어남
→ 객체를 자바 컬렉션에 저장하듯이 DB에 저장할 수는 없을까?
→ JPA

JPA 소개

JPA

  • Java Persistence API
  • 자바 진영의 ORM 기술 표준

ORM

  • Object-relational Mapping (객체 관계 매핑)
  • 객체는 객체대로 설계, RDB는 RDB대로 설계
  • ORM 프레임워크가 중간에서 매핑 - 객체와 RDB의 차이 해결

JPA는 애플리케이션과 JDBC 사이에서 동작
[JAVA 애플리케이션 - JPA - JDBC API - SQL - DB]
SQL 쿼리를 개발자가 만드는 것이 아니라 JPA가 만들어 줌
패러다임 불일치 해결!!

JPA 소개

  • EJB(자바 표준) → 하이버네이트(오픈 소스) → JPA(자바 표준)
  • JPA는 인터페이스의 모음
  • JPA 2.1 표준 명세를 구현한 3가지 구현체 (하이버네이트(대부분 사용), EclipseLink, DataNucleus)

JPA를 왜 사용해야 하는가

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성 - JPA와 CRUD
  • 저장: jpa.persist(member)
  • 조회: Member member = jpa.find(memberId)
  • 수정: member.setName(”변경할 이름”)
  • 삭제: jpa.remove(member)
  • 유지보수
    기존: 필드 변경시 모든 SQL 수정
    JPA: 필드만 추가, SQL은 JPA가 처리
  • JPA와 패러다임 불일치 해결
    상속, 연관 관계, 객체 그래프 탐색, 신뢰할 수 있는 엔티티, 계층, 비교
    → JPA를 통해 자유롭게 사용 가능
  • JPA의 성능 최적화 기능
    중간 계층 - 버퍼링과 캐싱이 가능
  1. 1차 캐시와 동일성(Identity) 보장 - 캐싱, 약간의 조회 성능 향상
  2. 트랜잭션을 지원하는 쓰기 지연 - 버퍼링, JDBC BATCH SQL 기능으로 한번에 SQL 전송
  • 지연 로딩과 즉시 로딩
  • 지연 로딩: 객체가 실제 사용될 때 로딩
  • 즉시 로딩: JOIN SQL로 한번에 연관된 객체까지 미리 조회 (옵션으로 끄고 켜기 가능)

ORM은 객체와 RDB 두 기둥 위에 있는 기술

0개의 댓글