개발 하나둘셋/Java & Spring

JPA(Java Persistence API) 이해하기

유리코딩 2021. 11. 16. 01:52
반응형

개념정리

JPA(Java Persistence API)


 

JPA 기본개념

 

JPA(Java Persistence API)

JPA는 자바 진영의 ORM 기술 표준으로 사용하는 인터페이스 모음

  • JPA를 사용하면 객체를 DB에 저장하고 관리할 때, 개발자가 직접 SQL을 작성하지 않아도 됨
  • 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
  • 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함
  • JPA가 개발자 대신 적절한 SQL을 생성해서 DB에 전달하고, 객체를 자동으로 Mapping 해줌
  • 개발자가 직접 JDBC API를 활용하면 패러다임 불일치, SQL 의존성 등으로 인해 효율성이 떨어지는데 JPA를 이용하면 모든 SQL에 대해 개발자 대신 JPA가 자동으로 해결해 주기 때문에 생산성을 크게 높임

 

ORM(Object-Relational Mapping)

ORM은 객체와 관계형 DB를 mapping

  • ORM 프레임워크를 사용하면 객체를 마치 자바 컬렉션에 저장하듯 저장할 수 있고, 이에 대해 ORM 프레임워크가 적절한 SQL을 생성해서 DB에 객체를 저장해줌

 

Hibernate

자바 진영의 다양한 ORM 프레임워크 중 가장 많이 사용되는 성숙한 프레임워크로 

  • Hibernate 기반으로 만들어진 ORM 기술 표준이 바로 JPA다.
  • JPA라는 ORM 기술 표준을 구현한 것이 Hibernate이므로, JPA를 사용하려면 Hibernate를 사용하면 된다.

 

JPA의 동작 과정

출처 : https://gmlwjd9405.github.io/2019/08/04/what-is-jpa.html

  • JPA는 애플리케이션과 JDBC 사이에서 동작
  • 개발자가 JPA를 사용하면, JPA 내부에서 JDBC API를 사용하여 SQL을 호출하여 DB와 통신

 

JPA의 특징

생산성

  • 개발자가 일일히 CRUD용 쿼리를 작성해줘야하던 Mybatis와 같은 Mapper방식은 컬럼이 추가되거나하면 수정해주어야하는 부분이 상당히 많아서 객체중심 개발이 아니라 데이터베이스 흐름으로 개발을 하게되는 문제가 있었음
  • JPA를 사용하게 되면 쿼리를 직접 생성하는 것이 아니고 만들어진 객체로 데이터베이스를 다루기 때문에 객체 중심으로 개발을 진행해 생산성 향상 

유지보수

  • SQL을 직접적으로 작성하지 않고 엔티티 필드가 되는 객체를 다뤄서 데이터베이스를 동작시키기 때문에 유지보수가 간결
  • 쿼리가 수정되면 그에 따라서 그를 담을 DTO 필드도 모두 변경이 되야 하지만 JPA를 사용하게 되면 단순히 엔티티 클래스 정보만 변경하면 쉽게 관리가 가능하기 때문

성능

  • 일반적인 Spring의 encache 기능처럼 동일한 쿼리에 대한 캐시 기능을 사용하기 때문에 더욱 높은 성능적 효율성을 경험 

RDBMS 종류와 무관한 코딩

  • 객체 중심으로 동작하기 때문에 Oracle, Mysql, Mssql과 같이 서로 다른 벤더사 데이터베이스를 사용하려고 할 때 문법을 바꿔줘야하는 수고를 줄일 수 있음

 

JPA 한계

  • JPA는 통계처리와 같이 복잡한 쿼리보다는 실시간 처리용 쿼리에 더 최적화되어 있어 통계처럼 복잡하고 미세하게 쿼리 작업이 필요하다면 Mybatis와 같은 Mapper 방식을 사용하는 것이 더 효율적

 

 

반응형