도구 선택(Tooling)
설계 세션에서는 협업과 빠른 반복 작업을 위해 화이트보드나 플립차트 용지가 더 나을 수 있습니다. 장기적으로 사용될 문서의 경우, C4 모델을 기반으로 소프트웨어 아키텍처 다이어그램을 만드는 데 도움이 되는 여러 도구가 있습니다. 도구를 살펴볼 때 다음과 같은 몇 가지 질문을 스스로에게 던져보세요.
- 다이어그램을 작성한 사람은 누구이며, 얼마나 기술적인가요?
- 다이어그램의 대상 독자는 누구이며, 그들은 어떻게 다이어그램/문서에 접근할까요?
- 다이어그래밍 vs 모델링?
- “드래그 앤 드롭 UI” vs “코드로 된 다이어그램”?
- 데이터를 소스 코드와 가까운 git에 저장 vs 도구/클라우드 서비스에 저장?
- 풀 리퀘스트에 사용할 소스를 쉽게 구분할 수 있나요?
- 폐쇄형 데이터 형식인가요? 개방형 데이터 형식인가요?
- 인터랙티브 다이어그램인가요? 정적 다이어그램인가요?
- 무료인가요? 유료인가요?
- 클로즈드 소스인가요? 오픈 소스인가요?
- 클라우드를 사용하나요? 셀프호스팅하나요?
- 단기(Short-lived) 문서화인가요? 장기(Long-lived) 문서화인가요?
- 팀 전용 다이어그래밍인가요? 전사적(enterprise-wide) 모델링인가요? 그
다이어그래밍 vs 모델링
다이어그래밍과 모델링에 대해 간략히 설명하겠습니다. 툴 사용과 관련하여 가장 중요한 결정이기 때문입니다. C4 모델은 다이어그래밍 툴이든 모델링 툴이든 상관없이 사용할 수 있지만, 다이어그래밍에서 모델링으로 전환할 때 흥미로운 기회들이 있습니다.
다이어그래밍
업계에서는 모델링(예: Sparx EA, Archi, IcePanel, Structurizr 등)보다 다이어그래밍(예: Visio, draw.io, Lucidchart, PlantUML, Mermaid 등)을 선호하는 경향이 있습니다. 주된 이유는 진입 장벽이 상대적으로 낮고 훨씬 간단한 작업으로 여겨지기 때문입니다. 하지만 소프트웨어 아키텍처 다이어그램에 다이어그래밍 도구를 사용하는 데에는 몇 가지 큰 문제가 있습니다.
- 다이어그래밍 도구의 도메인 언어는 “상자와 선”입니다. 이는 다음을 의미합니다.
- 그것들은 당신의 다이어그램에 대한 어떠한 도움이나 검증도 제공할 수 없습니다.
- 다이어그램을 쿼리할 수 없습니다(예: “구성 요소 X의 모든 종속성을 보여주세요”).
- 다이어그램 요소를 재사용하려면 복사-붙여넣기를 사용해야 합니다. 즉, 상자의 이름을 바꾸면 해당 상자가 나타나는 모든 다이어그램에서 상자의 이름을 바꿔야 합니다.
- 많은 다이어그래밍 도구가 차이를 비교하기 힘든 데이터 구조를 갖고 있기 때문에 풀 리퀘스트와 함께 사용하기가 까다로운 경우가 많습니다.
모델링
모델링 도구를 사용하면 소프트웨어 아키텍처의 비시각적 모델(모든 요소와 요소 간의 관계에 대한 단일 정의)을 구축한 다음 그 모델에 대해 다양한 뷰(다이어그램이 되는)를 만들 수 있습니다. 모델링 도구는 사용자가 하려는 작업의 의미를 이해하고 추가적인 지원을 제공하며 요소/관계의 이름을 쉽게 변경할 수 있으므로 문제를 해결할 수 있습니다.
소프트웨어 아키텍처 모델은 본질적으로 노드와 에지로 구성된 유향 그래프 이며, 다이어그램은 그래프의 하위 집합을 보여줍니다. 모델(구조화된 데이터)과 뷰(다이어그램으로 표현되는)를 분리하면 여러 가지 흥미로운 가능성이 생긴다는 것을 금방 알 수 있습니다.
- 대규모의 복잡한 아키텍처 모델을 이해하는 데 도움이 되는 대체 시각화 만들기 - 자세한 내용은 C4 모델은 확장 가능한가요?를 참고하세요.
- 모델 쿼리.
- 모델을 다른 도구로 내보내기.
- 그 외
모델은 단지 데이터일 뿐입니다! 그리고 소프트웨어 개발자인 우리는 그 데이터를 시각화하고 조작할 수 있는 도구를 무궁무진하게 보유하고 있습니다.
옵션
다음은 C4 모델의 특정 부분에 대한 지원을 제공하는 도구 모음입니다.
지원되는 다이어그램 유형(예: 시스템 컨텍스트, 컨테이너 및 컴포넌트 다이어그램) (예: 협업 또는 시퀀스 다이어그램) (예: 배포 및 인프라 문제를 보여주는 다이어그램) | 다이어그래밍 vs 모델링(상자와 화살표는 복사 및 붙여넣기를 통해 재사용되며, 보조 기능이나 유효성 검사 규칙 등이 없습니다.) (즉, 여러 다이어그램을 요소의 이름을 바꿀 때 자동으로 동기화하기 위한 모델링 도구) 추천 | 작성(Authoring)(드래그 앤 드롭 모델링 UI) (쉬운 버전 관리 및 빌드 파이프라인/기타 도구와의 통합을 위해) | 기타(무료, 포크/커스터마이즈 등) (다이어그램, 그래프 등과 같은 다양한 도구 또는 시각화 방식으로 다이어그램을 렌더링하기 위해) |