자동 레이아웃: 아키텍처 다이어그램을 즉시 정리하세요
모든 아키텍처 팀이 결국 직면하는 과제가 있습니다: 다이어그램이 커졌습니다. 깔끔하게 정렬된 5개의 시스템으로 시작한 것이 이제 27개의 요소와 40개의 관계가 되었고, 절반은 서로 교차합니다. 누군가가 지난주에 새 컨테이너를 추가하고 유일한 빈 공간인 오른쪽 하단에 놓았는데, 세 개의 다른 노드를 가로지르는 선으로 연결되어 있습니다. 다이어그램에는 여전히 정확한 정보가 담겨 있습니다. 다만 읽을 수 없게 된 것입니다.
그래서 누군가가 오후 내내 상자를 끌어다 놓습니다. 위쪽 절반을 보기 좋게 만들었는데, API 게이트웨이를 옮기면 아래의 모든 정렬이 깨진다는 것을 깨닫습니다. 다시 시작합니다. 한 시간 후 다이어그램은 약간 나아졌습니다. 다음 사람이 요소를 추가하면서 잘못된 곳에 놓고, 순환이 반복됩니다.
이것은 레이아웃 문제이며, 레이아웃 문제에는 알고리즘적 해결책이 있습니다. 자동 레이아웃이 바로 그것입니다.
한 번 클릭, 모든 것이 이동
자동 레이아웃은 다이어그램 도구 모음에 있습니다. 버튼을 클릭하면 다이어그램의 모든 요소 — 시스템, 컨테이너, 컴포넌트, 코드 요소, 오버레이, 복합 그룹 — 가 계산된 최적 위치로 이동합니다. 관계가 풀립니다. 교차하는 엣지가 분리됩니다. 계층 구조가 보입니다.
애니메이션은 400밀리초가 걸립니다. 노드가 현재 위치에서 새 위치로 완화된 큐빅 곡선으로 미끄러집니다.
작동 방식
내부적으로 자동 레이아웃은 JavaScript로 컴파일된 Eclipse Layout Kernel인 ELK.js를 사용합니다. ELK는 수십 년간의 자동 그래프 그리기 연구를 구현한 그래프 레이아웃 엔진입니다. Archyl은 방향 그래프에 특화된 레이어드 알고리즘을 사용합니다 — 정확히 아키텍처 다이어그램과 같습니다.
레이어 할당
ELK는 먼저 의존성 그래프에서의 위치에 따라 각 노드를 레이어에 할당합니다. 수신 관계가 없는 요소는 첫 번째 레이어로 갑니다.
교차 최소화
각 레이어 내에서 ELK는 교차하는 엣지 수를 최소화하기 위해 노드를 재배치합니다. 레이어 스위프라는 기법을 사용합니다.
노드 배치
레이어와 순서가 결정되면 ELK는 실제 x/y 좌표를 계산합니다. Archyl은 균형 잡힌 정렬이 있는 Brandes-Koepf 알고리즘을 사용합니다.
엣지 라우팅
ELK는 스플라인 경로를 사용하여 엣지를 라우팅하고, Archyl은 최종 노드 위치에 따라 각 관계의 최적 연결 핸들 — 상단, 하단, 좌측, 우측 — 을 재계산합니다.
복합 그래프 지원
아키텍처 다이어그램은 평면이 아닙니다. 컨테이너는 시스템 안에 있습니다. 컴포넌트는 컨테이너 안에 있습니다. 오버레이는 관련 요소를 그룹화합니다. 자동 레이아웃은 이러한 모든 중첩 관계를 처리합니다.
후처리: 정렬 및 그리드 스냅
원시 ELK 출력은 좋지만 완벽하지 않습니다. Archyl은 두 가지 후처리 패스를 적용합니다.
체인 정렬은 수직 축에서 거의 정렬된 연결 노드를 찾아 정확히 같은 중심선으로 맞춥니다. 결과는 연결된 요소 사이의 완벽하게 직선인 화살표입니다.
겹침 해결은 정렬 후 너무 가까워진 노드를 감지하고 밀어냅니다. 두 패스 후 모든 위치가 20픽셀 그리드에 스냅됩니다.
방향 전환
자동 레이아웃은 두 가지 방향을 지원합니다: 위에서 아래로와 왼쪽에서 오른쪽으로. 자동 레이아웃 버튼 옆의 토글로 전환할 수 있습니다.
위에서 아래로가 기본값이며 대부분의 아키텍처 다이어그램에 적합합니다. 왼쪽에서 오른쪽으로는 파이프라인 스타일 아키텍처에 더 잘 작동합니다.
무엇이 저장되는가
자동 레이아웃은 단순한 시각적 트릭이 아닙니다. 애니메이션이 완료되면 모든 계산된 위치가 서버에 저장됩니다. 노드 위치, 오버레이 경계, 복합 그룹 치수, 엣지 핸들이 모두 저장됩니다.
글로벌 아키텍처 뷰
자동 레이아웃은 개별 프로젝트뿐만 아니라 글로벌 아키텍처 페이지에서도 작동합니다. 전체 조직의 시스템을 수십 개의 교차 프로젝트 관계와 함께 보고 있을 때, 수동 레이아웃은 특히 고통스럽습니다.
사용 시기
자동 레이아웃은 세 가지 시나리오에서 가장 유용합니다:
AI 탐색 후. Archyl의 AI가 저장소를 분석하고 C4 모델을 생성할 때, 초기 위치가 원하는 레이아웃을 반영하지 않을 수 있습니다. 자동 레이아웃이 깔끔한 출발점을 제공합니다.
큰 변경 후. 5개의 새 컨테이너를 추가하고, 관계를 재구성하고, 시스템 간에 컴포넌트를 이동했습니다. 다이어그램이 지저분해졌습니다. 자동 레이아웃이 처음부터 모든 것을 재계산합니다.
새 프로젝트를 탐색할 때. 프로젝트에 합류하여 아키텍처를 이해하고 싶습니다. 자동 레이아웃이 구조를 명확하게 만드는 표준적이고 읽기 쉬운 배치를 생성합니다.
자동 레이아웃 실행 후 항상 개별 요소를 조정할 수 있습니다. 출발점이지 제약이 아닙니다.
시작하기
자동 레이아웃은 모든 플랜과 모든 다이어그램 — 프로젝트 수준 및 글로벌 — 에서 지금 사용 가능합니다. 아무 다이어그램이나 열고 도구 모음의 자동 레이아웃 버튼을 클릭하여 아키텍처가 스스로 정리되는 것을 지켜보세요.
아키텍처는 읽기 쉬워야 합니다. 자동 레이아웃은 다이어그램이 방해되지 않도록 합니다.
효과적인 아키텍처 다이어그램 구축에 대한 자세한 내용은 C4 모델 소개를 참조하세요. 자동 레이아웃이 교차 프로젝트 뷰와 어떻게 상호작용하는지 이해하려면 실시간 협업 및 글로벌 아키텍처를 탐색하세요. 자동 레이아웃이 배치하는 관계를 분석하려면 영향 레이더를 시도해보세요.