---
type: knowledge
domain: architecture
status: active
last-reviewed: 2026-07-27
---

# 아키텍처 스타일 선택

> 한 줄 정의
> 시스템 수준 구조(배포 단위·내부 구조·데이터 흐름)의 기본값과 승격 조건. 원칙은 [[TECHNOLOGY-DECISION-GUIDE]]와 같다: **승격 근거가 spec에 없으면 기본값.**

## 1. 배포 단위 — 기본값: 모듈러 모놀리스

단일 배포 단위 안에서 모듈 경계(도메인별 패키지 + 공개 인터페이스)를 강제한 구조.

| 승격 조건 (→ 서비스 분리) | 근거 |
|---|---|
| 모듈별 배포 주기가 실제로 충돌한다 (팀이 서로를 기다림) | 독립 배포 |
| 부하·스케일 특성이 극단적으로 다른 모듈 (예: 실시간 추론 vs CRUD) | 개별 스케일 |
| 장애 격리가 규제·계약 요구다 | 장애 반경 축소 |
| 분리할 경계가 이미 모놀리스 안에서 안정적으로 증명됐다 | 경계 확신 |

- **마지막 행이 전제 조건이다.** 경계를 모른 채 분리하면 분산 모놀리스가 된다 — 모놀리스의 단점 + 네트워크 비용.
- 소인원(≤10)이면 서비스 분리는 사실상 금지값이다 — 위 표의 규제·계약 요구 행만 예외. 마이크로서비스는 조직 확장 기술이지 성능 기술이 아니다 (Conway: 구조는 결국 팀 구조를 따라간다).

## 2. 내부 구조 — 기본값: 계층형 + 순수 도메인

- 계층: 표현(API) → 응용(유스케이스) → 도메인(순수 로직) → 인프라(DB·외부).
- 철칙은 하나: **의존 방향은 항상 도메인 쪽으로.** 도메인 계층은 프레임워크·DB를 모른다 ([[백엔드 원리]] 도메인 설계).

| 승격 조건 (→ 헥사고날/포트·어댑터) | 근거 |
|---|---|
| 같은 도메인에 어댑터가 여럿 (REST+큐+CLI, 멀티 벤더 연동) | 포트 계약 재사용 |
| 외부 시스템 교체가 예정된 사실이다 (계약·마이그레이션) | 어댑터 격리 |

- 헥사고날은 계층형의 대체가 아니라 "의존 역전을 명시적 포트로 승격"한 것이다. 어댑터가 1개뿐이면 계층형과 차이가 없다 — 이름만 늘리지 않는다.

## 3. 데이터 흐름 — 기본값: 요청-응답 + 단일 모델

| 패턴 | 채택 조건 | 비채택 시그널 |
|------|----------|--------------|
| 이벤트 기반 | 독립적으로 반응하는 소비자 3+ ([[백엔드 원리]] 표) | 소비자 2개 — 직접 호출 |
| CQRS | 읽기/쓰기 부하 비대칭 + 조회 모델이 실제로 다름 | "언젠가 필요할 듯" |
| Event Sourcing | 상태 변경 이력 자체가 도메인 요구 (감사·재생) | 감사 로그 테이블로 충분 |

- CQRS·이벤트소싱은 되돌리기 매우 비싼 one-way door다. 도입 전 [[설계 결정과 리뷰|ADR]] 필수.

## 4. 진화적 아키텍처 — 예측 대신 변경 비용을 낮춘다

- 미래를 맞히려 하지 않는다. **바꾸기 싼 구조**(낮은 결합·명시적 경계·계약 테스트)가 예측보다 낫다.
- 지키려는 구조 규칙은 문장이 아니라 **fitness function(아키텍처 테스트)**으로 잠근다:
  - 예: "도메인 패키지는 인프라를 import할 수 없다" — 의존성 검사 테스트로 CI에서 강제.
- 테스트로 표현 안 되는 규칙은 [[설계-리뷰-체크리스트]]에 넣는다.

## 트레이드오프 판단 축

구조 결정마다 네 축을 표로 비교해 spec 7절에 기록한다:
**운영 복잡도(지금 인력으로 온콜 가능?) · 변경 비용(자주 바뀌는 축이 어디?) · 장애 반경 · 팀 인지 부하.**
성능은 측정 후에만 판단 축으로 승격한다 — 추측 성능은 근거가 아니다.

## 안티패턴

- **첫날 마이크로서비스** — 경계 증명 없이 분리. 가장 비싼 실수.
- **공유 DB 마이크로서비스** — 배포만 나뉜 분산 모놀리스. 분리했으면 데이터 소유권도 분리 → [[분산 신뢰성 패턴]].
- **추측성 유연성** — 요구 없는 플러그인 구조·설정화 ([[AI-실수패턴]] #1·#2).
- **이력서 주도 설계** — 기술 선택의 근거가 요구사항이 아니라 기술 자체.

## 관련 문서

- [[00_설계 허브]] · [[도메인 경계 설계]] · [[분산 신뢰성 패턴]] · [[설계 결정과 리뷰]] · [[백엔드 원리]] · [[인프라 원리]]
