05_아키텍쳐_구조설계 - loveAlakazam/hh-08-concert GitHub Wiki

아키텍쳐 구조 설계

아키텍쳐 구조

clean-architecture

  • 클린아키텍쳐 + 레이어아키텍쳐 를 기반으로 application / domain / infrastructure / interface 계층으로 구조를 설계 했습니다.

  • 각 계층의 하위에는 도메인별로 디렉토리로 나타내어 분리하였습니다.

├── domain/
│   ├── model/
│   │   └── Seat.java
│   ├── service/
│   │   └── SeatService.java
│   └── repository/
│       └── SeatRepository.java (인터페이스)
│
├── application/
│   └── usecase/
│       └── SeatReservationUseCase.java
│
├── infrastructure/
│   └── persistence/
│       └── JpaSeatRepository.java
├── interface/
│   └── api/
│       ├── SeatController.java
│       └── SeatDto.java

domain 계층

  • 역할: 핵심 비즈니스 로직이며, 외부요인에 전혀 의존하지 않으며 순수 비즈니스 모델과 비즈니스 규칙으로 구성되어있다.

  • 하위 패키지

    • entity : 데이터베이스 테이블과 매핑되는 클래스이자 도메인 객체
    • service : 해당 도메인이 제공해야하는 비즈니스 로직을 처리
      • 도메인 객체가 자체 로직으로 판단하기 어렵거나, 여러 객체를 판단해야하는 경우
    • repository 인터페이스: repository 인터페이스는 infra-structure계층의 구현체가 인터페이스 레이어를 바라보게하여 의존성을 밖에서

application 계층

  • 역할: 유즈케이스 흐름 제어. 도메인을 사용하여 외부요청을 조립해서 처리
    • 유즈케이스 흐름: 사용자가 어떤 목적을 달성하기 위해 시스템과 상호작용하는 과정을 단계적으로 정의한 것. 사용자가 어떤 기능을 수행할 때 그 기능이 어떻게 작동할지에 대한 처음부터 끝까지의 로직흐름을 의미함.
    • 트랜잭션 관리, 여러 도메인 객체를 조합함.
    • 여러 도메인 객체를 조합하거나, 여러 서비스가 연관되어있거나 등 복잡한 비즈니스 흐름이 복잡할때 facade를 적용할때 사용함.
  • 하위 패키지
    • usecase: 여러 도메인 계층의 서비스를 호출. 하나의 유즈케이스에서 여러개의 서비스를 호출해야된다면 facade를 사용하여 로직의 복잡도를 낮춘다.

interface 계층

  • 역할: application 바깥에 위치하며, 외부 요청(HTTP, 메시지 등)을 받고 응답처리한다.
  • 하위 패키지
    • controller: HTTP 요청을 받아 비즈니스 로직을 호출하고 결과와 메시지를 반환한다.
    • dto: 클라이언트와 서버간의 데이터 교환에 사용되는 객체

infra-structure 계층

  • 역할: 데이터베이스나 외부API 등 외부 기술적 구현체와의 연결을 한다.
  • 하위 패키지
    • repository: 도메인계층의 repository 인터페이스의 구체적인 구현체. JPA등 ORM 인터페이스를 상속받음. 구체적인 기술스택에 대한 의존성이 존재하여 도메인계층에 직접적인 영향을 미치지않도록 외부로 분리.