FastAPI를 기반으로 한 Clean Architecture + Layered Architecture 패턴을 구현한 프로젝트입니다. 도메인 중심의 설계와 의존성 주입을 통해 확장 가능하고 유지보수가 용이한 백엔드 시스템을 제공합니다.
src/
├── core/ # 공통 인프라 및 베이스 클래스
└── server/ # 서버별 구현
├── application/ # 애플리케이션 계층
├── domain/ # 도메인 계층
└── infrastructure/ # 인프라 계층
Router → UseCase → Service → Repository → Database
↓ ↓ ↓ ↓
DTO Entity Entity Entity
공통 인프라와 베이스 클래스들을 제공하는 핵심 모듈입니다.
dtos/
: 데이터 전송 객체 (DTO)common/
: 공통 DTO (BaseRequest, BaseResponse, PaginationInfo)user/
: 사용자 관련 DTO
use_cases/
: 유스케이스 베이스 클래스base_use_case.py
: CRUD 작업을 위한 제네릭 베이스 클래스
messaging/
: 메시징 시스템rabbitmq_publisher.py
: RabbitMQ 메시지 발행
entities/
: 도메인 엔티티entity.py
: 모든 엔티티의 베이스 클래스user/
: 사용자 관련 엔티티
services/
: 도메인 서비스base_service.py
: 서비스 베이스 클래스minio_service.py
: MinIO 스토리지 서비스s3_service.py
: AWS S3 스토리지 서비스
enums/
: 도메인 열거형
database/
: 데이터베이스 관련database.py
: MySQL 연결 및 세션 관리models/
: SQLAlchemy 모델user/
: 사용자 모델
repositories/
: 리포지토리base_repository.py
: 제네릭 베이스 리포지토리
messaging/
: 메시징 인프라rabbitmq_manager.py
: RabbitMQ 연결 관리
di/
: 의존성 주입core_container.py
: 공통 컨테이너 (DB, MinIO, RabbitMQ)
- `exception_middleware.py: 전역 예외 처리 미들웨어
- **
base_exception.py
: 커스텀 예외 베이스 클래스
- **
dto_utils.py
: DTO 변환 유틸리티 - **
pagination.py
: 페이지네이션 유틸리티
실제 서버 구현을 담당하는 모듈입니다.
routers/
: FastAPI 라우터api/
: REST API 라우터health_check_router.py
: 헬스 체크 엔드포인트user/
: 사용자 관련 API
websocket/
: WebSocket 라우터chat/
: 채팅 관련 WebSocket
use_cases/
: 서버별 유스케이스user/
: 사용자 관련 유스케이스
services/
: 서버별 도메인 서비스user/
: 사용자 서비스
entities/
: 서버별 엔티티enums/
: 서버별 열거형
repositories/
: 서버별 리포지토리user/
: 사용자 리포지토리
di/
: 의존성 주입server_container.py
: 서버 컨테이너containers/
: 도메인별 컨테이너user_container.py
: 사용자 도메인 컨테이너storage_container.py
: 스토리지 컨테이너
bootstrap/
: 애플리케이션 부트스트랩api_route_registry.py
: API 라우터 등록websocket_route_registry.py
: WebSocket 라우터 등록admin_registry.py
: 관리자 페이지 등록
views/
: SQLAdmin 뷰user/
: 사용자 관리 뷰
config.yml
: 애플리케이션 설정docker-compose.yml
: Docker Compose 설정pyproject.toml
: 프로젝트 의존성 및 메타데이터alembic.ini
: 데이터베이스 마이그레이션 설정run_server_local.py
: 로컬 서버 실행 스크립트
git clone https://github.com/Mr-DooSun/fastapi_layered_architecture.git
cd fastapi_layered_architecture
uv venv --python 3.12.9
source .venv/bin/activate # Windows: .venv\Scripts\activate
uv pip install -e .
# 환경 변수 파일 생성
cp _env/dev.env.example _env/dev.env
# 필요한 환경 변수 설정
# 데이터베이스 마이그레이션
alembic upgrade head
python run_server_local.py --env dev
- 계층별 명확한 책임 분리
- 의존성 역전 원칙 적용
- 테스트 용이성
- Dependency Injector 사용
- 도메인별 컨테이너 분리
- 느슨한 결합
- CRUD 작업 표준화
- 코드 중복 최소화
- 일관된 API 응답
- MySQL + SQLAlchemy
- 비동기 세션 관리
- Alembic 마이그레이션
- RabbitMQ 지원
- 비동기 메시지 처리
- MinIO 지원
- AWS S3 지원
- SQLAdmin 기반
- 데이터베이스 관리 UI
서버 실행 후 다음 URL에서 API 문서를 확인할 수 있습니다:
- Swagger UI: http://localhost:8000/api/docs
- ReDoc: http://localhost:8000/api/redoc
- 관리자 페이지: http://localhost:8000/admin
# 테스트 실행
pytest
# 커버리지 확인
pytest --cov=src
# Docker 이미지 빌드
docker build -f _docker/docker.Dockerfile -t fastapi-layered .
# Docker Compose 실행
docker-compose up -d
src/server/application/routers/api/
에 새 라우터 생성src/server/application/use_cases/
에 새 유스케이스 생성src/server/domain/services/
에 새 서비스 생성src/server/infrastructure/repositories/
에 새 리포지토리 생성src/server/infrastructure/di/containers/
에 새 컨테이너 생성
- 기존 베이스 클래스 상속
- 제네릭 타입 활용
- 의존성 주입 컨테이너에 등록
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE
파일을 참조하세요.
프로젝트에 대한 문의사항이 있으시면 이슈를 생성해 주세요.