Internal 아키텍처 가이드
패키지
- [ ] 프레임워크 | ErrorOr
- [ ] 프레임워크 | Throw
- [ ] 프레임워크 | MediatR
- [ ] 프레임워크 | Ardalis.SmartEnum
- [ ] 프레임워크 | FluetValidaton
- [ ] 프레임워크 | Scrutor
- [ ] 프레임워크 | SonarAnalyzer.CSharp
- [ ] 프레임워크 | Riok.Mapperly
- [ ] 인프라스트럭처 | Serilog
- [ ] 인프라스트럭처 | OpenTelemetry
- [ ] 인프라스트럭처 | MassTransit
- [ ] 인프라스트럭처 | Quartz
- [ ] 인프라스트럭처 | FluentFTP
- [ ] 인프라스트럭처 | Polly
- [ ] 인프라스트럭처 | FusionCache
- [ ] 영속성 | EFCore
- [ ] 영속성 | Dapper
- [ ] 테스트 | xUnit.v3
- [x] 테스트 | NSubstitute
- [x] 테스트 | ArchUnit
- [x] 테스트 | Shoudly
- [ ] 테스트 | NBomber(k6)
- [ ] 테스트 | Reqnroll
- [x] 테스트 | coverlet
- [x] 테스트 | ReportGenerator
- [ ] 테스트 | BenchmarkDotNet
- [ ] 테스트 | Testcontainers
- [ ] 테스트 | Verify
설정
- [x] 솔루션 설정 | gitignore
- [x] 솔루션 설정 | gitattributes
- [ ] 솔루션 설정 | .dockerignore
- [ ] 솔루션 설정 | 전역 버전(도커 이미지 버전)
- [x] 솔루션 설정 | global.json
- [x] 솔루션 설정 | nuget.config
- [ ] 솔루션 설정 | .editorconfig
- [ ] 솔루션 설정 | Directory.Build.props
- [ ] 솔루션 설정 | Directory.Packages.props
- [x] 프로젝트 설정 | appsettings.json
- [ ] 프로젝트 설정 | InternalsVisibleTo
- [ ] WebApi 프로젝트 설정 | Microsoft.NET.Sdk.Web
- [ ] 테스트 프로젝트 설정 | Dockerization
- [ ] 테스트 프로젝트 설정 | xunit.runner.json
- [ ] 테스트 프로젝트 설정 | .runsettings
- [ ] 테스트 프로젝트 설정 | 테스트 Category
구성
- [ ] 폴더 구성 | 폴더 구성 원칙
- [ ] 폴더 구성 | 솔루션 폴더 구성
- [ ] 폴더 구성 | 프로젝트 폴더 구성
- [ ] 폴더 구성 | 도메인 레이어 폴더 구성
- [ ] 폴더 구성 | 애플리케이션 레이어 폴더 구성
- [ ] 폴더 구성 | 어덥터 레이어 폴더 구성
CI/CD
- [ ] 빌드 | 빌드 스크립트
- [ ] 빌드 | 코드 커버리지
- [ ] 빌드 | 클래스 다이어그램
- [ ] 빌드 | 프로젝트 의존성 다이어그램
- [ ] 빌드 | ERD 다이어그램
- [ ] 빌드 | 테스트 목록 문서서
- [ ] 빌드 | Cucumber 문서
- [ ] 빌드 | 순환 복잡도
- [ ] 빌드 | 코드 유사성
- [ ] 빌드 | 단일 파일
- [ ] 배포 | 배포 스크립트
- [ ] 배포 | 설정 파일
- [ ] 배포 | 컨테이너 이미지
- [ ] 배포 | 패키지
로그
- [ ] 에러 코드 | DomainErrors.{AggregateRoot}Errors.
- [ ] 에러 코드 | ApplicationErrors.{CommandName}Errors.
- [ ] 에러 코드 | ApplicationErrors.{QueryName}Errors.
- [ ] 에러 코드 | ApplicationErrors.{EventName}Errors.
- [ ] 에러 코드 | AdapterErrors.{범주}Errors.
레이어
- [x] 공통 | AssemblyReference.cs
- [x] 공통 | 접근 제어자
- [x] 공통 | Pure Function
- [x] 도메인 레이어 | 도메인 레이어 구성
- [x] 도메인 레이어 | 도메인 에러
- [ ] 도메인 레이어 | Enumerations
- [ ] 도메인 레이어 | Entity
- [ ] 도메인 레이어 | Value Object
- [ ] 도메인 레이어 | Factory
- [ ] 도메인 레이어 | Domain Service
- [ ] 도메인 레이어 | Aggregate Root
- [x] 애플리케이션 레이어 | 애플리케이션 레이어 구성
레이어
- [ ] 호스트 | Dump 파이프라인
- [ ] 호스트 | 로그(예외 처리)
- [ ] 호스트 | 윈도우 서비스
- [ ] 호스트 | 컨테이너화
- [ ] 호스트 | 컨테이너 유틸리티(Dump, ...)
- [ ] 어댑터 레이어 | IOption
- [ ] 어댑터 레이어 | IOption Validation
- [ ] 어댑터 레이어 | IAdapter 소스 생성기
- [ ] 어댑터 레이어 | IAdapter 파이프라인 Exception
- [ ] 어댑터 레이어 | IAdapter 파이프라인 OpenTelemetry Logs
- [ ] 어댑터 레이어 | IAdapter 파이프라인 OpenTelemetry Traces
- [ ] 어댑터 레이어 | IAdapter 파이프라인 OpenTelemetry Metrics
- [ ] 어댑터 레이어 | Repository 패턴 Command(ORM: EFCore)
- [ ] 어댑터 레이어 | Repository 패턴 Query(SQL: Dapper)
- [ ] 어댑터 레이어 | Unit of Work 패턴
- [ ] 어댑터 레이어 | External, WebApi
- [ ] 어댑터 레이어 | External, Quartz
- [ ] 어댑터 레이어 | External, RabbitMQ
- [ ] 어댑터 레이어 | External, gRPC
- [ ] 어댑터 레이어 | External, FTP
- [ ] 어댑터 레이어 | External, File System
- [ ] 어댑터 레이어 | External, Time/TimeZone
- [ ] 어댑터 레이어 | External, PostgreSQL
- [ ] 어댑터 레이어 | Resilience, Retry: 일시적 오류 발생 시 지정된 횟수만큼 재시도 API 호출 실패 시 3회 재시도
- [ ] 어댑터 레이어 | Resilience, Wait and Retry: 일정 시간 간격 또는 지수 백오프를 적용하여 재시도 네트워크 장애 시 점진적 재시도
- [ ] 어댑터 레이어 | Resilience, Circuit Breaker: 일정 횟수 이상 실패하면 일정 시간 동안 요청 차단 API 장애 감지 후 일정 시간 차단
- [ ] 어댑터 레이어 | Resilience, Advanced Circuit Breaker: 일정 기간 동안 특정 비율 이상의 실패 발생 시 차단 트래픽 대비 오류 비율이 높을 때 차단
- [ ] 어댑터 레이어 | Resilience, Fallback: 장애 발생 시 기본 응답 또는 대체 로직 실행 API 응답이 없을 때 기본값 반환
- [ ] 어댑터 레이어 | Resilience, Timeout: 지정된 시간 내에 응답이 없으면 요청 취소 데이터베이스 쿼리 5초 제한
- [ ] 어댑터 레이어 | Resilience, Bulkhead: 요청을 격리하여 특정 리소스 이상을 점유하지 않도록 제한 최대 동시 요청 수 제한
- [ ] 어댑터 레이어 | Resilience, Cache: 동일한 요청에 대해 이전 성공 결과를 재사용 API 응답을 일정 시간 동안 캐싱
- [ ] 어댑터 레이어 | Resilience, Rate Limit: 일정 시간 동안 요청 횟수를 제한 초당 10개 이상의 요청 차단
- [ ] 어댑터 레이어 | Resilience, 비동기 메시징: MassTransit + RabbitMQ로 장애 발생 시 메시지 큐 활용
- [ ] 어댑터 레이어 | Resilience, Saga 패턴: 데이터 일관성 유지, Saga 패턴을 활용하여 장애 발생 시 트랜잭션 보장
- [ ] 어댑터 레이어 | Resilience, 컨테이너 Health Check
- [ ] 애플리케이션 레이어 | CQRS
- [ ] 애플리케이션 레이어 | ICommand/ICommandUsecase
- [ ] 애플리케이션 레이어 | IQuery/IQueryUsecase
- [ ] 애플리케이션 레이어 | IResponse
- [ ] 애플리케이션 레이어 | IDomainEvent/IDomainEventUsecase
- [ ] 애플리케이션 레이어 | Integration DomainEvent
- [ ] 애플리케이션 레이어 | DTO
- [ ] 애플리케이션 레이어 | 1. Usecase Input 파이프라인 Exception
- [ ] 애플리케이션 레이어 | 2. Usecase Input 파이프라인 Validation
- [ ] 애플리케이션 레이어 | 3.1 Usecase Input 파이프라인 OpenTelemetry Logs
- [ ] 애플리케이션 레이어 | 3.2 Usecase Input 파이프라인 OpenTelemetry Traces
- [ ] 애플리케이션 레이어 | 3.3 Usecase Input 파이프라인 OpenTelemetry Metrics
- [ ] 애플리케이션 레이어 | 4. Usecase Input 파이프라인 Transaction <- 메시지 전송과 시점 충돌?
- [ ] 애플리케이션 레이어 | 5. Usecase Input 파이프라인 Cache
- [ ] 애플리케이션 레이어 | 컴파일 타임 logging 소스 생성기
- [ ] 애플리케이션 레이어 | Result 타입
- [ ] 애플리케이션 레이어 | Error 타입
- [ ] 애플리케이션 레이어 | Validation
테스트
- [x] 단위 테스트 | [단위 테스트 구성
- [x] 단위 테스트(아키텍처 테스트) | Layer Dependency Test
- [x] 단위 테스트(아키텍처 테스트) | Naming Conventions Test
- [ ] 단위 테스트(아키텍처 테스트) | DomainEvent/IDomainEventUsecase NamingConventions
- [ ] 단위 테스트(레이어 테스트) | 도메인 레이어
- [ ] 단위 테스트(레이어 테스트) | 애플리케이션 레이어
- [ ] 단위 테스트(레이어 테스트) | 애플리케이션 레이어(시나리오, Cucumber)
- [ ] 통합 테스트 | WebApi
- [ ] 통합 테스트 | Quartz
- [ ] 통합 테스트 | RabbitMQ
- [ ] 통합 테스트 | gRPC
- [ ] 통합 테스트 | FTP
- [ ] 통합 테스트 | File System
- [ ] 통합 테스트 | Time/TimeZone
- [ ] 통합 테스트 | PostgreSQL
- [ ] 성능 테스트 | WebApi
- [ ] 성능 테스트 | ...
설치
- [x] 개발 환경 설치
- [x] docker 설치
- [ ] ...