3.스프링 데이터 전체구조
Spring Data 프로젝트의 전체 구조를 도식화하면 다음과 같음

1. Spring Data Commons
Spring Data 프로젝트의 핵심 모듈, 관계형 / 비관계형 데이터베이스를 활용하여 개발하기 위해 필요한 핵심 인터페이스 및 부가 API를 제공
2. Spring Data Submodule
데이터베이스에 접근하기 위한 기술(JDBC, ORM) 및 특정 DBMS를 활용하여 데이터베이스를 활용하기 위한 개별적인 솔루션들을 제공하는 Spring Data 프로젝트의 하위 모듈
대부분 Spring Data Commons에서 제공하는 기본 인터페이스인 Repository, CrudRepository를 상속 받은 하위 인터페이스들을 가지고 있음
2-1. Spring Data JPA
ORM 기반의 JPA 솔루션을 활용하는 프로젝트에서 사용할 수 있는 모듈
Spring Data JPA 프로젝트의 경우 CrudRepository인터페이스를 상속받은 JpaRepository를 가지고 있음
기본적인 입출력 기능은 CrudRepository에 정의되어 있으며,
그 외 JPA 자체 특징을 가진 기능은 JpaRepository에 추가 정의되어 있음
→ Java의 상속(extends)이 활용된 케이스
3. 개발자가 해야할 일은?(For Developer)
개발자가 현재 개발 중인 프로젝트에서 Spring Data를 활용하기 위해서는 다음의 단계를 거침
- 프로젝트에서 활용 중인 DBMS 벤더 및 데이터 접근 방식(JDBC or ORM)에 맞는 적절한 하위 모듈 선택
→ JPA를 활용할 경우, spring initializr에서 Spring Data JPA 의존성 선택 - 하위 모듈에서 제공하는 인터페이스를 활용하여 기능 구현에 활용
public interface OwnerRepository extends JpaRepository<Owner, Long> {
// ...
}4. 스프링 데이터 프로젝트 요약
스프링 데이터 프로젝트는 각 DBMS 벤더나 데이터 관리 방법론의 특성에 따라 각각 추상화된 서로 다른 하위 프로젝트들로 구성됨
개발자는 현재 개발 중인 프로젝트에서 요구되는 적절한 모듈에 맞는 의존성을 선택하여 활용하면,
각 DBMS에 종속된 코드를 직접 작성하지 않고도 다양한 DBMS 및 DB 접근 방식에 따른 서로 다른 코드를 빠르고 간편하게 구현할 수 있음
4-1. 각 DBMS 벤더 or 데이터 관리 방법론의 특성에 따른 하위 프로젝트 분류
Spring Data JDBC
스프링 기반으로 추상화된 JDBC
Spring Data JPA
스프링 기반으로 추상화된 JPA
Spring Data MongoDB
스프링 기반으로 추상화된 NoSQL DB
Spring Data for Apache Cassandra
스프링 기반으로 추상화된 분산형 NoSQL DB
그 외 다른 프로젝트.. 등