왜 JPA를 사용할까?

Why use JPA(Java Persistence API)?

왜 JPA를 사용하게 됐을까?

객체를 영구 보관하는 다양한 저장소에는 RDB, NoSQL, File, OODBn 등이 있지만 현실적인 대안은 관계형 데이터베이스(RDB)이다.

즉, SQL을 이용해서 객체를 RDB에 저장할 수 밖에 없다. 관계형 DB를 쓰는 상황에서는 SQL에 의존적인 개발을 피하기 어렵다. 하지만 SQL 중심적인 개발에는 여러 문제가 있다.

  1. 무한 반복, 지루한 코드
    • CRUD (INSERT, SELECT, UPDATE, DELETE)을 테이블마다 생성해야 함.
  2. 객체 지향과 관계형 데이터베이스 간의 패러다임 불일치
    • 객체 지향
      • 객체 지향 프로그래밍은 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 다양한 장치들을 제공
      • 추상화, 캡슐화, 정보은닉, 상속, 다형성 등을 잘 사용하자
    • 관계형 데이터베이스
      • 데이터를 잘 정규화해서 보관하자
    • 패러다임이 불일치하는 두 가지를 매핑하기 떄문에 문제가 생김

    • 결국 RDB가 인식할 수 있는 것은 SQL뿐이기 때문 객체를 SQL로 짜야된다.
      • 개발자 == SQL매퍼 라고 할만큼 SQL 작업을 너무 많이 하고 있다.
  3. 객체와 관계형 데이터베이스의 차이
    • 상속
    • 연관관계
    • 데이터 타입
    • 데이터 식별 방법
  4. 모델링 과정에서의 문제
    • 객체를 테이블에 맞추어 모델링
  5. 객체 그래프 탐색
    • 객체는 자유롭게 객체 그래프(연관 관계가 있는 객체 사이)를 탐색할 수 있어야 된다.
    • 그러나 처음 실행하는 SQL에 따라 탐색 범위가 결정되기 때문에 탐색할 수 없음.

⇒ 객체를 자바 컬렉션에 저장 하듯이 DB에 저장할 수 는 없을까? JPA 도입

JPA(Java Persistent API)

자바 진영의 ORM 기술표준으로 인터페이스의 모음이다. 즉, 실제로 구현된것은 아니고 구현한 클래스와 매핑을 해준다. JPA를 구현한 ORM 프레임워크로는 Hibernate, EclipseLink, DataNucleus가 있다.

ORM(Object-relational mapping)

  • Object-realational mapping(객체 관계 매핑)
  • 객체는 객체대로 설계
  • 관계형 데이터베이스는 관계형 데이터베이스대로 설계
  • ORM 프레임워크가 중간에서 매핑
  • 대중적인 언어에는 대부분 ORM 기술이 존재

그래서 JPA를 도입해서 얻는 장점?

  • SQL 중심적인 개발에서 객체 중심으로 개발
  • 생산성
    • 기존: 테이블마다 CRUD 생성
  • 유지보수
    • 기존: 원래 필드 변경시 모든 SQL 수정
    • JPA: 필드만 추가, SQL은 JPA가 처리
  • 패러다임의 불일치 해결 (상속, 연관관계, 객체 그래프 탐색)
  • 성능
    • JPA의 성능 최적화 기능
      • 중간 계층이 있는 경우 다음과 같은 방법으로 성능을 개선할 수 있는 방법이 있다.
        • 버퍼링(모아놨다가 한번에 보내는) 기능
        • 캐싱(미리 데이터 저장) 기능
        • JPA도 JDBC API와 DB 사이에 존재하기 때문에 위의 두 기능이 존재한다.
      • 1차 캐시와 동일성 보장 - 캐싱 기능
      • 트랜 잭션을 지원하는 쓰기 지연 - 버퍼링 기능
      • 지연 로딩
        • 객체가 실제 사용될 때 로딩하는 기능

여기까지 JPA를 왜 사용하게 되었는지 알아보았고 다음부터는 JPA에 대해 자세히 알아보자.


참고: JPA

*틀린 부분이 있으면 언제든지 말씀해 주시면 공부해서 수정하겠습니다.


© 2022. All rights reserved.

Powered by 애송이