2.4. Repository 구현
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에서는 생략해도 자동으로 처리됩니다.)
- Spring에서 이 인터페이스가 데이터 접근 계층임을 나타냅니다.
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 계층)에서 호출되어 데이터를 처리합니다.
연동 흐름
- 컨트롤러 → 서비스 계층 → Repository
- 컨트롤러는 클라이언트 요청을 받아 비즈니스 로직을 실행합니다.
- 서비스 계층은 Repository를 호출하여 데이터베이스와 상호작용합니다.
- 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의 기본 메서드와 커스텀 쿼리를 결합하여 다양한 데이터 처리 요구사항을 충족할 수 있습니다.
다음 섹션에서는 서비스 계층을 작성하여 비즈니스 로직을 구현하는 방법을 알아보겠습니다.