본문 바로가기

개발/스프링

Spring Data

Spring Data

 

Spring Data

Spring Data’s mission is to provide a familiar and consistent, Spring-based programming model for data access while still retaining the special traits of the underlying data store. It makes it easy to use data access technologies, relational and non-rela

spring.io

 

스프링에서 직접 지원하는 메인모듈과 커뮤니티 모듈이 있음

기본 모듈과 사용해보면 좋을 것 같은 모듈을 소개함

LDAP은 쓸일이 있을까? 싶은데 R2DBC랑, REST는 도입을 생각해 볼수 있을때 생각 날 것 같음

 

 

 

1. Spring Data JDBC
- 자체 ORM 없이 순수 JDBC를 기반으로 동작.

 

장점

가벼운 데이터 접근 레이어.
ORM이 필요하지 않는 간단한 애플리케이션에 적합.
초기 설정이 간단하며 빠른 속도 제공.

단점
복잡한 관계 매핑 미지원 (OneToMany, ManyToMany 등).
Join 쿼리나 Entity 간 관계를 수동으로 처리해야 함.

 

사용
간단한 CRUD 중심의 애플리케이션.
별도의 비즈니스 로직 없이 데이터 저장과 조회만 필요한 서비스.

 

@Repository
public interface UserRepository extends CrudRepository<User, Long> {
    List<User> findByName(String name);
}

@Data
@Table("users")
public class User {
    @Id
    private Long id;
    private String name;
}





2. Spring Data JPA
- JPA(Java Persistence API) 표준.

 

장점
복잡한 ORM 매핑과 강력한 쿼리 기능 제공.
JPA의 캐싱, Lazy Loading 등 고급 기능 사용 가능.

단점
초기 학습 곡선이 높음.
과도한 엔티티 관계 모델링으로 성능 문제가 발생할 수 있음.

사용
엔티티 간의 복잡한 관계 처리(OneToMany, ManyToOne).
대규모 데이터 처리와 고급 기능 사용(2차 캐싱 등).

 

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByEmail(String email);
}

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
    private String email;

    @OneToMany(mappedBy = "user")
    private List<Order> orders;
}

 



3. Spring Data LDAP (Lightweight Directory Access Protocol)

 

장점
LDAP 디렉토리와 쉽게 연동 가능.
사용자 정보 조회와 인증에 적합.

한계점
LDAP 서버 전용이며, 관계형 데이터베이스와 완전히 다름.
복잡한 데이터 쿼리에 적합하지 않음.

 

사용
사용자 인증 및 권한 관리(Active Directory와 통합).
회사 내 조직 정보를 조회하는 서비스.

 

@Repository
public interface PersonRepository extends LdapRepository<Person> {
    List<Person> findByLastName(String lastName);
}

@Data
@Entry(base = "ou=people,dc=example,dc=com")
public class Person {
    @Id
    private Name id;
    private String firstName;
    private String lastName;
}



4. Spring Data R2DBC
- R2DBC(Reactive Relational Database Connectivity)
- 리액티브 프로그래밍을 위한 비동기 데이터베이스 접근.
- 블로킹 방지로 높은 성능 제공.
- 비동기 환경에서 RDBMS 사용.

 

장점
리액티브 프로그래밍을 지원하여 비동기 요청 처리.
블록킹 없는 데이터 접근 제공.

단점
ORM 매핑은 지원하지 않으며 모든 관계를 직접 처리해야 함.
복잡한 관계형 데이터 모델에 적합하지 않음.

사용
비동기 데이터 처리가 필요한 앱(예: 채팅, 스트리밍 서비스).

채팅은 비정형이라 몽고가 나은거 같기도 하다.

스프링 웹플럭스를 사용한다면 선택지가 될거 같기도 함.

 

@Repository
public interface UserRepository extends ReactiveCrudRepository<User, Long> {
    Flux<User> findByName(String name);
}

@Data
@Table("users")
public class User {
    @Id
    private Long id;
    private String name;
}

 


5. Spring Data REST
- 다양한 Spring Data 프로젝트에 대한 REST API 추상화.
- JPA, MongoDB 등 저장소에서 자동으로 REST API를 생성.
- 페이징, 정렬, 관계형 데이터 노출 지원.

 

장점
데이터를 기반으로 자동으로 REST API 생성.
빠른 프로토타이핑 가능.

단점
복잡한 비즈니스 로직이 필요한 경우 적합하지 않음.
생성된 API를 커스터마이징하기 어려움.

사용
초기 REST API 서비스 구현(프로토타입 단계).

 

@RepositoryRestResource
public interface UserRepository extends JpaRepository<User, Long> {}

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;
}

'개발 > 스프링' 카테고리의 다른 글

Spring Boot, 스프링 부트  (1) 2025.04.01