JPA

newVelog·2024년 4월 9일
0

CS

목록 보기
8/31

최근 Spring Boot 기반의 프로젝트를 진행하면서 JPA를 이용해 개발을 했다.
그러나 JPA를 사용하는데만 급급하고 기술의 특징과 용어에 대해 스스로 정리한 적이 없어 한번 해보려한다.

JPA

Java Persistence API

JPA는 Java 객체와 DB 엔티티(테이블) 자체를 그대로 매핑해서 처리할 수 있는 접근 방식을 채택한 기술이다.
JPA의 이런 접근 방식은 ORM(Object-Relational Mapping) 기술을 의미한다.
이 말인즉슨
1. 객체와 데이터베이스 간의 매핑 기술을 의미하며,
2. Java 개발자가 좀 더 객체지향 관점에서 개발할 수 있게 하고,
3. 개발을 용이하게 해주어서 DB와 Java 간의 불일치를 해소해 준다.

위 이미지를 보면 ORM 기술을 좀 더 쉽게 이해할 수 있다.
Java 객체인 Student 클래스가 ORM 매핑을 통해서 DB 테이블에 영속화(Persistence) 되고, 또다시 영속화된 데이터가 다시 Java 객체로 변환하는 과정을 나타내고 있다.
ORM은 이렇게 Java객체를 DB 테이블로 자동으로 영속화 시켜주는 기술을 의미한다.

이러한 ORM 기술을 실제 구현해서 만들어진 프레임워크가 Hibernate 이다.
Java와 DB 데이터 간의 매핑을 자동화해주어서 개발자는 SQL 문을 작성할 필요가 없어지고, DB가 바뀌어도 DB에 따라 새로운 SQL을 작성할 필요가 없이 Hibernate에서 DB에 맞는 적합한 SQL 문을 생성해준다.

JPA 특징

장점

  1. 객체 중심 개발 가능
    JPA는 객체 지향적인 개발에 중점을 둔다. 테이블 간의 연관 관계와 객체 간의 연관 관계를 쉽게 다룰 수 있다.

  2. 생상성 증가
    SQL 쿼리를 직접 생성하지 않고, 만들어진 객체에 JPA 메소드를 활용해 데이터베이스를 다루기 때문에 개발자에게 매우 편리성을 제공해준다.

  3. 유지보수 용이
    쿼리 수정이 필요할 때, 이를 담아야 할 DTO 필드도 모두 변경해야 하는 작업이 필요하지만 JPA에서는 엔티티 클래스 정보만 변경하면 되므로 유지보수에 용이하다.

  4. 성능 증가
    직접 SQL을 짜는 것과 비교해서 JPA는 동일한 쿼리에 대한 캐시 기능을 지원해주기 때문에 비교적 높은 성능 효율을 경험할 수 있다.

단점

  1. 복잡한 SQL 생성의 어려움
    단순 CRUD 이외의 통계, 분석과 같은 기능의 개발이 필요할때는 비교적 복잡한 쿼리를 만들어야하지만 JPA는 복잡한 쿼리보다는 실시간 쿼리에 최적화되어있다. 예를 들어 통계 처리와 같은 복잡한 작업이 필요한 경우에는 기존의 Mybatis와 같은 Mapper 방식이 더 효율적일 수 있다.

  2. 성능에 대한 고려 필요
    JPA에 의해 자동으로 SQL이 만들어지다 보니, DB의 특성(index, join 등)을 이해하고 DB에 맞는 SQL을 직접 튜닝해서 만들면 성능이 훨씬 뛰어날 수 있으나, 자동화된 SQL 문으로 인해서 데이터 조회 성능이 떨어질 가능성이 있다.
    단순 CRUD에는 큰 문제가 없으나, 데이터가 많아지고, 테이블 간 Join이 많아지는 경우, SQL 문을 어떻게 튜닝하는가로 인한 성능이 크게 차이가 날 여지가 있으므로, JPA 사용 시 이러한 부분을 주의해서 고려할 필요가 있다.

출처 : https://www.elancer.co.kr/blog/view?seq=231

0개의 댓글