[JPA] Java Persistence API 를 사용하는 이유

2024. 3. 21. 15:58Web/JAVA

1. JPA

  • 자바 진영에서 ORM(Object - Relation Mapping) 기술 표준으로 사용되는 인터페이스 모음
  • 구현된 클래스와 맵핑 해주기 위해서 사용되는 프레임워크
  • JPA를 구현한 대표적인 오픈소스로는 Hibernate 가 있다.
  • ORM(Object - Relation Mapping)
    • 객체와 관계형 데이터베이스의 데이터를 자동으로 Mapping( 연결 ) 해주는 것을 의미한다.
    • 객체지향 프로그래밍 - 클래스 사용 / 관계형 데이터베이스 - 테이블 사용
    • 객체모델과 관계형 모델간의 존재하는 불일치를 ORM을 통해 객체간의 관계를 바탕으로 SQL문을 자동으로 생성

2. JPA 사용이유

  • 기존의 개발 방식(Mybatis)은 SQL 중심적인 개발이었지만, JPA를 사용하면서 객체 중심으로 개발이 가능하다.
  1. 생산성 (CRUD)
    • JPA를 사용하면 기본적으로 생산성이 증가한다. 
    • JDBC의 경우 SQL 쿼리문을 직접 작성하여 데이터베이스에 접근할 수 있지만 JPA는 쿼리문을 별도록 작성할 필요가없다.
      • 저장 : persist()
      • 조회 : find()
      • 수정 : setName() or this.name = name
      • 삭제 : remove()
    • SQL을 작성하고 JDBC API를 사용하는 반복적인 작업을 대신 처리해준다.
  2. 유지보수가 쉽다.
    • 기존에는 엔티티 클래스의 필드가 변경되면 모든 SQL을 수정하여만 했다.
    • JPA의 경우 필드만 추가하면 SQL은 JPA가 처리한다.
      • 엔티디(Entity)라는 개념을 통해 데이터베이스 스키마와 애플리케이션 객체 모델을 연결
  3. 성능 최적화 기회를 제공한다.
    • 같은 트랜잭션 안에서 같은 엔티티를 반환하기 때문에 데이터베이스와의 통신 횟수를 줄일 수 있다.
    • 또한, 트랜잭션을 commit하기 전까지 메모리에 쌓고 한번에 SQL을 전송한다.
  4. 데이터 접근 추상화벤더 독립성
    • JPA는 어플리케이션과 데이터베이스 사이에서 추상화 데이터 접근을 제공하기 때문에 RDB벤더에 종속되지 않는다.
    • 만약 DB가 변경되더라도 JPA에게 알려주면 간단하게 변경이 가능하다. (유연)
  5. 패러다임의 불일치 문제 해결
    • 객체 상속시 SQL은 JPA가 알아서 처리
    • JAVA의 존재하는 상속관계를 객체의 상속 관계를 지원하지 않는 데이터베이스에서 JPA는 아래방식으로 해결

3. JPA 장단점

  • 장점
    • SQL문이 아닌 메서드를 통해서 DB조작이 가능하기 때문에, 개발자는 객체모델을 이용하여 비즈니스 로직을 구성하는데만 집중하여 개발을 할 수가 있다.
    • 유지보수 및 리팩토링이 용이하다.
  • 단점
    • 프로젝트 규모가 크고 복잡하여 설계가 잘못된 경우 속도 저하 및 일관성을 무너뜨리는 문제점이 발생할 수 있다.
    • 개발자가 의도하지 않은 Query로 인해 성능이 저하
    • 복잡한 Query의 경우 속도를 위해 별도의 튜닝이 필요할 수 있다.
    • 학습비용이 어느정도 존재하고 시간이 오래 걸린다.