This is Dormitory Management System Backend Repository
효율적인 유지보수와 기능 확장을 위해 DB Table과 아키텍처를 계획적으로 설계합니다.
개발 효율을 위해 가독성에 항상 신경씁니다.
프로젝트 구조나 설계 과정을 Notion 문서에 기록합니다.
서버 인프라는 Terraform을 사용해 구성합니다.
core
- 핵심 로직 및 도메인 모델에 대한 코드presentation
- 웹 통신에 대한 관리 및 설정persistence
- DB 통신에 대한 관리 및 설정infrastructure
- 전체에 적용되는 필터, 설정이나 기타 third party 라이브러리에 대한 구현(의존 방향이 아니라 진행 방향임)
flowchart TD
WA[webAdapter] --> UC[usecase];
UC -->|getService| P(command / query port);
UC -->|commandService| P;
UC -->|checkService| P;
P --> PA(adapter);
1. webAdapter
웹에서 요청을 받아, request body나 parameter 내용을 검증하는 역할
외부 요청은 webRequest 객체로 전달된다.
webAdapter는 usecase에게 request 객체 또는 value를 전달한다.
(request는 해당 객체로 domain이나 entity를 생성하야하거나, 별도 로직이 필요한 경우 정의함)
usecase의 반환값을 그대로 반환한다.
2. usecase (facade)
각 usecase에 대한 facade를 나타내는 역할
service 메서드를 호출하여 facade를 구성함 (port에 직접 의존하지 않음)
usecase에 특화된 로직을 직접 구현할 수도 있음
usecase는 service에게 domain model 또는 value 을 전달한다.
usecase는 webAdapter에게 response 객체를 반환한다. (field가 nullable인 별도 domain model로 리팩토링 예정?)
3. service
query나 port 호출을 domain과 관련된 추상적 의미 단위로 묶어주는 역할
service 종류 (깔끔한 분류를 위해 나눔)
CheckService
GetService
CommandService
delegate 패턴을 활용하여, 각 service 클래스 정의를 분리했다. [ 참고 : Service 구조 ]
4. port
5. Adapter