C4 모델 개요
C4 모델은 소프트웨어 시스템의 아키텍처를 모델링하기 위한 간결한 그래픽 표기법입니다. Simon Brown이 만든 이 모델은 다양한 추상화 수준에서 소프트웨어 아키텍처를 전달하는 방법을 제공합니다.
왜 C4인가?
기존 아키텍처 다이어그램은 종종 다음과 같은 문제를 겪습니다:
- 일관성 없는 표기법: 팀마다 다른 기호를 사용
- 잘못된 세부 수준: 너무 추상적이거나 너무 상세함
- 오래된 문서: 다이어그램이 현실을 반영하지 못함
C4 모델은 다음을 제공하여 이러한 문제를 해결합니다:
- 표준화된 추상화 수준: 높은 수준에서 낮은 수준까지 네 가지 명확한 레벨
- 간단한 표기법: 기술적 및 비기술적 청중 모두 쉽게 이해 가능
- 계층적 탐색: 상세 정보를 보려면 확대, 맥락을 보려면 축소
네 가지 레벨
레벨 1: 시스템 컨텍스트
시스템 컨텍스트 다이어그램은 중앙에 박스로 시스템을 표시하고, 주변에 사용자 및 상호작용하는 다른 시스템을 배치합니다.
목적: 큰 그림 보여주기 - 시스템이 세상에서 어떤 위치에 있는지
대상: 모든 사람 (기술적 및 비기술적)
포함 요소:
- 소프트웨어 시스템 (중앙)
- 시스템을 사용하는 사용자/페르소나
- 시스템이 의존하는 외부 시스템
레벨 2: 컨테이너
컨테이너 다이어그램은 시스템 내부를 확대하여 상위 수준의 기술적 구성 요소를 보여줍니다.
목적: 주요 기술 선택과 책임 분배 방식 표시
대상: 개발 팀 내외부의 기술 인력
포함 요소:
- 컨테이너 (애플리케이션, 데이터 저장소 등)
- 컨테이너 간 관계
- 외부 시스템과의 연결
레벨 3: 컴포넌트
컴포넌트 다이어그램은 컨테이너 내부를 확대하여 내부 컴포넌트를 보여줍니다.
목적: 컨테이너가 어떤 컴포넌트로 구성되어 있고 각각의 책임이 무엇인지 표시
대상: 소프트웨어 아키텍트와 개발자
포함 요소:
- 컨테이너 내 컴포넌트
- 컴포넌트 간 관계
- 기술/구현 선택사항
레벨 4: 코드
코드 다이어그램(선택사항)은 컴포넌트가 어떻게 구현되는지 보여줍니다.
목적: 복잡하거나 중요한 컴포넌트의 코드 수준 세부사항 표시
대상: 개발자
포함 요소:
- 클래스, 인터페이스, 함수
- 상속 및 구현 관계
- 디자인 패턴
Archyl에서의 C4
Archyl은 다음 기능으로 C4 모델을 구현합니다:
탐색
- 요소를 더블클릭하여 다음 레벨로 확대
- 브레드크럼을 사용하여 상위로 이동
- 키보드 단축키로 빠른 탐색 (← → ↑ ↓)
요소 유형
각 레벨에는 고유한 요소 유형이 있습니다:
| 레벨 | 요소 유형 |
|---|---|
| 시스템 컨텍스트 | 시스템, 외부 시스템, 사용자 |
| 컨테이너 | 컨테이너, 외부 컨테이너 |
| 컴포넌트 | 컴포넌트 |
| 코드 | 클래스, 인터페이스, 함수 |
관계
모든 레벨의 요소 간에 관계를 생성할 수 있습니다:
- 한 요소에서 다른 요소로 드래그
- 상호작용을 설명하는 레이블 추가
- 사용되는 기술 명시
스타일링
다이어그램의 외관을 커스터마이즈할 수 있습니다:
- 요소 유형별 색상
- 커스텀 아이콘
- 오버레이를 통한 그룹화
모범 사례
상위부터 시작하세요
항상 시스템 컨텍스트 다이어그램부터 시작하세요. 다음 사항을 생각하게 됩니다:
- 누가 시스템을 사용하는가?
- 어떤 외부 시스템에 의존하는가?
- 시스템의 범위는 무엇인가?
단순하게 유지하세요
각 다이어그램은 하나의 페이지/화면에 맞아야 합니다. 맞지 않는다면:
- 여러 다이어그램으로 분할
- 세부 수준 줄이기
- 더 많은 세부사항은 다음 레벨 사용
일관된 명명 사용
- 명확하고 설명적인 이름 사용
- 팀의 명명 규칙 따르기
- 보편적으로 이해되지 않는 약어 피하기
관계 문서화
관계는 요소만큼 중요합니다:
- 상호작용을 설명하는 레이블을 항상 추가
- 관련 시 기술/프로토콜 포함
- 통신 방향 표시
다음 단계
- 시스템 컨텍스트 - 레벨 1 심화
- 컨테이너 다이어그램 - 레벨 2 심화
- 컴포넌트 다이어그램 - 레벨 3 심화
- 관계 - 요소 연결에 대해 알아보기