UML 커뮤니케이션 다이어그램으로 객체 협력 구조 설계하기
UML 커뮤니케이션 다이어그램의 메시지 번호, 객체 링크, 조건 흐름을 활용해 객체 협력과 인터페이스 의존성을 설계하는 방법
2026-08-14 · 최초 발행 2025-10-31
객체 사이의 연결을 중심으로 보는 상호작용
복잡한 시스템에서 객체가 어떤 경로로 협력하고 메시지를 주고받는지 파악하려면 시간 순서만으로는 부족할 때가 있다. 커뮤니케이션 다이어그램(Communication Diagram)은 UML 상호작용 다이어그램의 한 형태로, 객체 간의 고정 링크와 메시지 번호를 사용해 협력 구조를 표현한다.
시퀀스 다이어그램이 시간축을 따라 호출의 진행을 보여준다면, 커뮤니케이션 다이어그램은 협력 네트워크와 책임이 어디에 배치됐는지를 읽는 데 강점이 있다. 인터페이스 의존성, 결합도, 메시지 라우팅 경로를 검토하는 설계 모델로 쓸 수 있다.
표기에는 보통 객체/파티셔너 이름:Class 형식의 객체, 객체를 잇는 링크, 방향 화살표와 메시지 번호를 사용한다. n, n.m처럼 계층화한 번호는 메시지의 순서와 내포 관계를 나타낸다. 조건은 [guard], 반복은 [*]로 표시할 수 있으며 동기·비동기 호출과 반환 메시지도 구분한다.
링크와 메시지가 드러내는 책임의 경계
다이어그램의 객체 인스턴스는 런타임 협력에 참여하는 주체다. 객체 사이의 링크는 통신 가능한 관계를 뜻하며, 이를 통해 구조적 연결과 경로 비용을 살필 수 있다.
메시지는 링크 위의 방향 화살표로 표현한다. 1, 1.1, 1.2 같은 번호는 호출 순서와 하위 흐름을 함께 보여주므로, 분기나 반복이 포함된 협력 관계를 해석하기 좋다. 동기 호출은 요청과 응답이 이어지는 잠금 모델을, 비동기 호출은 비차단 처리 모델을 나타낸다.
상호작용 프레임은 다이어그램의 범위와 목적을 구분하는 데 사용한다. 시스템 경계, 컨텍스트 전환 지점, 외부 시스템 인터페이스를 명확히 표시할 수 있다. 조건 분기나 선택 흐름은 [조건], [alt], [opt] 스타일로 표현해 예외 경로까지 협력 구조에 포함한다.
시나리오를 협력 모델로 옮기는 과정
작성은 유스케이스나 사용자 스토리, 인터페이스 목록, 도메인 클래스 관계, 동시성·신뢰성과 같은 비기능 요구사항에서 시작한다. 이 입력을 바탕으로 참여 객체와 각 객체의 역할을 정한 뒤, 객체 간 링크를 배치한다.
링크는 의존성이 불필요하게 늘지 않도록 정렬하고, 정상 흐름에는 1부터 이어지는 메시지 번호를 부여한다. 대안 또는 예외 흐름은 2.a, 2.b나 2.1, 2.2처럼 별도 번호로 분기한다. 이후 호출의 동기·비동기 특성을 표시하고 조건과 반복을 추가한다.
완성된 다이어그램에서는 결합도, 순환 의존, 특정 객체에 집중된 과도한 허브 역할을 검토한다. 산출물은 협력 구조 다이어그램뿐 아니라 메시지 계약 목록, 인터페이스·오퍼레이션 정의, 테스트 케이스 시퀀스 추출물로 이어질 수 있다.
조건과 실패 경로를 메시지로 남기기
가드 조건은 [stock > 0], [timeout]처럼 호출이 성립하는 전제를 보여준다. 시간 초과, 재시도, 보상 트랜잭션은 정상 경로와 섞지 않고 별도의 메시지 분기로 표현해야 한다.
예외 흐름에는 3.1fail 같은 별도 번호를 부여할 수 있다. 호출 원자성이 필요한 경우에는 트랜잭션 경계와 롤백 경로까지 표시해, 실패 시 어떤 객체가 어떤 책임을 갖는지 확인한다.
트랜잭션과 공유 자원 흐름
동기 호출 구간은 트랜잭션 경계로 두고, 외부 시스템 호출은 분리하며 보상 패턴을 설계한다. 공유 리소스에 접근한다면 락을 보유하는 객체를 명시하고, 정렬된 락 획득 규칙으로 데드락 회피 순서를 정한다.
최종 일관성을 전제로 하는 시나리오에서는 비동기 메시지와 사가 단계 메시지의 번호를 구분한다. 이 구분이 없으면 정상 처리와 보상 처리를 다이어그램에서 추적하기 어려워진다.
주문 생성 흐름으로 보는 메시지 번호
다음은 주문 생성 과정의 상호작용 구조다. 메시지 번호를 텍스트에 포함해 호출 순서를 표시한다.
설계 리뷰와 운영 분석에서의 활용
API 설계 리뷰에서는 마이크로서비스 간 호출 방향, 데이터 흐름, 서킷브레이커 위치를 검토할 수 있다. 엔드포인트 계약과 응답 상호작용이 맞물리는지도 함께 확인한다.
분산 트랜잭션의 대안을 설계할 때는 사가의 보상 단계를 메시지로 모델링한다. 단계별 번호를 사용하면 보상 순서의 일관성을 관리하기 쉽다. 장애 분석과 RCA에서는 타임아웃, 재시도, 중복 처리 경로를 그려 병목이 되는 허브 객체를 찾아 재설계 근거로 삼을 수 있다.
레거시 시스템에서는 코드 변경에 앞서 기존 협력 구조를 추출하는 용도로도 활용한다. 이후 결합도를 낮출 방향으로 객체의 책임을 재배치할 수 있다.
범위를 통제해야 읽을 수 있는 다이어그램이 된다
메시지는 가능한 한 짧은 수명으로 유지하고, 링크 수와 허브 객체를 줄이는 편이 좋다. 정상 흐름의 번호는 연속성을 유지하며, 분기에는 소수점 체계를 적용한다.
동기 호출은 트랜잭션 경계 안으로 제한하고 외부 호출은 비동기 처리와 보상 패턴을 우선한다. 다이어그램의 범위는 하나의 유스케이스로 좁히며, 메시지는 20~30개 이내로 유지하는 방식을 권장한다.
구조를 표현하는 데는 강하지만 시간축의 세부 사항에는 약점이 있다. 복잡한 동시성 타이밍을 분석할 때는 시퀀스 다이어그램이 더 적합하다. 객체가 많아지면 링크가 교차하며 가독성이 떨어지므로, 패키지 분할이나 서브다이어그램이 필요하다. 흐름이 자주 바뀌는 환경에서는 메시지 번호를 유지하는 비용도 고려해야 한다.
| 관점 | 커뮤니케이션 다이어그램 | 시퀀스 다이어그램 |
|---|---|---|
| 표현 명확성 | 협력 구조·의존 경로 명확 | 시간 축·호출 타이밍 명확 |
| 확장성 | 객체/링크 증가 시 시각적 혼잡 가능 | 라이프라인 증가에도 상대적 정돈 유지 |
| 일관성 | 메시지 번호로 논리 순서 검증 용이 | 타이밍 순서 직관성 우수 |
| 안정성 | 구조 변경 영향 분석 용이 | 타이밍/동기화 변경 영향 분석 용이 |
| 운영 편의 | 리뷰에서 책임·결합도 논의 유리 | 성능/지연·동시성 논의 유리 |
리뷰 시간과 변경 영향 추적에 주는 효과
정량 효과는 추정치이며 조직 성숙도에 따라 달라진다. 설계 리뷰 시간은 2030% 단축되고, 인터페이스 변경에 따른 리워크는 1020% 감소할 수 있다. 인터페이스 불일치와 순환 의존 탐지를 기준으로 결함 예방률은 10%p 향상될 수 있다.
책임 할당을 명확히 하면서 팀이 공유하는 언어를 만들고, 변경 영향의 예측성도 높일 수 있다. 문서, 코드, 테스트 시퀀스 사이의 추적성 강화 역시 기대할 수 있는 효과다.
핵심 유스케이스와 참여 객체, 인터페이스 인벤토리를 먼저 정리한 뒤 링크 배치, 메시지 번호화, 조건·예외 주석, 동기·비동기 태깅 순으로 작성한다. 이후 결합도와 응집도 지표를 점검하고 과도한 허브를 제거한다. 대안 흐름을 검증한 다음 시퀀스 다이어그램과 교차 검토하며, 변경 이력 관리와 리뷰 체크리스트 표준화, 테스트 케이스 자동 추출 연계를 운영 과정에 포함한다.