# Architecture Decision Records 제품명, 사용자, 업무 기능, UI와 배포 구조는 미정이다. 아래 결정은 제품 기술 경계와 신규 프로젝트 기본값을 정하며 구체적인 도메인 설계를 대신하지 않는다. ## ADR-001: MSVC 기반 C++ 제품 - **상태:** 대체됨 (superseded by ADR-003) - **이전 결정:** 대상 제품을 MSVC 기반 C++로 개발한다. - **대체 이유:** 사용자가 C# 전용 .NET 8 템플릿 전환을 승인했다. - **결과:** 이전 C++·MSVC 지원과 호환 계층을 유지하지 않는다. ## ADR-002: public header 경계 - **상태:** 대체됨 (superseded by ADR-004) - **이전 결정:** 공개 header와 implementation의 의존성 방향을 유지하고 `src/`, `include/`, `tests/`로 배치한다. - **대체 이유:** C#의 공개 API 접근성과 프로젝트 참조로 경계를 표현한다. ## ADR-003: C#·.NET 8 범용 제품 템플릿 - **상태:** 승인 - **결정:** 제품 언어는 C#, 신규 제품 기본 TFM은 `net8.0`이다. `global.json`은 SDK `8.0.424`, `rollForward=latestPatch`, `allowPrerelease=false`를 기준으로 한다. - **이유:** 승인된 기술 전환 방향과 설치가 확인된 SDK 기준을 명시한다. 해당 SDK를 최신 버전이라고 주장하지 않는다. - **대안·trade-off:** 다중 언어 호환 계층과 .NET Framework 4.x 지원은 제외한다. SDK 패치 갱신과 향후 런타임 전환은 별도로 검증한다. - **영향 경로:** `global.json`, 신규 제품 `.csproj`, `AGENTS.md`, 제품 문서. ## ADR-004: 공개 API와 프로젝트 참조 경계 - **상태:** 승인 - **결정:** 공개 API의 접근성·nullability 계약과 제품이 정한 참조 방향을 유지한다. 제품 프로젝트는 테스트 프로젝트를 참조하지 않는다. 권장 배치는 `src//`와 `tests/.Tests/`이다. - **이유:** 제품 소비자가 구현 세부사항이나 테스트 의존성을 부담하지 않도록 한다. - **대안·trade-off:** 별도 Contracts, DI와 계층을 템플릿에 미리 만들지 않는다. 공개 계약 분리가 필요해질 때 제품 요구에 따라 결정한다. - **영향 경로:** 신규 제품·테스트 `.csproj`, 공개 C# API, `docs/ARCHITECTURE.md`. ## ADR-005: 신규 프로젝트의 테스트와 컴파일 기본값 - **상태:** 승인 - **결정:** 신규 테스트는 xUnit v2 + VSTest를 기본으로 하고, nullable와 implicit usings를 활성화한다. C# 언어 버전은 SDK 기본값을 사용하고 빌드 경고는 오류로 처리한다. - **이유:** 실제 실행된 테스트와 컴파일 진단을 기본 검증 근거로 삼는다. - **대안·trade-off:** 기존 테스트 프레임워크는 VSTest/TRX 계약을 만족하면 사용할 수 있다. MTP 전용 어댑터, 대규모 스타일 규칙과 커버리지 임계값은 도입하지 않는다. - **영향 경로:** 신규 제품·테스트 `.csproj`, `AGENTS.md`. ## 새 결정 형식 새 ADR에는 상태, 결정, 이유, 대안 또는 trade-off, 영향을 받는 경로를 기록한다. Harness 사용법과 실행 상태는 제품 ADR 대신 Harness 문서와 phase index에 기록한다.