본문 바로가기
Spring Framework/JPA

JPA 소개

by 도쿠니 2022. 6. 10.

📗 JPA

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

반복되는 작업들

  • 반복되는 CRUD 코드 작성
    • JAVA 애플리케이션은 JDBC API를 사용해 DB와 통신하며 데이터를 CRUD 합니다.
    • 개발자는 애플리케이션과 DB 사이에서 SQL 및 JDBC API 코드를 작성해야 합니다.
    • 연결해야하는 테이블 및 데이터가 늘어날수록 반복적인 CRUD 코드들을 계속해서 반복해서 작성해주어야합니다.
  • SQL에 의존적인 개발
    • 엔티티에 변경점이 발생하면 관련된 모든 SQL을 수정해야합니다.
      • DAO를 열어서 어떤 SQL이 실행되는지 직접 확인하고 수정해야합니다.
      • 이와 관련된 자바 CRUD 코드들도 수정을 해주어야합니다.
      • 이러한 변경이 잦아지면 변경할 코드도 많아지고 관리하기가 어렵습니다.

패러다임의 불일치

  • 자바와 관계형 데이터베이스 간의 패러다임 불일치
    • 자바와 RDB 간의 차이점이 존재
      • 자바는 객체, RDB는 테이블을 기준으로 데이터를 관리합니다.
      • 상속, 연관관계, 객체 그래프 탐색 , 비교 등의 차이점을 가지고 있습니다.
      • 서로 연결해서 사용하려면 데이터를 변환해가며 사용해야합니다.
    • 개발자가 둘 사이에서 발생하는 차이점을 해결
      • 개발자는 차이점을 고려하여 데이터를 변환해주어야 합니다.
      • 개발자가 비즈니스 로직을 개발하기보다는 SQL 매퍼가 되어버리는 기이한 현상이 발생합니다.

😃 JPA란?

ORM

  • 위에서 다룬 패러다임의 불일치를 해결하고자 나온 것이 Object-Relational Mapping 입니다.
  • ORM이란 객체와 관계형 데이터베이스를 매핑하는 것을 의미합니다.
    • ORM 프레임워크가 개발자 대신 객체와 테이블을 매핑하여 패러다임의 불일치 문제를 해결해줍니다.
    • 개발자는 직접 SQL을 작성할 필요없이 자바 컬렉션을 사용하는 것처럼 객체를 사용하면 ORM 프레임워크가 알아서 SQL을 생성해 데이터베이스와 연결해주고 객체로 변환까지 해줍니다.
    • 개발자는 ORM프레임워크에 둘을 어떻게 매핑해야하는지만 알려주면 됩니다.

JPA

  • 자바 ORM 기술에 대한 API 표준 명세입니다.
  • JPA를 사용하려면 JPA를 구현한 ORM 프레임워크를 선택해야합니다.
    • Hibernate
      • 가장 많이 사용되고 있습니다.
    • EclipseLink
    • DataNucleus

JPA를 사용해야하는 이유

  • 생산성
    • 데이터베이스를 자바 컬렉션 사용하듯이 사용할 수 있습니다.
    • JPA가 개발자 대신 SQL을 작성해주고 JDBC API를 사용해 줍니다.
    • 반복되는 코드 및 작업을 줄일 수 있습니다.
  • 유지보수
    • SQL을 직접 다루면 엔티티에 필드 하나만 추가하여도 수많은 코드 변경을 해야하지만 JPA가 대신 처리해주므로 유지보수해야할 코드 수가 줄어듭니다.
  • 패러다임 불일치 해결
    • 상속, 연관관계, 객체 그래프 탐색, 비교 등과 같은 관계형 데이터베이스와 객체 지향 프로그래밍 간의 패러다임 불일치문제를 해결해줍니다.
  • 성능
    • 애플리케이션과 데이터베이스 사이에서 다양한 성능 최적화 기회를 제공합니다.
    • 예를들어, 직접 JDBC API를 사용하여 동일한 데이터를 두번 조회한다면 데이터베이스와 두번 통신하지만 JPA는 한번 조회하면 조회한 객체를 재사용합니다.
  • 데이터 접근 추상화와 벤더 독립성
    • 관계형 데이터베이스는 같은 기능도 벤더마다 사용법이 다른 경우가 많습니다.
    • JPA는 애플리케이션과 데이터베이스 사이에 추상화된 데이터 접근 계층을 제공해 애플리케이션이 특정 데이터베이스 기술에 종속되지 않도록 도와줍니다.
    • 데이터베이스를 변경하더라도 JPA에게 다른 데이터베이스를 사용한다고 알려주기만 하면 됩니다.
  • 표준
    • 자바 진영의 ORM 표준 기술이기 때문에 다른 구현 기술로 손쉽게 변경할 수 있습니다.

'Spring Framework > JPA' 카테고리의 다른 글

Transaction (트랜잭션)  (0) 2022.06.10
엔티티 매핑  (0) 2022.06.10
영속성 관리  (0) 2022.06.10
데이터베이스 방언 (Dialect)  (0) 2022.06.10
Test용 H2 DB application.yml 설정  (0) 2022.06.09

댓글