95 lines
9.1 KiB
Markdown
95 lines
9.1 KiB
Markdown
---
|
|
id: P-REINFORCE-WIKI-B44A8B13
|
|
title: "C4 모델 (C4 Model)"
|
|
category: Unified
|
|
status: draft
|
|
canonical_id: ""
|
|
aliases: []
|
|
duplicate_of: ""
|
|
source_trust_level: A
|
|
confidence_score: 0.95
|
|
tags: ['C4 Model']
|
|
raw_sources: ["Datacollector_MAC/out_wiki/C4 모델 (C4 Model).md"]
|
|
last_reinforced: 2026-05-02
|
|
github_commit: ""
|
|
---
|
|
|
|
# [[C4 모델 (C4 Model)]]
|
|
|
|
## 📌 Brief Summary
|
|
C4 모델은 소프트웨어 아키텍처 다이어그램을 작성하기 위한 계층적 접근 방식이다 [1]. 이 모델은 시스템을 컨텍스트(Context), 컨테이너(Containers), 컴포넌트(Components), 코드(Code)의 4단계 추상화 수준으로 나누어 시각화한다 [1]. 점진적으로 세부 사항을 확대하는 '줌인(Zoom-in)' 방식을 통해 코드베이스의 구조를 직관적으로 탐색할 수 있는 경로를 제공한다 [2, 3]. 이를 통해 다양한 이해관계자가 각자에게 필요한 수준의 세부 정보를 파악하고, 일관된 어휘로 아키텍처에 대해 소통하도록 돕는다 [1, 4].
|
|
|
|
## 📖 Core Content
|
|
C4 모델은 코드베이스와 시스템 아키텍처를 이해하고 문서화하기 위한 명확한 계층 구조를 제공한다.
|
|
|
|
* **4단계 추상화 계층**
|
|
* **레벨 1: 컨텍스트 (Context)**: 시스템을 사용하는 사람(역할)과 상호작용하는 외부 시스템을 보여주며 가장 높은 수준의 추상화를 제공한다 [1, 5].
|
|
* **레벨 2: 컨테이너 (Containers)**: 애플리케이션, 데이터베이스, 파일 시스템과 같은 시스템의 주요 기술적 빌딩 블록과 실행 가능한 배포 단위를 나타낸다 [1, 5].
|
|
* **레벨 3: 컴포넌트 (Components)**: 특정 컨테이너 내부의 주요 구조적 컴포넌트와 이들 간의 내부 및 외부 관계, 구현 기술 등을 상세히 보여준다 [1, 2].
|
|
* **레벨 4: 코드 (Code)**: (선택 사항) 시스템의 코드가 어떻게 구성되어 있는지 보여주며, 대개 UML 클래스 다이어그램의 형태를 띤다 [1].
|
|
|
|
* **작동 원리 및 주요 장점**
|
|
* **직관적인 Zoom-in 방식**: 컨텍스트 뷰에서부터 점진적으로 세부 사항을 확대하여 살펴보는 방식을 취하므로 복잡한 아키텍처를 단계적으로 소화할 수 있다 [1-3].
|
|
* **대상별 맞춤형 세부 정보 제공**: 기술 수준이나 직군에 따라 이해관계자에게 필요한 추상화 계층이 다르기 때문에, 추상화 수준이 뒤섞이는 것을 방지하고 일관성을 유지할 수 있다 [1].
|
|
* **다목적 활용성 및 표준화**: 특정 도구나 개발 방법론에 종속되지 않은 표준화된 뷰를 제공하여, 시스템 설계 의도를 팀 전반에 걸쳐 효율적으로 소통할 수 있게 한다 [1, 4].
|
|
|
|
## ⚖️ Trade-offs & Caveats
|
|
C4 모델은 도구 및 방법론에 독립적인 표준화된 뷰를 제공하여 다양한 이해관계자와 설계 의도를 소통하는 데 매우 다목적으로 활용되지만 제약 사항도 존재한다. 직관적인 계층형 구조를 갖추고 있으나, 시스템의 복잡한 세부 명세나 정교한 스펙을 표현하는 데 있어서는 UML(Unified Modeling Language)이 제공하는 수준의 디테일과 풍부함(richness)이 부족하다는 한계(Trade-off)가 있다 [4].
|
|
|
|
## 🔗 Knowledge Connections
|
|
|
|
### Related Concepts
|
|
|
|
#### [아키텍처/기반 기술]
|
|
- [[소프트웨어 아키텍처 다이어그램 (Software Architecture Diagrams)]]
|
|
- 연결 이유: C4 모델 자체가 소프트웨어 아키텍처 다이어그램을 효과적이고 체계적으로 작성하기 위한 구체적인 방법론이기 때문이다 [1, 2].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 아키텍처 다이어그램이 의사소통, 시스템 문서화, 온보딩, 트러블슈팅 등에서 수행하는 포괄적인 역할과 다양한 다이어그램 유형(컨텍스트, 배포, 시퀀스 등)을 폭넓게 이해할 수 있다 [6-8].
|
|
|
|
- [[UML (Unified Modeling Language)]]
|
|
- 연결 이유: C4 모델의 마지막 '코드' 레벨에서 주로 UML 클래스 다이어그램이 사용되며, C4 모델의 부족한 세부 표현력을 보완할 수 있는 표준 모델링 언어이기 때문이다 [1, 4, 9].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 객체 지향 설계에서 클래스 간의 관계(상속, 의존성, 컴포지션 등)를 어떻게 정밀하게 모델링하고 복잡한 상호작용을 명세하는지 파악할 수 있다 [9, 10].
|
|
|
|
#### [구현/활용 도구]
|
|
- [[Structurizr]]
|
|
- 연결 이유: C4 모델을 기반으로 한 코드로 다이어그램 작성(Diagrams as Code) 도구로, C4 모델을 직접적으로 구현하고 버전 관리할 수 있게 돕기 때문이다 [11].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: C4 모델 다이어그램을 텍스트 기반 코드로 정의하여 코드베이스의 진화에 맞춰 다이어그램의 일관성과 형상 관리를 유지하는 방법을 이해할 수 있다 [11].
|
|
|
|
- [[PlantUML]]
|
|
- 연결 이유: C4 기반의 시각화 도구 중 하나로, vFunction과 같은 분석 툴에서 추출한 라이브 아키텍처를 C4 컨테이너 다이어그램 형태로 시각화할 때 활용되기 때문이다 [12-14].
|
|
- 이 개념을 통해 더 깊게 이해할 수 있는 부분: 기존의 복잡한 시스템이나 마이크로서비스 아키텍처를 리버스 엔지니어링하여 어떻게 시각적인 C4 모델 다이어그램으로 자동 변환해 낼 수 있는지 파악할 수 있다 [13].
|
|
|
|
### Deeper Research Questions
|
|
|
|
- C4 모델의 4단계 추상화 중 '코드(Code)' 레벨이 주로 선택 사항(Optional)으로 간주되는 실무적인 이유와 유지보수 관점의 한계는 무엇인가?
|
|
- C4 모델과 UML을 실제 대규모 시스템 개발 조직에서 혼합하여 사용할 때 발생할 수 있는 문서화의 중복이나 혼란을 최소화하기 위한 방법은 무엇인가?
|
|
- 시스템이 지속적으로 변경될 때, C4 모델 기반의 다이어그램이 실제 코드베이스와 불일치하는 현상(Architectural Drift)을 방지할 수 있는 자동화 및 모니터링 방안은 무엇인가?
|
|
- 비기술 직군(예: PM, UX)과 기술 직군(예: 백엔드/프론트엔드 개발자) 간의 협업 시, C4 모델의 각 계층 뷰(View)는 각각 어떤 방식으로 가장 빈번하고 효과적으로 활용되는가?
|
|
- 이미 복잡하게 얽혀 있는 레거시(Monolithic) 코드베이스를 C4 모델 구조로 매핑(Reverse Engineering)하고자 할 때 겪는 주요 기술적 장벽과 이를 해소하기 위한 접근법은 무엇인가?
|
|
|
|
### Practical Application Contexts
|
|
|
|
- **Implementation:** 코드베이스 아키텍처를 문서화할 때 Draw.io, Structurizr, PlantUML 같은 도구를 사용하여 C4 모델의 스타일(컨텍스트, 컨테이너 등)을 적용해 구조를 코드로 구현하거나 시각적으로 작성한다 [11, 13, 15].
|
|
- **System Design:** 새로운 시스템을 설계하거나 기존 시스템을 리팩토링할 때, 외부 상호작용(컨텍스트)부터 시작해 시스템 내부 요소(컴포넌트)로 줌인하며 전체적인 청사진을 다양한 이해관계자와 논의한다 [1, 2, 5, 16].
|
|
- **Operation / Maintenance:** vFunction 같은 도구를 활용해 운영 중인 분산 시스템의 실제 런타임 상호작용을 분석하고, 이를 C4 컨테이너 다이어그램 형태(Architecture as Code)로 추출해 초기 설계와 일치하는지 아키텍처 드리프트를 점검한다 [13, 14].
|
|
- **Learning Path:** 방대한 코드베이스에 직면한 개발자가 전체상을 파악하기 위해 시스템의 가장 높은 추상화 계층에서 시작해 점진적으로 코드 레벨로 진입하는 하향식(Top-down) 멘탈 모델을 형성하는 데 활용한다 [1, 3].
|
|
- **My Project Relevance:** 프로젝트에 새로 합류하는 팀원의 온보딩(Onboarding)을 돕거나 시스템 유지보수를 진행할 때, 특정 기술이나 코드 세부 사항에 매몰되지 않고 전체 시스템 의도와 구조를 직관적으로 제공하는 맵(Map)으로 기능한다 [3, 7, 13].
|
|
|
|
### Adjacent Topics
|
|
|
|
- [[마이크로서비스 아키텍처 (Microservices Architecture)]]
|
|
- 확장 방향: C4 모델의 '컨테이너(Container)' 계층 개념과 마이크로서비스 간의 경계 및 통신(Integration) 매핑 방식을 탐구하고, 분산 환경 하에서의 시스템 시각화 전략으로 이해를 넓힐 수 있다.
|
|
- [[아키텍처 드리프트 (Architectural Drift)]]
|
|
- 확장 방향: C4 모델로 작성된 초기 아키텍처 설계가 실제 코드베이스의 진화에 따라 불일치하게 되는 원인과, 이를 동적 모니터링을 통해 실시간으로 갱신하여 문서의 신뢰성을 유지하는 방향으로 조사를 확장할 수 있다.
|
|
|
|
---
|
|
*Last updated: 2026-05-02*
|
|
## 🧪 검증 상태 (Validation)
|
|
- **정보 상태:** draft
|
|
- **출처 신뢰도:** A
|
|
- **검토 이유:** Datacollector에서 자동 추출된 위키 데이터의 초기 통합.
|
|
|
|
## 🧬 중복 검사 (Duplicate Check)
|
|
- **기존 유사 문서:** None
|
|
- **처리 방식:** CREATE
|
|
- **처리 이유:** 신규 지식 체계 도입
|