Spring Data Project

bp.chys·2020년 5월 25일
0

Spring Framework

목록 보기
10/15

Spring Data

  • 애플리케이션에서 여러 종류의 데이터베이스(RDBMS, MongoDB..)에 접근할 수 있는 일관되고 추상화된 인터페이스를 제공하는 Spring Project
  • 가장 추상화된 모듈로 Spring-Data-Commons가 있고 그 안에는 CrudRepositoryPagingAndSortingRepository를 제공한다.
  • 사용하는 데이터베이스 ORM 기술에 따라 더 특화된 인터페이스를 제공하기도 한다.
    • JpaRepository, CassandraRepository, MongoRepository etc..

CrudRepository

  • CrudRepository에 내장된 대표적인 기본 메서드는 다음과 같다.
public interface CrudRepository<T, ID> extends Repository<T, ID> {

  <S extends T> S save(S entity);      

  Optional<T> findById(ID primaryKey); 

  Iterable<T> findAll();               

  long count();                        

  void delete(T entity);               

  boolean existsById(ID primaryKey);   

  // … more functionality omitted.
}

PagingAndSortingRepository

  • 기본적으로 CrudRepository를 상속하고 Sort나 Pageable 객체를 인자로 받는 메서드가 추가된다.
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {

  Iterable<T> findAll(Sort sort);

  Page<T> findAll(Pageable pageable);
}

Spring Data를 사용하지 않는다면?

  • Spring-Data-JPA를 사용하여 개발하는 상황이라면 아래 그림에서 초록색 플로우 구조를 상상할 수 있다.
  • 하지만 Spring Data를 사용하지 않는다면 그 다음 추상화 레벨인 Raw JPA를 사용하여 데이터베이스와 통신하게 된다.
  • 이때는 EntityManager 빈을 사용해서 레파지토리의 내부를 직접 구현해야한다.
  • 이 경우 빈번하게 사용하는 Crud 메서드 조차 직접 구현을 해야하고, Spring Data의 강력한 기능인 자동화된 Named Query를 사용할 수 없다.
  • 또한 자동으로 created, updated를 기록해주는 auditing 기능도 역시 지원받을 수 없다.

결론

Spring-Data는 Spring의 핵심 기능 중 하나인 PSA(Portable Service Abstraction)를 잘 보여주는 프로젝트인 듯하다. Spring-Data가 제공하는 추상화된 레파지토리는 일종의 어댑터 역할을 함으로써 실제 사용하는 데이터베이스가 얼마든지 바뀌어도 공통 API로 쉽게 개발할 수 있도록 도와준다.

Spring으로 개발을 한다면 개발자의 편의성과 생산성을 높여주는 Spring-Data를 안쓸이유가 없는 것 같다. 실무에서는 Spring Data JPA를 많이 쓰지만, 최근 출시된 Spring Data JDBC도 단순함과 직관성이 강조된다는 측면에서 주목해볼 만한 기술인 것 같다.

profile
하루에 한걸음씩, 꾸준히

0개의 댓글