[JPA] JPA 너는 누구냐?

LDB·2024년 11월 6일
0

JPA 기본

목록 보기
1/10
post-thumbnail

JPA 너의 정체는 무엇이냐?

JPA는 (Java Persistence API)의 약자로 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 대표적으로 JPA로 구현한 오픈소스 Hibernate가 있다, 나도 처음에 헷갈렸었는데 JPA와 Spring-Data-JPA는 엄연히 다르다. Spring-Data-JPA는 JPA를 사용하는 Spring 프레임워크이다.


(이처럼 JPA가 있고 Spring Data JPA가 존재한다.)

JPA 장점

  1. SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용하여 비즈니스 로직을 구성하는데만 집중할 수 있음.
  2. Query와 같이 필요한 선언문, 할당 등의 부수적인 코드가 줄어들어, 각종 객체에 대한 코드를 별도로 작성하여 코드의 가독성을 높일 수 있다.
  3. 객체지향적 접근만 고려하면 되기때문에 생산성 증가한다.
  4. 데이터베이스의 종류가 달라져도 쿼리를 수정할 필요가 없다.

JPA 단점

  1. 프로젝트의 규모가 커지고 DB설계가 복잡한 경우 적합하지 않다.
  2. 개발자의 러닝커브가 상승한다.
  3. 프로젝트가 복잡한 업무 프로세스를 가졌다면 결국 Query문을 생성해야한다.

JPA는 왜 사용할까?

JPA는 일단 반복적인 CRUD작업을 특정메서드만 사용하면되고 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게 할 수 있다, 그리고 MyBatis 를 사용한다면 Query문구에 문제가 생겨도 직접 실행시키고 직접동작을 해봐야 확인이 가능하지만 JPA를 사용하면 Query를 자동으로 생성시켜주고 개발자는 Query조건과 테이블간의 관계만 신경쓰면 되니 생산성이 올라간다.

Java 진영의 JPA들


(최대한 그려봤는데 틀린점이 있으면 지적부탁드립니다.)

Java 진영에서 JPA는 이렇게 두 가지로 나눌 수 있겠는데 2단의 Spring Data JPA와 hibernate는 공통적으로 JPA를 쉽게 구현하기위해 만든 인터페이스 구현체라는 점에서는 같지만 내부에서 JPQL을 사용하는 방식이 다르다.

기술명설명
EntityManagerJPA에서 기본으로 쿼리를 작성하는 방식
QueryDSLhibernate에서 제공하는 쿼리작성 프레임워크
JPARepositorySpring Data JPA에서 제공하는 JPA저장소
@QueryJPARepository에서 제공하는 쿼리를 직접작성할 수 있도록 제공하는 어노테이션

SQL과 JPQL 차이점

처음에는 JPQL이 무슨 라이브러리 개념인줄 알았는데 기술의 일종이었다.

JPQLSQL
대상객체Entity 객체데이터베이스 테이블
추상화 수준객체지향적인 추상화 수준을 가지고 있어 데이터베이스의 물리적인구조에 독립적이다.데이터베이스의 물리적 구조에 의존적이다.
쿼리 작성 방식Entity 이름과 Entity의 필드 이름을 사용하여 쿼리를 작성한다.테이블 이름, 컬럼 이름을 직접 명시해야 한다.
데이터 타입자바 객체의 데이터타입을 사용한다.데이터베이스의 타입을 사용한다.
쿼리 실행과정JPA 구현체가 JPQL을 SQL로 변환하여 데이터베이스에 전달한다.데이터베이스에 직접 쿼리를 전달하여 실행한다.

개인적 의견

JPA든 Mybatis 같은 SQL Mapper든 결국 데이터베이스의 테이블을 조회한다는 점에서 같다 하지만 각각 장단점이 뚜렷했다. 세계관점에서 보면 JPA를 많이 사용하고 국내에서도 신규 프로젝트 및 서비스를 운영하는 기업에서는 JPA를 많이 사용하는 추세다,

하지만 업무가 복잡한 은행과 공기업에서는 Mybatis를 사용할 수 밖에 없기에 쿼리를 직접 작성을 해야하는데 국내에는 Mybatis를 사용해야 할 정도로 복잡한 프로세스를 지닌 프로젝트가 수도 없이 많다. 국가 프로젝트 및 은행권에서 JPA를 사용하기까지는 시간이 좀 걸릴거 같다.

참고 사이트

https://dbjh.tistory.com/77

https://velog.io/@bo-ram-bo-ram/JPQL

https://sweet-rain-kim.tistory.com/196

profile
가끔은 정신줄 놓고 멍 때리는 것도 필요하다.

0개의 댓글

관련 채용 정보