237. 액티비티 다이어그램 (Activity Diagram) - UML 동적 다이어그램 워크플로우 로직 흐름 분기 동기화 병렬 처리 비즈니스 프로세스 제어 흐름
핵심 인사이트: (236번 상태의 한계 돌파) "야! 236번 상태 다이어그램으로 자판기 상태 변하는 거 잘 그렸어. 근데 자판기 말고, 우리 회사의 거대한 '결제 승인 알고리즘(순서도)'을 그리려고 하니까 상태 다이어그램으론 도저히 답답해서 못 그리겠어!! 결제 버튼을 누르면, 1. 재고 엑셀 검사하고, 2. 카드사에 전화해서 돈 빼고, 3. 만약 돈이 모자라면(분기점 마름모) 결제 취소로 튕겨 나가고, 4. 돈이 있으면 영수증 뽑고 배송팀에 동시에 명령을 뿌리는(병렬 처리 막대기) 이 미친 듯이 쉴 새 없이 흘러가는 '동사형 행동(Action)들의 폭포수 흐름'을 그려내야 한단 말이야!! 옛날 코볼 시절에 쓰던 순서도(Flowchart)를 객체지향 21세기 버전으로 존나 힙하게 업그레이드시켜서 가져와!!" 멈추지 않고 콸콸 흘러가는 비즈니스 로직과 알고리즘의 폭포수 도면, 액티비티 다이어그램이다.
Ⅰ. 시스템 뼈대를 넘어선 '업무 흐름'의 필요성
- 235번 시퀀스는 객체끼리의 핑퐁(대화)에 집중하고, 236번 상태는 객체 하나가 멍때리며 기다리는 꼬라지(명사)에 집중합니다.
- 하지만 사용자가 "주문 취소" 버튼을 눌렀을 때, 백엔드 서버 안에서
A함수 실행 ➜ 조건문(if) 검사 ➜ B, C함수 동시 병렬 실행 ➜ DB 쾅하고 끊임없이 쏟아져 내리는 복잡한 '제어 알고리즘(로직)의 워크플로우'를 그리기엔 앞의 두 개는 너무 거창하고 핀트가 안 맞습니다.
Ⅱ. 액티비티 다이어그램 (Activity Diagram)의 개념 🌟
- 개념: 소프트웨어 시스템의 내부 알고리즘 로직이나, 기업의 전체적인 비즈니스 업무 프로세스(흐름)가 '어떤 처리 활동(Activity)'에서 시작하여 '어떤 조건 분기(if-else)'를 거쳐 '어떻게 병렬로 갈라지며(Fork)' 흘러가는지 그 제어 흐름(Control Flow)의 순서를 명확하게 보여주는 동적 다이어그램입니다.
- 옛날 절차지향 시절의 '순서도(Flowchart)'와 가장 똑같이 생겼고, 목적도 똑같은 객체지향판 순서도입니다.
Ⅲ. 액티비티의 4대 핵심 흐름 조각 🌟 핵심 기출 🌟
236번 상태 다이어그램과 그림 모양이 소름 돋게 비슷하지만, 작동 원리가 정반대입니다.
1. 활동 (Activity) - 둥근 네모 상자 (가장 헷갈림)
- 236번 상태의 둥근 상자는 멍때리는 대기 상태(명사)였습니다. (예:
[대기 중]) - 하지만 액티비티의 둥근 상자 안에는 **'빡세게 일하고 있는 동사'**가 적힙니다. (예:
[결제 승인 요청 중],[재고 감소 계산 중]). - 자동 폭포수 원리: 236번은 외부에서 버튼을 안 누르면 방을 못 벗어나지만, 액티비티 상자는 자기가 빡세게 계산(연산)을 다 끝마치는 그 순간! 자동으로 다음 상자를 향해 화살표를 타고 척척 흘러내려 가는 논스톱 폭포수 로직입니다.
2. 조건 분기점 (Decision) - 마름모(◇) 🌟
- 로직의 꽃인
If-Else조건문입니다. - 둥근 상자에서 흘러온 물이 마름모(◇) 구멍으로 들어옵니다. 마름모에서 두 갈래로 화살표가 찢어집니다.
- 한쪽 선엔
[잔고 부족], 한쪽 선엔[잔고 충분]이라고 조건을 달아, 조건에 맞는 길로만 물을 흘려보냅니다. 반대로 찢어진 두 길이 다시 하나로 모이는 곳(Merge)에도 마름모를 씁니다.
3. 병렬 처리 (Fork / Join) - 굵은 까만 막대기 🌟
액티비티만의 극강의 무기(동시성 표현)입니다.
- 포크 (Fork - 갈라치기): 위에서 1가닥의 물줄기가 내려오다가 **가로로 쫙 누워있는 '굵은 까만 막대기'**를 쾅 때립니다. 그 막대기 밑으로 물줄기가 3가닥으로 찢어져 나옵니다!
[영수증 인쇄]와[이메일 전송]과[재고 깎기]라는 3개의 활동(스레드)이 0.1초 만에 **동시에 병렬로 우르르 실행됨(동시성)**을 기가 막히게 표현합니다. - 조인 (Join - 모이기): 찢어졌던 3가닥의 선이 다시 하나의 '굵은 까만 막대기' 위로 꽂힙니다. "3개의 병렬 작업이 모두 끝날 때까지 여기서 잠깐 대기! 3개가 다 끝나야 밑으로 물 1가닥을 흘려보낸다(동기화)"는 뜻입니다.
4. 스윔레인 (Swimlane) - "수영장 레인"
- 다이어그램 전체 배경에 세로로 길게 선을 그어 수영장 레인처럼 구역을 나눕니다.
- "왼쪽 레인은 [영업팀]이 하는 활동 둥근 상자들을 그리고, 오른쪽 레인은 [물류팀] 상자를 그려!" 라며, **누가(어떤 객체/부서가) 해당 활동을 책임지고 있는지(책임 소재)**를 기가 막히게 명확히 쪼개줍니다.
📢 섹션 요약 비유: 액티비티 다이어그램은 거대한 쿠팡 물류 센터의 **'멈추지 않는 컨베이어 벨트(업무 워크플로우) 설계도'**입니다. 236번 상태 다이어그램이 멍때리는 로봇 1대의 감정 변화였다면, 액티비티는 수많은 활동이 자동으로 흘러가는 알고리즘 폭포수입니다. 박스가 굴러오면
[바코드 찍기(Activity)]상자에서 스캐너가 일을 합니다. 스캔이 끝나면 박스는 1초의 딜레이도 없이 스스로 다음 레일로 흘러갑니다. 가다가 마름모(◇) 모양의 선로 분기점(If 조건문)을 만납니다. 무게가 10kg 이상이면 왼쪽 무거운 레일로, 이하면 오른쪽 레일로 튕겨냅니다. 가끔 **가로로 긴 굵은 쇳대(Fork 병렬 처리 막대)**를 통과하면, 주문 내역 1개가 3장으로 복사 찢어져서, 한 장은 회계팀 레일(스윔레인)로 흘러가 영수증을 뽑고, 다른 한 장은 포장팀 레일로 동시에 흘러가 박스를 포장하게 만듭니다. 사람의 버튼(이벤트)을 기다리는 게 아니라, 앞의 계산이 끝나면 자동으로 다음 활동으로 콸콸 흘러내려 가는, 프로그램 내부의 복잡한 연산 로직과 회사의 동시다발적 비즈니스 프로세스(업무 흐름)를 가장 명확하게 문서화하는 객체지향판 만능 순서도입니다.