51DAYS) [Spring MVC] JPA 기반 데이터 액세스 계층 - Spring Data JPA를 통한 데이터 액세스 계층 구현

nacSeo (낙서)·2022년 12월 29일
0

◉ 학습목표

1. Spring Data JPA가 무엇인지 이해할 수 있다.
2. Spring Data JPA를 이용해 데이터를 저장, 수정, 조회, 삭제 작업을 할 수 있다.
3. JPA의 JPQL을 Spring Data JPA에서 사용할 수 있다.
  1. Spring Data JPA를 통한 데이터 액세스 계층 구현

⦿ 학습내용

☞ JPA 🆚 Hibernate ORM 🆚 Spring Data JPA

✔︎ JPA

  • 엔터프라이즈 Java 애플리케이션에서 관계형 데이터베이스를 사용하기 위해 정해놓은 표준 스펙(사양 또는 명세, Specifiation)
  • '이 기술은 무엇이고, 이 기술은 이렇게 구현해서 사용하면 돼'라고 적어 놓은 기술 명세

✔︎ Hibernate ORM

  • JPA라는 표준 스펙을 구현한 구현체
  • 실제로 우리가 사용할 수 있는 API

✔︎ Spring Data JPA

  • JPA 스펙을 구현한 구현체의 API(일반적으로 Hibernate ORM)를 좀 더 쉽게 사용할 수 있도록 해주는 모듈
  • Spring Data JPA를 사용하여 데이터 액세스 계층을 구현

☞ Spring Data JPA

✔︎ Spring Data 패밀리 기술 중 하나로써, JPA 기반 데이터 액세스 기술을 좀 더 쉽게 사용하게 해줌
✔︎ Spring에서는 애플리케이션이 특정 기술에 강하게 결합되지 않도록 Spring이 추구하는 PSA(일관된 서비스 추상화)를 통해 개발자는 일관된 코드 구현 방식을 유지하고, 기술의 변경이 필요할 때 최소한의 변경만을 하도록 지원

☞ 엔티티 클래스 정의

✔︎ enum 필드 추가

☞ 리포지토리(Repository) 인터페이스 구현

✔︎ JpaRepository를 상속하면 CrudRepository 기능을 포함한 JPA에 특화된 확장 기능들 사용 가능
✔︎ JPQL

  • JPA에서 지원하는 객체 지향 쿼리
  • 데이터베이스의 테이블을 대상으로 조회 작업을 진행 ❌
  • 엔티티 클래스의 객체를 대상으로 객체 조회
  • JPQL의 문법을 사용해서 객체를 조회하면, JPA가 내부적으로 JPQL을 분석해서 적절한 SQL을 만든 후 데이터베이스 조회
  • 조회한 결과를 엔티티 객체로 매핑한 뒤 반환
    🚨 주의 ❗️
    - Spring Data JDBC@Query 애너테이션 패키지 경로
    : import org.springframework.data.jdbc.repository.query.Query
    - Spring Data JPA@Query 애너테이션 패키지 경로
    : import org.springframework.data.jpa.repository.Query

☞ 서비스(Service) 클래스 구현

✔︎ Spring에서는 애플리케이션이 특정 기술에 강하게 결합되지 않도록 Spring이 추구하는 PSA(일관된 서비스 추상화)를 통해 개발자는 일관된 코드 구현 방식을 유지하고, 기술의 변경이 필요할 때 최소한의 변경만을 하도록 지원

◉ 느낀 점

☞ 개념을 학습하고 실습을 진행하는데 앞서 배운 연관 관계 매핑을 이용하는 것이 쉽지만은 않았다. 그렇지만 JPA의 가장 핵심적인 부분이기에 반복해서 학습을 진행해야겠다.

JDBC, Spring Data JDBC, Hibernate ORM, JPA, Spring Data JPA 등 비슷해보이는 내용들을 많이 접하면서 헷갈릴 수도 있었는데 학습 내용마다 조금씩 정리를 해줘서 공부하는 데에 수월한 부분이 있었던 것 같다.
(Spring Data JDBC와 Spring Data JPA는 Spring Data라는 패밀리 그룹에 포함되어 있고, Spring Data라는 추상화된 데이터 액세스 접근 방식으로 구성되어 있음, Spring Data JPA는 JPA 기반의 데이터 액세스 기술을 좀 더 쉽게 사용할 수 있게 해주기 때문에 데이터 액세스 계층 구현에 있어서 개발 시간을 좀 더 단축시켜줄 수 있다 등등 ...)

실습을 진행하면서 마음대로 안되는 부분도 많았지만, 많은 시간과 노력을 통해 결국 해결해냈다..! 그렇지만 아직 내 것으로 다 못만든 느낌... 주말을 이용해서 다시 한 번 처음부터 시도해봐야겠다.

◉ 내일의 키워드

・ 트랜잭션 개요
・ Spring Framework에서의 트랜잭션 처리
profile
백엔드 개발자 김창하입니다 🙇‍♂️

0개의 댓글