- Published on
7월 1주 있었던 일 정리
- Authors
- Name
- 이건창
액티비티 다이어그램 학습기
개요
고민을 다른 사람들과 공유하는 일은 어렵다. 요즘 진행해야할 업무 프로세스를 공유하거나 작업 흐름을 공유하기 위한 시각화 툴 필요성을 느끼고 있다.
시퀀스 다이어그램은 행위를 순차적으로 표현해 객체 간의 상호작용을 자세하게 표현할 수 있지만 프로세스를 정리하기에는 실행 흐름 표현이 부족하다. 프로세스 정리 방식은 어떤게 좋을까 생각하다 알아본건 액티비티 다이어그램이다. 프로세스를 시각화해 동적인 흐름을 표현해보려 한다.
참고한 자료는 다음과 같다.
최근 진행하는 쿠폰 교환 프로세스를 기준으로 업무 처리 과정을 분석해보겠다. 액티비티 다이어그램은 액션, 액티비티, 베어흐름, 노드, 스웜레인으로 구성된다.

구성 요소 살펴보기
구성 요소를 간단하게 그림으로 표현했다.

액션과 액티비티
액티비티와 액션은 다음처럼 정의할 수 있다.
- 액티비티 : 액티비티는 동작의 집합을 의미하는 프로세스이며 두 개 이상의 액션으로 분리된다.
- 액션 : 액션은 더 이상 분해할 수 없는 단일 작업을 의미한다.
제어 흐름
액티비티 간 흐름을 나타내며 화살표를 사용해 연결한다. 표현되는 화살표는 다음처럼 표현한다.
- 실선 : 실행 순서를 나타낸다.
- 점선 : 객체의 흐름을 나타낸다.
시작 노드에서 시작하기 전 액티비티 흐름을 표현임을 명시하기 위해 액티비티를 점선과 함께 표현했다.
노드
노드는 동작을 의미하며 다이어그램에서 동적인 흐름을 표시한다. 노드는 다음처럼 표현된다.
- 시작 노드 / 종료 노드 : 액티비티 시작과 종료를 표현하며 다이어그램에서는 한 번 만 표현한다.
- 조건 / 병합 노드 : 조건에 따라 흐름을 제어한다. 조건 노드에서 다수의 흐름 중 하나를 선택한다. 병합 노드에서 이후 작업을 위해서 결과를 추상화한다.
- 포크 / 조인 노드 : 하나의 흐름을 다수의 흐름으로 분리하고 조인 노드는 다수의 흐름을 하나로 합친다.
조건/병합 노드와 포크/조인 노드 간에 차이점은 조건 유무이며 조건/병합 노드는 조건에 따라 하나의 흐름을 선택하지만 포크/조인 노드는 조건과 관계 없이 흐름을 분리하거나 합친다.
스윔레인
액티비티 수행 주체를 구분할 때 사용하며 각 평행적으로 수행되는 특징이 있다. 스웜레인은 가려로 그려도 되고 세로로 그려도 된다.
사용하면서 느낀점
사이드 프로젝트로 쿠폰 교체 프로세스를 고민하면서 쿠폰 변경 도중에 쿠폰을 사용하면 어떡하지?
, 쿠폰은 변경됐지만 변경 전 쿠폰을 이미 조회했다면 어떡하지?
라는 고민을 꽤나 했다. 생각만으로는 고민한 내용을 공유하기 어려웠고, 프로세스를 정리하고 오류를 범할 수 있는 정책의 틈새를 찾아내기 위해 액티비티 다이어그램을 사용했다.

마무리
동시성으로 문제를 제어할지, 동시성 없이 유지할지 정책 결정권은 정리된 프로세스에 달려있음을 깨달았다.
간혹 이슈를 잡기위해 오버 엔지니어링을 하는 경우가 있다. 만약 해당 이슈로 쿠폰 사용에 동시성 제어를 하게 된다면 닭 잡는데 소 잡는 칼을 쓴다.
와 동일한 상황이다.
쿠폰 교체 상황에서 잠깐 일부 쿠폰이 공유 자원으로 변경되는 현상 뿐인데, 이 상황에 대비하기 위해 전체 동시성을 제어할 필요가 있을까? 이런 질문은 정리된 프로세스 위에서 이야기 할 수 있다고 생각한다.
이번에 액티비티 다이어그램을 사용하면서 프로세스를 정리하고 오류를 범할 수 있는 정책의 틈새를 찾아내기 위한 방법을 알게 되었다. 또한 시퀀스 다이어그램과의 차이를 알게 됐고 어떤 상황에서 어떤 다이어그램을 사용할지 알게 됐다.