JPA에 대해서 이해해보기 (Spring Data JPA)

chisae·2024년 3월 1일

끄적이기

목록 보기
10/12
post-thumbnail

안녕하세요, 오늘은 JPA에 대해서 자세히 이해해보는 시간을 가지고자 합니다, JPA 같은 경우에는 Spring으로 백엔드 개발을 자주 하시는 분들이라면 무조건 한 번쯤 접해보실 수 있는 기술이며, 저 역시 JPA를 통해서 개발을 하지만 정확하게 JPA가 무엇인지, JPA가 어떻게 동작되는지, JPA의 장점이 무엇인지 등등 제대로 된 이해를 하고자 오늘 포스팅을 하게 됐습니다.


JPA란?

개념

JPA는 Java Persistence API 의 약자로, 자바 애플리케이션에서 관계형 데이터베이스를 사용하는 방식을 표준화한 API 입니다, 이를 통해서 개발자는 데이터베이스 작업을 보다 쉽고 효율적으로 할 수 있으머 JPA를 사용 함으로써 객체 지향 프로그래밍과 관계형 데이터베이스 간의 간격을 있는 ORM 기술을 활용할 수 있습니다.

즉, JPA는 ORM 사용을 위한 표준화된 API입니다.


ORM(Object-Relational Mapping)이란?
 : ORM은 객체와 관계형 데이터베이스 테이블 간의 매핑을 자동화해주는 기술입니다.
   이를 통해 객체 지향 프로그래밍을 사용하여 데이터베이스를 더 쉽게 관리할 수 있습니다.

사용법

  • 엔티티와 기본키
    : @Entity 어노테이션으로 표시되며, 기본 키는 @Id 어노테이션을 사용해서 지정할 수 있습니다, 기본 키는 데이터베이스 내에서 해당 엔티티의 유일한 식별자 역할을 합니다.

  • 엔티티 매니저와 영속성 컨텍스트
    : 엔티티 매니저는 JPA의 핵심 컴포넌트입니다, 엔티티와 데이터베이스 간의 상호작용을 관리하며 영속성 컨텍스트는 엔티티의 생명주기를 관리, 엔티티의 상태 변화를 추적합니다.

왜 필요한지 (장단점)

그러면 JPA는 왜 필요한 걸까요?

  • 장점
    • SQL 문제 해소
      : 개발자는 SQL 작성에 신경쓰지 않고 Method를 이용해서 데이터베이스를 조작할 수 있습니다.
    • 코드 간결성
      : 필요한 선언문이나 할당 등의 부수적인 코드가 줄어들어 코드의 가독성을 향상할 수 있습니다,
    • 객체지향적 코드 작성
      : JPA를 사용할 경우 데이터베이스 작업을 객체지향적으로 접근할 수 있습니다, 때문에 OOP의 장점이 데이터베이스 작업에도 적용될 수 있어 전체적인 개발 생산성이 증가됩니다.
    • 유지보수성
      : 매핑 정보가 클래스 내에 명시되어 있기에 ERD에 대한 의존도를 낮출 수 있으며 유지보수 및 리팩토링에 용이합니다.
    • 데이터베이스 독립성
      : JPA를 사용할 경우 특정 데이터베이스에 종속되지 않습니다, 예를 들어 MySQL에서 PostgreSQL으로 데이터베이스를 변경할 떄 JPA를 사용하면 새로운 SQL을 작성할 필요가 없습니다.
  • 단점
    • 성능 저하 및 일관성
      : 프로젝트의 규모가 크고 복잡할 경우 설계가 잘못되면 성능 저하와 일관성을 무너뜨릴 수 있습니다.
    • 복잡한 쿼리
      : 복잡하고 성능이 중요한 쿼리의 경우 JPA 만으로는 구현하기 어렵기에 결국엔 SQL을 직접 작성해야 하는 경우도 있습니다.
    • 학습 곡선
      : JPA의 개념과 사용법을 이해하고 효율적으로 사용하기 위해서는 상당한 시간이 필요로 합니다.



Spring Data JPA란?

개념

