-
Spring Data 분석하기 - 1편 소개Java, Kotlin, Spring 2022. 8. 11. 04:48
Spring Data
https://spring.io/projects/spring-data
기본 데이터 저장소의 특수 특성을 유지하면서 데이터 액세스를 위한 친숙하고 일관된 Spring 기반 프로그래밍 모델 제공
서버 애플리케이션은 데이터저장소에 접근하여 데이터를 가져오는 일과, 가져온 데이터를 처리하는 일을 가장 많이 하게 된다.
가장 많이 하는 일에 코드 상 통일성과 규칙이 없다면 애플리케이션은 관리하기가 매우 힘들어진다. 스프링 데이터는 이 두가지 일에 통일성과 규칙을 부여해준다.
서버 애플리케이션이 일을 처리하는 방식을 살펴보면 다음과 같이 요약할 수 있을 것 같다.
Client로부터 요청을 받음 -> 데이터저장소로부터 데이터를 가져오기 -> 데이터를 가공하기 -> Client에 응답을 보냄
스프링 데이터는 데이터를 가져오는 부분을 Repository 영역이 담당하도록 강제하여 데이터를 가공하는 Service 영역과 분리되도록 한다.
사람들은 스프링 데이터의 장점에 대하여 이야기할 때, Spring data JPA가 제공하는 인터페이스를 통한 소스코드의 자동 생성 기능을 자주 언급하곤 한다. (그래서 복잡한 쿼리가 사용되는 프로젝트에서는 굳이 Spring data JPA를 채택하지 않으려는 모습을 보이기도 한다.)
물론 멋진 기능이지만, 필자의 생각은 스프링 데이터의 가장 큰 장점은 비즈니스 로직과 데이터 로직을 완전하게 분리하게 한다는 것이다.
개발자도 모르는 사이에 객체지향 개발 방법론이 강조하는 결합도는 낮추고, 응집도를 높이는 설계로 이끌어준다.
주요 모듈
- Spring Data commons : 모든 Spring Data 모듈을 뒷받침하는 핵심 Spring 개념
- Spring Data JDBC - JDBC를 위한 Spring Data 저장소 지원
- Spring Data JPA - JPA에 대한 Spring Data 저장소 지원
- Spring Data MongoDB - Spring 기반, MongoDB용 객체 문서 지원 및 리포지토리
- Spring Data Redis - Spring 기반 Redis 구성 및 액세스 용이성 확보
- ...
커뮤니티 모듈
- Spring Data Couchbase - Couchbase용 Spring 데이터 모듈
- Spring Data DynamoDB - DynamoDB용 Spring 데이터 모듈
- Spring Data Elasticsearch - Elasticsearch용 Spring 데이터 모듈
- Spring Data Neo4j - Spring 기반, Neo4j용 객체 그래프 지원 및 리포지토리
- ...
인큐베이션 모듈
- Spring Data R2DBC - R2DBC에 대한 Spring 데이터 지원
Spring Data Commons
스프링 데이터는 많은 하위 모듈을 포함하고 있어서 우산형 프로젝트라고 부른다.
여러 하위 모듈은 Spring Data Commons라는 공통 모듈을 모두 사용한다. 각각의 하위모듈은 저마다의 특성을 해당 프로젝트에서 구현하고 있다.
위 그림에서 볼 수 있듯이 여러 모듈들은 CrudRepository, PagingAndSortingRepository 등을 사용할 수 있다. 이외에도 몇 가지 더 있다.
Spring Data Commons Github 로 이동하여 직접 소스코드를 보는 것을 추천한다. 공통 Repository 모듈이 어떻게 작성되어 있는지 알 수 있다.
아래 2가지 그림을 보면서 각각의 하위 모듈이 어떻게 Spring Data Commons를 사용하고 있는지 보도록 하자.
그림은 IntelliJ에서 클래스 구조를 그림으로 표현했다.
Spring Data Reactive Mongodb
Spring Data JPA
빨간색 네모 표시한 부분을 잘 보면, Spring Data Reactive Mongodb와 Spring Data JPA가 공통으로 사용하고 있는 인터페이스가 보인다.
인터페이스를 공용으로 사용하고 있기 때문에, mongodb에서 mysql로 데이터베이스가 바뀌더라도 비즈니스 로직은 변경될 필요가 없다.
아래는 Spring Data Commons가 제공하는 공통 인터페이스 목록이다.
Spring Data Commons
- Indexed : spring-framework/Indexed.java
- Repository : spring-data-commons/Repository.java
- NoRepositoryBean : spring-data-commons/NoRepositoryBean.java
- CrudRepository : spring-data-commons/CrudRepository.java
- PagingAndSortingRepository : spring-data-commons/PagingAndSortingRepository.java
- ReactiveCrudRepository : spring-data-commons/ReactiveCrudRepository.java
- ...
Spring Data 하위 모듈 도입 절차
스프링 데이터의 특정 하위 모듈을 도입하고자 할 때, 추천하는 방식이다.
- 도입할 Spring data 하위 모듈이 사용하고 있는 spring data commons 패키지를 학습한다.
- 도입할 Spring data 하위 모듈 패키지를 학습한다.
또한 비즈니스 로직 영역에서 Repository를 호출할 때 하위 모듈에만 정의된 특정 Repository를 그대로 사용하는 것 보다는 Spring Data Commons에 정의된 공통 인터페이스 또는 더 많은 기능이 필요할 경우 확장된 Custom Repository를 정의하여 사용하는 것이 좋아보인다.
이유는 비즈니스 로직 영역에서는 Spring Data 특정 하위 모듈에 대한 의존성을 완전히 떨어트려놓으면, 하위 모듈을 바꿔야 할 경우 비즈니스 로직 영역은 전혀 손댈 필요가 없기 때문이다.
반응형'Java, Kotlin, Spring' 카테고리의 다른 글
Spring 6, Springboot 3.0 새로운 기능 (0) 2023.04.07 Spring 6 Http Interface (0) 2023.04.07 Spring data mongodb multiple database config 설정하기 (0) 2022.06.24 Spring Bean 스코프 (0) 2022.06.19 Java 8 주요 업그레이드 사항 (0) 2022.05.25