Spring Boot & JPA

2.4. Repository 구현

backend 따라쟁이 2024. 12. 29. 23:20

1. Repository란?

Repository는 데이터베이스와 상호작용을 담당하는 계층입니다. JPA에서는 JpaRepository 인터페이스를 통해 간단히 CRUD(Create, Read, Update, Delete) 기능을 구현할 수 있습니다. 이를 사용하면 SQL 쿼리를 직접 작성하지 않고도 데이터를 삽입, 조회, 수정, 삭제할 수 있습니다.

Repository 계층은 **엔티티(Entity)**와 데이터베이스를 연결하며, 비즈니스 로직(Service 계층)에서 호출되어 데이터를 처리하는 데 사용됩니다.


2. SamTableRepository 작성

SamTableRepository는 SamTable 엔티티와 매핑된 데이터베이스 테이블 sam_table에 접근하기 위해 생성되었습니다.

코드 구현

구성 설명

  • JpaRepository<SamTable, Integer>:
    • SamTable: 엔티티 클래스.
    • Integer: SamTable 엔티티의 기본 키(Primary Key) 타입.
  • @Repository:
    • Spring에서 이 인터페이스가 데이터 접근 계층임을 나타냅니다.
      (Spring Data JPA에서는 생략해도 자동으로 처리됩니다.)

3. JpaRepository의 기본 메서드

Spring Data JPA는 JpaRepository 인터페이스를 통해 다음과 같은 기본 메서드를 제공합니다:

메서드설명

save(Entity entity) 데이터를 삽입하거나 업데이트합니다.
findById(ID id) 기본 키를 이용해 데이터를 조회합니다.
findAll() 모든 데이터를 조회합니다.
deleteById(ID id) 기본 키를 이용해 데이터를 삭제합니다.
existsById(ID id) 해당 키가 존재하는지 확인합니다.
count() 테이블의 전체 데이터 개수를 반환합니다.

예제 사용

  • 데이터 저장

  • 데이터 조회

  • 데이터 삭제


4. 커스텀 쿼리 추가

기본 CRUD 외에도 특정 조건으로 데이터를 조회하거나, 추가적인 데이터베이스 연산이 필요한 경우 커스텀 메서드를 작성할 수 있습니다.

메서드 이름 기반 쿼리

Spring Data JPA는 메서드 이름을 기반으로 SQL 쿼리를 자동 생성합니다.

예를 들어, value 컬럼에서 특정 키워드를 포함한 데이터를 검색하려면 다음과 같이 작성합니다:

사용 예제

JPQL(Java Persistence Query Language)

복잡한 쿼리가 필요한 경우, @Query 어노테이션을 사용하여 JPQL 또는 네이티브 SQL 쿼리를 작성할 수 있습니다:


5. Repository와 데이터 연동 흐름

Repository는 엔티티와 데이터베이스를 연결하는 역할을 하며, 비즈니스 로직(Service 계층)에서 호출되어 데이터를 처리합니다.

연동 흐름

  1. 컨트롤러 → 서비스 계층 → Repository
    • 컨트롤러는 클라이언트 요청을 받아 비즈니스 로직을 실행합니다.
    • 서비스 계층은 Repository를 호출하여 데이터베이스와 상호작용합니다.
  2. Repository → 데이터베이스
    • Repository는 JPA가 생성한 SQL을 실행하여 데이터베이스와 소통합니다.

6. 테스트

Spring Boot 애플리케이션을 실행하고, Postman이나 다른 클라이언트를 통해 Repository가 제대로 동작하는지 확인합니다.

예제: 데이터 삽입

Postman에서 다음과 같은 요청을 보냅니다:

  • Endpoint: POST /api/data
  • Request Body:

  • 데이터가 성공적으로 저장되었는지 확인합니다: 
  • SELECT * FROM sam_table;

7. 결론

SamTableRepository는 JPA의 강력한 데이터 접근 기능을 활용하여 간단한 코드로 데이터베이스 연산을 처리할 수 있도록 설계되었습니다. Spring Data JPA의 기본 메서드와 커스텀 쿼리를 결합하여 다양한 데이터 처리 요구사항을 충족할 수 있습니다.

다음 섹션에서는 서비스 계층을 작성하여 비즈니스 로직을 구현하는 방법을 알아보겠습니다.