[CS] JPA

박상민·2023년 6월 14일
0

Computer Science

목록 보기
20/29

JPA(Java Persistence Api)는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스 모음이다. 실제로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크이다. JPA를 구현한 대표적인 오픈소스로는 Hibernate가 있다.

❗️ORM이란?

일반적으로 애플리케이션 Class와 RDB(Relational Database)의 테이블을 매핑(연결)한다는 것을 의미하며, 기술적으로는 애플리케이션 객체를 RDB 테이블에 자동으로 영속화 해주는 것이다.

💡 영속화란 영속성 컨텍스트에 관리되는 상태로 만드는 것을 의미한다. 여기서 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이라는 뜻을 가지고 있다. DB에 저장한다는 것이 아니라 영속성 컨텍스트를 통해서 엔티티를 영속화 한다는 뜻이다.

❗️ORM 장단점

  • 장점
    1. SQL문이 아닌 Method를 통해 DB를 조작할 수 있어, 개발자는 객체 모델을 이용해서 비즈니즈 로직을 구성하는데 집중할 수 있다.
    2. Query와 같이 필요한 질의문, 할당 등의 부수적인 코드가 줄어들어, 각종 객체에 대한 코드를 별도로 작성하여 코드 가독성을 높일 수 있다.
    3. 객체지형적인 코드 작성이 가능하다. 오직 객체지향적 접근만 고려하면 되기 때문에 생산성이 높아진다.
    4. 매핑하는 정보가 Class로 명시 되었기 때문에 ERD를 보는 의존도를 낮출 수 있고 유지보수 및 리팩토링에 유리하다.
  • 단점
    1. 프로젝트 규모가 크고 복잡하여 설계가 잘못된 경우, 속도 저하 및 일관성을 무너뜨리는 문제점이 발생할 수 있다.
    2. 복잡하고 무거운 Query는 속도를 위해 별도의 튜닝이 필요하기 때문에 결국 SQL문을 써야할 수도 있다.

❗️JPA란?


Java 진영에서 ORM 기술 표준으로 사용하는 인터페이스 모음으로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. Hibernate, OpenJPA 등이 JPA 인터페이스를 구현한 구현체이다.

JPA는 반복적인 CRUD SQL을 처리한다. 매핑된 관계를 이용해서 SQL을 생성하고 실행하는데, 개발자는 어떤 SQL이 실행될지 생각만하면 되고, 예측도 쉽게할 수 있다. 추가적으로 JPA는 네이티브 SQL이란 기능을 제공하는데 관계 매핑이 어렵거나 성능에 대한 이슈가 우려되는 경우 SQL을 직접 작성하여 사용할 수 있다.

❗️JPA 장단점

  • 장점
    1. 1차 캐시, 쓰기지연, 변경감지, 지연로딩 등을 제공하여 성능상 이점을 얻을 수 있다.
    2. 코드 레벨로 관리가 되므로 사용하기 용이하고 생산성이 높다.
    3. 컴파일 타임에 오류를 확인할 수 있다.
    4. 데이터베이스에 종속적이지 않으므로 특정 쿼리를 사용하지 않아 추상적으로 기술 구현이 가능하다.
    5. 엔티티로 관리되므로 스키마 변경시 엔티티만 수정하게 되면 엔티티를 사용하는 관련 쿼리는 자동으로 변경된 내역이 반영된다.
    6. 개발 초기에는 쿼리에 대한 이해가 부족해도 코드 레벨로 어느 정도 커버가 가능하다.
    7. 객체지향적으로 데이터를 관리할 수 있다.
    8. 부족한 부분은 다양한 쿼리 빌더와 호환하여 보완할 수 있다.
  • 단점
    1. JPA만 사용하여 복잡한 연산을 수행하기에는 무리가 있다. (로직이 복잡하거나 불필요한 쿼리가 발생할 수 있다.)
    2. 초기에는 생산성이 높을 수 있으나 점차 사용하다 보면 성능상 이슈가 발생할 수 있다. (N+1, FetchType, Proxy, 연관관계)
    3. 고도화 될수록 학습 곡선이 높아질 수 있다. (성능 이슈의 연장선으로 해결 방안에 따라 복잡한 내부 로직을 이해해야 할 필요가 있다.)
profile
💡 클린코드를 지향하는 Backend Developer

0개의 댓글