시스템 설계는 프로젝트 시작 전에 모든 이해관계자들이 무엇을 해야 할지 공통 이해를 가지는 것이 중요하다. 그렇지 않으면 프로젝트 후반부에 문제가 발생할 수 있다. 특히 상자와 화살표만으로 설계를 표현하면 기술 배경이 없는 사람들이 이해하기 어렵다.
이런 문제를 해결하기 위해 C4 모델이 개발됐다. C4 모델은 누구나 이해할 수 있는 공통 방식으로 시스템 설계를 시각화하는 데 활용된다. C4 모델은 4개 레벨로 구성되어 있고, 각 레벨은 이전 레벨보다 더 자세한 정보를 제공한다. 4개 레벨은 시스템 컨텍스트, 컨테이너, 구성 요소, 코드 레벨이다.
C4 모델의 각 레벨은 다음과 같이 활용된다:
-
시스템 컨텍스트 레벨 - 전체 시스템의 큰 그림을 보여준다. 각 상자는 별도의 시스템이다.
-
컨테이너 레벨 - 이전 레벨의 상자에 대한 세부 버전이다. 대부분의 경우 이 레벨까지만 그리면 된다.
-
구성 요소 레벨 - 필요한 경우에만 이 레벨까지 그린다. 이는 컨테이너 레벨의 상세 버전이다.
-
코드 레벨 - 일반적으로 이 레벨은 그리지 않는 게 좋다. 클래스 레벨의 상세 내용이므로 가독성이 떨어질 수 있다.
결과적으로 대부분의 경우 시스템 컨텍스트와 컨테이너 레벨 두 단계만으로 충분하고, 필요 시 구성 요소 레벨까지 그릴 수 있다.
C4 도면의 레벨에 대한 세부 내용은 다음과 같다.
시스템 컨텍스트 다이어그램
큰 그림을 보는 데 사용되며 각 상자는 별도의 시스템을 나타낸다. 아래 예시에서는 새로운 인터넷뱅킹 시스템과 기존의 이메일 및 주요 시스템과의 관계를 그려보았다. 새로 만들어진 시스템은 파란색으로 표시되고 기존 시스템은 회색으로 표시된다. 또한 시스템 간의 화살표 설명은 시스템 간의 관계를 명확하게 나타낸다. 각 상자 안에는 그것이 나타내는 시스템에 대한 간략한 설명이 있으며, 이 설명은 시스템에 익숙하지 않은 사람들에게 매우 유용하다. 시스템을 사용하는 사람들은 그림에 배우로 추가되고 이러한 배우와 다른 시스템의 관계가 표시된다.
컨테이너 다이어그램
시스템 컨텍스트 다이어그램에서 파란색으로 표시된 자체 시스템의 세부 정보가 이 다이어그램에 자세히 설명되어 있다(Docker의 컨테이너와 이름 유사성만 있음). 여기에서 각 상자는 별도로 배포되는 독립적인 단위(웹 애플리케이션, 데스크톱 애플리케이션 등)로 생각할 수 있다. 이 다이어그램에서는 개별 유닛이 모두 상자로 표시되어 있으며 상자 안에 기술과 설명이 적혀 있다. 기존 시스템과 관련된 경우 해당 시스템도 표시된다.
구성요소 다이어그램
컨테이너 다이어그램의 각 상자 내부를 더 자세히 표시하려는 경우 이 다이어그램을 사용할 수 있다. 각 상자는 프로그램의 구성 요소로 간주될 수 있다. 다이어그램의 내용은 수시로 변경될 수 있으므로 필요한 경우에만 그려야 한다.
코드 다이어그램
UML 다이어그램은 구성 요소 다이어그램의 각 구성 요소에 대해 클래스별로 그려진다. 자주 바뀔 수 있으므로 그리지 않는 것이 좋다.
이 4가지 기본 다이어그램 외에도 동적 및 배포 다이어그램을 사용하여 시스템을 더 잘 이해할 수도 있습니다. 이에 대한 설명은 다음과 같다.
동적 다이어그램
런타임에 특정 기능을 제공하기 위해 컨테이너와 구성 요소 간의 관계가 어떻게 되어야 하는지 지정하기 위해 그려지며 UML 협업 다이어그램에서 파생 된 다. 작업을 수행하는 흐름은 다음과 같은 순서로 지정된다.
배포 다이어그램
배포 다이어그램을 사용하면 정적 모델의 소프트웨어 시스템 및/또는 컨테이너 인스턴스가 지정된 배포 환경(예: 프로덕션, 스테이징, 개발 등) 내의 인프라에 배포되는 방법을 설명할 수 있다.
표기법
C4 모델은 표기법에 독립적 이며, 어떤 특별한 표기법도 규정하지 않는다. 그러나 시작점, 화이트보드, 종이, 스티키 노트, 색인 카드 및 다양한 다이어그래밍 도구에서 잘 작동하는 간단한 표기법은 다음과 같다.
사람
소프트웨어 시스템
컨테이너
요소
관계
.
외부 블로그 등에도 잘 정리되어 있지만 보면 볼수록 C4 사이트가 잘 정리된 듯하다.
Draw.io Templete
'IT > Etc' 카테고리의 다른 글
Workflow - Make (0) | 2024.07.25 |
---|---|
LLM App Builder Tool - Flowise (0) | 2024.07.23 |
프롬프트 엔지니어링 기법들 (0) | 2024.06.20 |
LlamaIndex (0) | 2024.05.09 |
셀룰러가 없는 Y700과 아이폰 테더링 (0) | 2024.03.30 |
댓글