액티비티(Activity) 다이어그램

Activity diagram with Plant UML

정의 및 목적

  • 액티비티 다이어그램은 액티비티(activity) 및 액션(action)을 표현
    • 반복, 조건, 병렬 등을 표현
    • 전체적의 제어 흐름을 보여주는 것이 주요 목적
      • 필요에 따라 데이터의 흐름도 보여줄 수 있음.

액티비티 다이어그램 주요 표현

  • 검정색 원은 시작점
  • 이중선이 있는 검정색 원은 종료점
  • 타원은 액션(action), 다이아몬드 또는 육각형은 결정(decision)을 표현
  • 바(bar)는 병렬 액티비티의 시작(split) 및 종료(join)를 표현
  • 컬럼(swimlane)은 각 각 컴포넌트를 의미
    • 추상화된 레벨에서 전체 컴포넌트 간의 액션의 흐름을 보기 용이함.
    • 복잡한 서비스의 경우에는 액션의 흐름을 미리 파악할 필요가 있음.
    • 개발자들간의 잘못된 소통을 사전에 방지해줄 수 있음.

액티비티 다이어그램 그리기

  • Plant UML 을 이용하여 아래와 같은 절차를 통해서 그릴 수 있음.
    • 본 섹션에서는 서비스 설계에 필요한 최소화를 설명하며 Plant UML 설명 을 참고
  • 메인 컴포넌트에서 확장해나가는 방식으로 그릴 수 있음.

관련 컴포넌트 정의

  • 다수 컴포넌트가 포함된 엑티비티를 그릴 경우에만 해당됨.
    • 엑티비티 다이어그램은 하나의 컴포넌트에 대한 상세 흐름을 정의하는 경우가 다수이므로 본 단계를 수행하지 않을 수 있음.
skinparam backgroundcolor transparent

|컴포넌트1|
|메인컴포넌트|
|컴포넌트2|

|메인컴포넌트|
start
stop

메인 컴포넌트의 결정 로직 정의

  • 메인 컴포넌트의 로직을 중심으로 프로세스를 크게 그림.
    • 다른 컴포넌트와 연동은 표시하는 정도 수준
    • 결정 및 병렬 로직등은 상세하게 보여야 함.
skinparam backgroundcolor transparent

|컴포넌트1|
|메인컴포넌트|
|컴포넌트2|

|메인컴포넌트|
start

if (조건을 만족하는지?) then (예)
        :위의 조건을 만족하는경우
        병렬 프로세스를 시작;
        fork
                :컴포넌트1에 요청;
        fork again
                :컴포넌트2에 요청;
        end fork
else (아니요)
        :틀렸을때 수행할 프로세스;
endif

stop

메인 컴포넌트의 로직 상세화

  • 결정 로직 이후의 로직을 조금씩 상세화 수행
    • 실패시 장애 조치(failover) 로직 등에 대해서 상세화 수행
skinparam backgroundcolor transparent

|컴포넌트1|
|메인컴포넌트|
|컴포넌트2|
|메인컴포넌트|
start

if (조건을 만족하는지?) then (예)
        :위의 조건을 만족하는경우
        병렬 프로세스를 시작;
        fork
                :컴포넌트1에 요청;
        fork again
                :컴포넌트2에 요청;
        end fork
else (아니요)
        repeat :다음 failover;
        :재시도 수행;
        repeat while (end of failovers?)
endif

stop

타컴포넌트의 처리 로직 상세화

  • 타컴포넌트와 연동되는 부분에 대한 상세화
    • 타컴포넌트에서 요구되는 처리를 기반으로 작성
      • 해당 컴포넌트의 흐름을 컴포넌트 개발자들 간의 합의 및 설계
skinparam backgroundcolor transparent

|컴포넌트1|
|메인컴포넌트|
|컴포넌트2|
|메인컴포넌트|
start

if (조건을 만족하는지?) then (예)
        :위의 조건을 만족하는경우
        병렬 프로세스를 시작;
        fork
                :컴포넌트1에 요청;
                |컴포넌트1|
                :처리;
                |메인컴포넌트|
                :요청처리;
        fork again
                :컴포넌트2에 요청;
                |컴포넌트2|
                :처리;
                |메인컴포넌트|
                :요청처리;
        end fork
else (아니요)
        repeat :다음 failover;
        :재시도 수행;
        repeat while (end of failovers?)
endif

stop