[Spring] 스프링의 3대장, Controller, Service, Repository

ggamang·2023년 4월 8일
0

JAVA&Spring

목록 보기
23/27
post-thumbnail

DDD의 계층구조

계층별 설명

Presentation Layer (Controller)

Presentation Layer는 사용자와 애플리케이션 간의 상호작용을 처리하는 계층이다.
이 계층에서는 요청의 유효성 검증, 응답의 생성, 응답 형식의 결정 등을 수행한다

  • 사용자의 요청을 받아서 해당 요청을 처리하기 위해 Application Layer의 서비스를 호출한다
  • 서비스로부터 반환된 결과를 사용자에게 응답으로 보낸다

Application Layer (Service)

Application Layer는 비즈니스 로직을 처리하는 계층으로, 사용자 요청에 대한 작업을 수행합니다.

  • Domain Layer에서 정의한 도메인 모델을 사용

Domain Layer (Entity, Value Object)

Domain Layer에서는 도메인 모델을 구현하기 위한 Entity와 Value Object 등이 정의된다

  • Entity: 시스템의 핵심 데이터 모델 정의
  • Value Object: 불변성을 보장해야 하는 속성을 정의

Infrastructure Layer (Repository)

Infrastructure Layer는 시스템과 외부 시스템을 연동하는 계층으로, 데이터베이스, 파일 시스템, 외부 시스템과의 연동 등을 처리
Repository는 데이터베이스와 도메인 모델 사이의 인터페이스 역할을 하며, 데이터베이스에서 Entity의 저장, 수정, 삭제 등을 담당한다.

  • 도메인 모델이 데이터베이스에 종속되지 않도록 함

구현 예시

Dahlia 프로젝트 전체 구성

Controller


HTTP 요청을 받아서 파라미터 검증 등을 수행한 후, 이를 서비스 계층에 전달(userService.create(user))하고, 서비스 계층이 반환한 결과를 HTTP 응답으로 변환(ResponseEntity.ok.body(responseUserDTO))하여 클라이언트에게 전송한다

Service


신규 사용자 생성 로직을 수행한다

Entity


도메인 모델을 표현하는 역할을 담당한다
JPA의 @Entity 어노테이션을 통해 데이터베이스 테이블과 매핑된다

Repository


UserRepository는 JpaRepository 인터페이스를 상속받아 구현되었으며, 사용자를 검색하는 등의 데이터베이스 연산을 수행한다

계층 구조 분리 이유 및 장점

각 계층의 독립성을 보장할 수 있다
즉, 유지보수성을 높일 수 있다

  • 가령, 비즈니스 로직이 변경되더라도, 데이터베이스와 연동하는 레포지토리 계층은 변경하지 않아도 된다

궁극적으로, 시스템을 유연하고 확장 가능하게 만들 수 있다!

0개의 댓글