테스트 코드 작성을 위해, 더 나아가서는 소프트웨어의 지속적 성장이 가능하도록 하기 위해 레이어드 아키텍처를 육각형 아키텍처로 리팩토링하는 레포지토리입니다. 레이어드 아키텍처로 작성된 레포지토리는 여기에 있습니다.
가장 중심에 회색 원, 즉 도메인 계층이 존재합니다. 도메인을 감싸는 파란색 육각형은 애플리케이션 서비스 계층을 의미합니다. 이런 구조를 통해 도메인 계층이 어떤 의존성도 가지지 않고 비즈니스 로직에만 집중할 수 있도록 합니다.
핵심 디렉토리 구조는 아래와 같습니다.
├── adapter
│ ├── in
│ │ └── web
│ │ ├── controller
│ │ └── dto
│ │ ├── request
│ │ └── response
│ └── out
│ └── persistence
│ ├── adapter
│ ├── entity
│ └── repository
├── application
│ ├── command
│ ├── port
│ │ ├── in
│ │ └── out
│ └── service
└── model
회원가입 로직을 예시로 하는 흐름은 아래와 같습니다.
- UserCreateRequestDTO를 signUpCommand로 변환
- useCase의 signUp() 메서드 호출 → UserService의 signUp() 구현 메서드 호출
- signUpCommand를 Domain으로 전환
- 생성된 User 도메인 객체에서 createUser() 메서드 호출(비즈니스 로직 호출)
- createUserPort의 createUser() 메서드 호출(생성된 User 도메인 객체 저장) → UserPersistenceAdapter의 createUser() 구현 메서드 호출
- 요청받은 User 도메인 객체를 Entity로 변환
- UserRepository로 데이터베이스에 엔티티 객체 저장
- 저장된 엔티티 객체를 Domain으로 변환해 return
- return 받은 도메인을 UserResponseDTO로 변환해 return
- return 받은 DTO를 ok 코드와 함께 return