ATLAS 하네스
Atlas는 .NET 데스크탑 앱이다. 이 환경에서는 레이어 경계와 절차 경로의 우회가 두드러진다.
Atlas란
Atlas는 C# / .NET으로 작성된 데스크탑 애플리케이션이다. 문서를 열고, 편집하고, 저장하고, 인덱싱하는 기능을 중심으로 레이어드 아키텍처를 가진다.
기술 스택:
- 언어: C# / .NET
- 아키텍처: Layered (Application → Domain → Infrastructure)
- 상태 관리: Event-driven, Store 기반
- 강제 도구: Roslyn Analyzer, 빌드 타임 정적 분석
Atlas의 계층 구조:
UI Layer
↓ (ViewModel / Command)
Application Layer ← UseCase, Handler
↓ (Interface)
Domain Layer ← Entity, Value Object, Repository Interface
↓ (DI / Assembly)
Infrastructure Layer ← Repository 구현체, FileSystem, DB각 레이어는 위 방향으로만 의존한다. 하위 레이어가 상위 레이어를 알면 안 된다. Infrastructure 구현체가 Application Layer에 직접 노출되면 안 된다.
이 환경에서 드러난 우회
Atlas에서 AI와 함께 작업하면서 반복된 우회는 크게 네 종류였다.
레이어 경계 우회 — Service가 Repository 구현체를 직접 생성하거나, UI가 Infrastructure를 직접 참조하는 패턴. 인터페이스를 거치지 않고 concrete 타입으로 바로 간다.
인터페이스 계약 위반 — DI를 무시하고 new FileRepository()처럼 구현체를 직접 생성하는 패턴. 계약이 없으면 진입점이 여러 개가 된다.
상태 변경 우회 — Store나 이벤트 없이 상태를 직접 바꾸는 패턴. 값은 바뀌지만 전이 절차가 실행되지 않는다.
검증 우회 — null 체크 대신 fallback 값 삽입, 예외를 삼켜서 성공처럼 반환하는 패턴. 잘못된 입력이 조용히 통과된다.
강제 도구
Atlas의 강제는 Roslyn Analyzer 기반이다.
Roslyn Analyzer는 C# 컴파일 파이프라인에 삽입되어 코드를 정적으로 분석한다. 위반이 감지되면 빌드 자체가 실패한다. 경고가 아니라 오류다.
주요 규칙:
ATL001: Application layer must not reference Infrastructure types directly
ATL002: Service layer must use interface, not concrete implementation
ATL003: State mutation must go through declared Store/Event path
ATL401: Execution flow must validate input before continuing
ATL402: Empty catch block hides validation or execution failure이 규칙들은 실행 통제 — 빌드 타임 강제에서 상세히 다룬다.
이 파트의 문서 목록
| 문서 | 우회 패턴 | 핵심 질문 |
|---|---|---|
| Atlas 사례 개요 | 입문 | Atlas 구조를 읽기 위한 최소 컨텍스트는 무엇인가? |
| Atlas 패턴 묶음 | 전체 조망 | Atlas에서 반복되는 패턴을 한눈에 |
| 백엔드 레이어 우회 | direct path bypass | 레이어 경계를 건너뛰고 있는가? |
| 통신 우회 | direct path bypass | 통신 계층을 우회하고 있는가? |
| UI 직접 파일 접근 | direct path bypass | UI가 파일 시스템에 직접 접근하는가? |
| 인터페이스 계약 위반 | contract flattening | 계약 없이 구현체를 직접 사용하는가? |
| 실행 흐름 우회 | contract flattening | UseCase를 건너뛰고 있는가? |
| 상태 변경 우회 | state & meaning bypass | Store 없이 상태를 직접 바꾸는가? |
| 검증 우회 | fallback & backdoor | 검증 없이 실행이 계속되는가? |
| 디버그 백도어 | fallback & backdoor | 디버그 경로가 두 번째 공식 경로가 됐는가? |
읽는 순서: Atlas 사례 개요 → Atlas 패턴 묶음 → 관심 있는 개별 패턴
각 사례 문서의 구조
Atlas 사례 문서는 거의 같은 구조를 따른다.
- 개요 / 질문 / 문제 — 어떤 우회가 반복됐고 무엇을 물어야 하는가
- 문제의 본질 — 왜 이 우회가 구조를 무너뜨리는가
- 목표 구조 / 하네스 적용 위치 — 합법 경로와 잠가야 할 표면은 어디인가
- 실제 구현 / 위반 예시 — 실제 C# 코드와 실패 결과는 어떻게 보이는가
- 보조 강제 수단 / 결과 — 하네스가 어떤 강제와 연결되고 어떤 변화를 만드는가
- 실무 적용 팁 / 요약 — 현업에서 무엇을 먼저 봐야 하는가