반응형
Notice
Recent Posts
Recent Comments
관리 메뉴

간단한 개발관련 내용

1장 JPA 소개 본문

IT 책/JPA (ORM 표준 JPA 프로그래밍)

1장 JPA 소개

vincenzo.dev.82 2024. 11. 19. 11:21
반응형

JPA를 사용하기 전에 JDBC-API를 사용하거나 MyBatis를 사용하던 시절을 떠올리면 비즈니스를 구성하는 DB는 정해져 있는데, 데이터를 구성하기 위한 수많은 매핑 모델과 쿼리 작업을 잊을 수가 없습니다.

  • 특히 수많은 조회쿼리와 개별 상황에 따른 DAO

객체 답게 모델링 할 수록 매핑 작업만 늘어나게되고 객체 모데은 점점 데이터 중심의 모델로 변해 갔던 기억이 있는데요.

JPA는 이러한 단점들을 극복하게 해 주는 Java Persistence API로서 자바 애플리케이션에서 관계형 데이터베이스를 사용할 수 있도록 돕는 자바 표준 API입니다. 주로 객체와 데이터베이스 간의 매핑을 관리하며, ORM(Object Relational Mapping)을 지원하는 것이 주요 기능입니다.

ORM을 통해 데이터베이스의 테이블과 자바 객체를 자동으로 매핑하여 개발자가 SQL을 직접 작성하지 않고도 데이터를 처리할 수 있도록 도와줍니다.

JPA의 핵심 기능은 다음과 같습니다:

  1. 객체-관계 매핑 (ORM): 자바 클래스와 데이터베이스 테이블을 자동으로 매핑합니다. 이를 통해 데이터베이스의 테이블 구조와 자바 객체 구조 간의 불일치를 해결합니다.
  2. CRUD 처리: 기본적으로 Create, Read, Update, Delete 작업을 쉽게 할 수 있도록 지원합니다. 예를 들어, 엔티티 객체를 저장, 수정, 삭제하는 메서드를 제공합니다.
  3. JPQL (Java Persistence Query Language): JPA는 데이터베이스에 독립적인 쿼리 언어인 JPQL을 제공합니다. SQL과 유사하지만, JPQL은 데이터베이스 테이블 대신 자바 엔티티 객체를 대상으로 쿼리를 수행합니다.
  4. 캐싱과 성능 최적화: JPA는 1차 캐시, 2차 캐시를 통해 데이터베이스 접근을 최소화하여 성능을 향상시킬 수 있습니다.

JPA는 인터페이스이기 때문에, 실제로는 Hibernate, EclipseLink와 같은 JPA 구현체를 사용하여 기능을 활용하게 됩니다. Hibernate는 가장 널리 사용되는 JPA 구현체 중 하나입니다.

JPA를 사용하면 애플리케이션 코드가 데이터베이스에 종속되지 않고, 데이터베이스 변경 시 코드 수정이 최소화되는 장점이 있습니다.

1.1 SQL을 직접 다룰 때 발생하는 문제점

1.1.1 반복, 반복 그리고 반복

1.1.2 SQL에 의존적인 개발

  • 진정한 의미의 계층 분할이 어렵다
    • 필드 변경되면 다 변경해야 하는 경우
  • 엔터티를 신뢰할 수 없다
  • SQL에 의존적인 개발을 피하기 어렵다

1.1.3 JPA와 문제해결

1.2 패러다임의 불일치

1.2.1 상속

  • 객체의 상속관계를 DB로 표현할 수 없음

1.2.2 연관관계

  • 객체는 참조를 통해서 관계를 표현하고, 테이블은 외래키를 통해서 관계를 표현하는데 JPA가 아니면 새로운 모델을 만들어서 데이터를 표현(조회)해야 한다.

1.2.3 객체 그래프 탐색

  • 지연로딩을 통한 참조 그래프 탐색 기능

1.2.4 비교

  • JPA는 같은 트랜잭션일 때 같은 객체가 조회되는 것을 보장한다.

1.2.5 정리

<aside> 💡

객체 모델과 관계형 데이터베이스 모델은 지향하는 패러다임이 서로 다르다. 문제는 이 패러다임의 차이를 극복하려고 개발자가 너무 많은 시간과 코드를 소비한다는 점이다.

더 어려운 문제는 객체지향 애플리케이션답게 정교한 객체 모델링을 할수록 패러다임의 불일치 문제가 더 커진다는 점이다. 그리고 이 틈을 메우기 위해 개발자가 소모해야 하는 비용도 점점 더 많아진다. 결국, 객체 모델링은 힘을 잃고 점점 데이터 중심의 모델로 변해간다.

자바 진영에서는 오랜 기간 이 문제에 대한 숙제를 안고 있었고, 패러다임의 불일치 문제를 해결하기 위해 많은 노력을 기울여왔다. 그리고 그 결과물이 바로 JPA다. JPA는 패러다임의 불일치 문제를 해결해주고 정교한 객체 모델링을 유지하게 도와준다.

지금까지 패러다임의 불일치 문제를 설명하면서 JPA를 문제 해결 위주로 간단히 살펴보았다.

</aside>

1.3 JPA란 무엇인가?

  • Java Persistence API 즉, 자바 표준 API로서 JVM 위에서 내부적으로 JDBC API를 사용하여 객체와 관계형 데이터베이스를 매핑해 주는 ORM 프레임워크 입니다.

1.3.1 JPA 소개

1.3.2 왜 JPA를 사용해야 하는가?

  • 생산성
    • 반복적인 CRUD용 SQL을 작성하지 않아도 된다.
  • 유지보수
    • 개발자가 작성해야 했던 SQL과 JDBC API 코드를 JPA가 대신 처리해주므로 유지보수해야 하는 코드 수가 줄어든다
  • 패러다임 불일치 해결
    • 상속과 연관관계 객체 그래프 탐색, 객체 비교하기와 같은 패러다임 불일치 문제를 해결해준다
  • 성능
    • JPA의 캐시로 성능이 향상된다.
  • 데이터 접근 추상와 벤더 독립성
  • 표준
  • JPA는 자바 진영의 ORM 기술 표준이다

1.4 정리

Q&A - ORM에 대한 궁금증과 오해

반응형