ORM(Object-relational Mapping)

  • Object-relational mapping
    • 객체는 객체대로 설계하고, 관계형 데이터베이스는 관계형 데이터베이스대로 설계한다.
    • ORM 프레임워크가 중가에서 매핑해준다.
  • 대중적인 언어에는 대부분 ORM 기술이 존재한다.
  • ORM은 객체와 RDB 두 기둥 위에 있는 기술이다.

JPA(Java Persistence API)란

  • EJB
    • 과거의 자바 표준
    • 과거의 ORM
    • 문제점
      • 코드가 매우 지저분함
      • API 복잡성이 높다
      • 속도가 느리다
  • Hibernate
    • ORM 프레임워크
    • EJB2 스타일의 Entity Beans 이용을 대체할 목적으로 개발
  • JPA (Java Persistence API)
    • 자바 진영의 ORM 기술 표준으로, 인터페이스의 모음이다.
    • JPA 인터페이스를 구현한 대표적 오픈소스가 Hibernate이다.
    • JPA 2.1 표준 명세를 구현한 3가지 구현체: Hibernate, EclipseLink, DataNucleus

JPA 동작 과정

  • JPA는 애플리케이션과 JDBC 사이에서 동작한다.
    • 개발자가 JPA를 사용하면 JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신한다.
    • 개발자가 직접 JDBC API를 쓰는 것이 아니다.

저장 과정

  • JPA에 Member 객체를 넘긴다
  • JPA는 Member 엔티티를 분석한다
  • INSERT SQL을 생성한다.
  • JDBC API를 사용하여 SQL을 DB에 날린다.

조회 과정

  • Member의 PK를 JPA에 넘긴다
  • 엔티티 매핑 정보를 바탕으로 적절한 SELECT를 생성한다.
  • JDBC API를 사용하여 SQL을 DB에 날린다
  • DB로부터 결과를 받는다
  • 결과를 객체에 매핑한다.

JPA 사용 이유

  • SQL 중심 개발에서 객체 중심으로 개발

  • 생산성

    • JPA를 사용하는 것은 Java Collection에 데이터를 넣었다 빼는 것처럼 사용할 수 있게 만든 것이다.
    • 간단한 CRUD 사용
    • 수정이 굉장히 간단하다
      • 객체를 변경하면 알아서 DB에 UPDATE Query가 나간다.
  • 유지보수

    • 기존: 필드 변경 시 모든 SQL을 수정해야한다.
    • JPA: 필드만 추가하면 된다.
  • Object와 RDB 간의 패러다임 불일치 해결

    JPA의 성능 최적화 기능

  • 중간 계층이 있는 경우 아래 방법으로 성능 개선이 가능하다
    • 모아서 쓰는 버퍼링 기능
    • 읽을 때 쓰는 캐싱 기능
  • JPA도 JDBC API와 DB 사이에 존재하기 때문에 위의 두 기능이 모두 존재한다.