Spring Data JPA는 JPA를 기반으로 하여 데이터 접근 계층을 구현하는데 필요한 반복적인 코드를 줄이고, 데이터베이스 작업을 더욱 효율적으로 할 수 있도록 여러 편리한 기능을 제공하는 기술입니다, Hibernate같이 JPA의 구현체를 직접 다루는 것이 아닌, 구현체들(JPA 기술)을 더 쉽게 사용할 수 있도록 추상화 시킨 기술입니다.

즉, Spring Data JPA는 Spring에서 JPA를 편리하게 사용할 수 있도록 하는 기술입니다.


사용법

Member 클래스는 회원 정보를 나타내며, JPA 엔티티로 사용됩니다.

MemberRepository 는 Spring Data JPA의 JpaRepository 인터페이스를 확장하여 데이터베이스와의 상호작용을 위한 메서드들을 자동으로 사용할 수 있습니다.

MemberService는 비즈니스 로직을 처리하는 서비스 계층이며, MemberRepository를 사용하여 데이터베이스 작업을 수행할 수 있습니다.

이렇게 해서 위 예제들은 Spring Data JPA를 사용하여 간단한 회원 관리 시스템 을 구현하는 방법으로 여러에는 에니팉 클래스 정의, 레포지토리 인터페이스 생성, 서비스 게층을 통한 데이터베이스 작업 수행과 관련된 내용을 확인할 수 있었습니다.



Spring Data JPA와 JPA의 차이점

자 그러면 Spring Data JPA 와 그냥 JPA 는 어떠한 차이가 있을까요?

차이점

JPA는 앞서, Java Persistence API의 약자로 ORM 사용을 위한 표준화된 API라고 말씀드렸습니다, 그리고 Spring Data JPA는 Spring Freamework의 일부로, JPA를 기반으로 하는 저장소 계층에 대한 접근을 단순화합니다, 즉 JPA 기반 애플리케이션 개발을 보다 간편하게 만들어주는 기술입니다.

정리하면 아래와 같습니다.

  • JPA
    • 자바 애플리케이션에서 관계형 DB 작업을 관리하는 표준 API를 제공함
    • ORM을 사용하여 객체 지향 모델과 관계형 DB를 매핑함
    • 플랫폼 독립적이며, 여러 JPA 구현체(Hibernate, EclipseLink 등)을 사용할 수 있음
  • Spring Data JPA
    • Spring Framework의 일부로 JPA를 기반으로 하는 저장소 계층에 대한 접근을 단순화함
    • JPA를 사용하는 것보다 개발 생산성을 높여주는 편리한 기능들(repository support, 쿼리 메서드, pagination)을 제공함
    • Spring Data JPA는 JPA를 포함하는 더 넓은 Spring Data 프로젝트의 일부임



정리

오늘은 이렇게 해서 Spring Data JPA와 JPA가 무엇인지 그리고 이 두가지의 차이점이 무엇인지에 대해서 알아봤습니다, 마지막으로 이 두가지에 대해서 정리를 해보며 오늘 포스팅을 마치도록 하겠습니다.

개념 요약

  • JPA (Java Persistence API)

    • 관계형 데이터베이스와 객체 지향 프로그래밍 사이의 간격을 좁히는 Java 표준 ORM 기술입니다.
    • SQL 작성 부담을 줄이고, 유지보수와 데이터베이스 독립성을 향상시킵니다.
  • Spring Data JPA

    • JPA 위에 구축된 Spring 모듈로, 데이터 접근 계층의 반복 코드를 줄이고 개발 생산성을 높입니다.
    • 자동 쿼리 생성, 리포지토리 추상화 등을 통해 데이터베이스 작업을 간소화합니다.

차이점

  • JPA는 Java의 데이터베이스 작업을 위한 표준 API이며,
  • Spring Data JPA는 이를 Spring 환경에서 보다 쉽게 사용할 수 있게 해주는 추상화된 기술입니다.

이렇게 JPA는 ORM을 위한 표준 API를 제공하는 반면, Spring Data JPA는 이를 활용하여 개발자의 생산성을 더욱 향상시키는 Spring의 방법론입니다.

감사합니다.

profile
초보 개발자

0개의 댓글