본문 바로가기

Spring/자바 ORM 표준 JPA 프로그래밍

01. JPA 소개

💡 본 게시글은 김영한님의 인프런(Inflearn) 강의 자바 ORM 표준 JPA 프로그래밍 - 기본편에 대해 공부하고, 정리한 내용입니다.


01. SQL 중심적인 개발의 문제점

  1. CRUD 쿼리의 반복 작성 문제:
    • 기존 SQL 중심의 개발에서는 CRUD(Create, Read, Update, Delete) 작업을 위한 SQL 쿼리를 반복 작성해야 했습니다. JPA는 이를 자동으로 생성해 주어 개발자의 작업을 간소화합니다.
  2. 패러다임 불일치 해결:
    • 상속: 객체 지향에서는 상속 관계가 명확하지만, RDB에서는 슈퍼타입-서브타입 관계로 간접적으로 표현됩니다. JPA는 객체 상속 구조를 데이터베이스 테이블에 맞게 매핑해줍니다.

    • 연관관계: 객체 지향에서는 객체 간 참조로 관계를 맺지만, RDB에서는 외래 키를 사용합니다. JPA는 객체 참조를 외래 키로 변환하고, 조회 시 이를 다시 객체 참조로 변환합니다.
    • 객체 그래프 탐색: SQL에서는 특정 객체까지만 조회가 가능하지만, JPA는 지연 로딩을 통해 실제 객체를 사용할 때까지 데이터를 가져오지 않음으로써 필요한 시점에 객체 그래프를 탐색할 수 있습니다.
    • 비교: 데이터베이스는 기본 키로 로우를 구분하고, 객체는 동일성과 동등성으로 비교합니다. JPA는 동일한 트랜잭션 내에서 동일한 객체를 보장하여 이러한 차이를 해결합니다.

02. JPA 사용의 장점

  • 생산성 향상: 직접 SQL을 작성하지 않고도 데이터베이스와 상호작용할 수 있어 개발자의 생산성을 높입니다.
  • 유지보수 용이: 데이터베이스 구조 변경 시 JPA 매핑만 수정하면 되므로, 유지보수가 용이합니다.
  • 객체 지향적 설계 지원: 객체 지향 설계를 데이터베이스에 반영할 수 있습니다.

 

03. JPA를 잘 사용하기 위한 방법

  • JPA 매핑 정확히 이해하기: 데이터베이스와의 매핑을 정확히 이해하고 설계해야 합니다.
  • 성능 최적화: 지연 로딩, 배치 쿼리 등을 활용해 성능을 최적화합니다.
  • 트랜잭션 관리: 동일한 트랜잭션 내에서 동일한 객체를 사용하여 데이터 일관성을 유지합니다.

JPA는 객체 지향 모델과 관계형 데이터베이스 모델 간의 불일치를 해소하여, 보다 직관적이고 유지보수하기 쉬운 애플리케이션 개발을 가능하게 합니다.


04. JPA란 무엇인가?

  • Java Persistence API: JPA는 자바 진영의 ORM 기술 표준 명세로, Java 애플리케이션에서 객체를 관계형 데이터베이스에 매핑하기 위한 API입니다.
  • ORM(Object-Relational Mapping): ORM은 객체 지향 프로그래밍의 객체와 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리해주는 프레임워크입니다. 객체는 객체대로, 데이터베이스는 데이터베이스대로 설계하여 중간에서 이들을 연결합니다. 대부분의 대중적인 프로그래밍 언어에는 이러한 ORM 기술이 존재합니다.

05. JPA의 동작 방식

JPA는 Java 애플리케이션과 JDBC 사이에서 동작합니다. JPA의 동작 과정을 그림으로 설명하면 다음과 같습니다:

  1. Java 애플리케이션이 JPA API를 호출합니다.
  2. JPA는 JDBC API를 통해 SQL을 생성하고 실행합니다.
  3. 생성된 SQL은 데이터베이스에서 실행되고, 그 결과가 JDBC를 통해 JPA로 전달됩니다.

 이 과정을 통해 JPA는 저장과 조회 작업을 수행합니다. 특히, JPA의 가장 중요한 역할은 객체 지향 프로그래밍과 관계형 데이터베이스 간의 패러다임 불일치를 해결하는 것입니다.

(1) JPA 동작 - 저장

 

(2) JPA 동작 - 조회


06. JPA 구현체

JPA는 자바 ORM 기술에 대한 표준 명세(인터페이스 모음)로, 이를 사용하려면 구현체가 필요합니다. 다양한 JPA 구현체 중에서 Hibernate가 가장 널리 사용됩니다.


07. JPA를 사용하는 이유

  1. 생산성: JPA는 객체에 맞는 SQL(DDL, CRUD)을 자동으로 생성하여 개발자의 작업을 간소화합니다.
  2. 유지보수: JPA는 데이터베이스와의 상호작용을 추상화하여, 데이터베이스 구조 변경 시에도 최소한의 수정으로 애플리케이션을 유지보수할 수 있습니다.
  3. 패러다임 불일치 해결: 상속, 연관관계, 객체 그래프 탐색, 비교 등 객체 지향과 관계형 데이터베이스 간의 불일치 문제를 해결합니다.
  4. 성능: JPA는 애플리케이션과 데이터베이스 사이에 계층을 두어 버퍼링과 캐시 기능을 지원합니다. 이를 통해 데이터 접근의 성능을 향상시킵니다.
  5. 데이터 접근 추상화와 벤더 독립성: JPA는 특정 데이터베이스 기술에 종속되지 않도록 합니다. 이는 애플리케이션이 다양한 데이터베이스 환경에서 독립적으로 작동할 수 있게 합니다.
  6. 표준 준수: JPA는 자바 표준 API를 사용하므로, 특정 구현체에 종속되지 않습니다. 이를 통해 개발자는 다양한 JPA 구현체 간의 전환이 용이합니다.

JPA는 이와 같은 이유로 생산성 향상, 유지보수 용이성, 성능 최적화 등에서 큰 이점을 제공합니다.

'Spring > 자바 ORM 표준 JPA 프로그래밍' 카테고리의 다른 글

06. 다양한 연관관계 매핑  (1) 2024.09.08
05. 연관관계 매핑 기초  (0) 2024.09.08
04. 엔티티 매핑  (1) 2024.09.08
03. 영속성 관리 - 내부 동작 방식  (0) 2024.08.11
02. JPA 시작하기  (0) 2024.08.11