241. 패키지 다이어그램 / 복합 구조 다이어그램 - UML 정적 다이어그램 그룹화 모듈화 아키텍처 내부 구조 포트 클래스 내부
핵심 인사이트: (거대 시스템의 뼈대를 다듬는 정리의 달인들) 233번 클래스 다이어그램으로 네모 상자를 10,000개 그렸더니 도화지가 까맣게 칠해져서 아무것도 안 보인다. "야!! 서류가 1만 장 흩어져 있으면 '폴더(파일철)'를 사와서 관련된 것끼리 묶어서 정리하라고!! 회원 관련 클래스 100개는
[회원 폴더(패키지)]상자에 집어넣고, 결제 관련 클래스 100개는[결제 폴더(패키지)]상자에 구겨 넣어!! 그리고 이 거대한 폴더끼리 화살표를 그으면 1만 개짜리 복잡한 도면이 단 10개의 폴더 그림(패키지 다이어그램)으로 압축되잖아!!" 반대로 거대한 클래스 1개의 뱃속을 현미경으로 쪼개 보고 싶을 때는? "클래스의 배를 갈라서, 그 내장에 어떤 작은 부품들이 들어차 있고 서로 어떻게 연결되어 있는지(복합 구조 다이어그램) 그려봐!!" 너무 큰 것을 묶어버리는 자와, 너무 큰 놈의 배를 가르는 자, 정적 다이어그램의 숨은 공신 2인방이다.
Ⅰ. 패키지 다이어그램 (Package Diagram) 🌟 "무조건 묶어라"
거대한 엔터프라이즈 시스템(수만 개의 클래스)을 설계할 때 가장 먼저 그리는 거시적인 정적(구조) 다이어그램입니다.
1. 패키지 (Package) - 서류철 탭 폴더
- 개념: 서로 관련된 요소들(클래스, 인터페이스, 유스케이스 등 어떤 UML 요소든 상관없음)을 논리적으로 하나의 그룹(폴더)으로 깔끔하게 묶어주는 거대한 껍데기입니다.
- 그림 모양: 여러분 컴퓨터의 윈도우 '노란색 탭 폴더' 모양과 100% 똑같이 그립니다. 폴더 탭(귀퉁이) 부분에 패키지 이름(
com.bank.user)을 적어 넣습니다.
2. 패키지 간의 의존성 (Dependency)
- 폴더 안에 클래스를 다 쑤셔 박아 정리했으면, 폴더끼리의 관계(화살표)를 그립니다.
[주문 폴더]───>[결제 폴더](점선 화살표)- 이 큼직한 화살표 하나만 보면, "아, 우리 회사의 주문 시스템 덩어리는 결제 시스템 덩어리가 없으면 안 굴러가는구나!" 라는 시스템 전체의 하이레벨(High-level) 아키텍처 의존성이 한 방에 파악됩니다. 217번 클린 아키텍처의 의존성 규칙을 증명할 때 이 다이어그램을 씁니다.
Ⅱ. 복합 구조 다이어그램 (Composite Structure Diagram) 🌟 "배를 갈라라"
클래스 다이어그램(233번)의 치명적 한계를 보완하기 위해 늦게(UML 2.0) 추가된 정적(구조) 다이어그램입니다.
1. 233번 클래스 다이어그램의 한계
- 클래스 다이어그램은 밖에서 본 '껍데기 이름과 함수 목록'만 보여줄 뿐, **클래스의 뱃속(내부 구조)**에서 부품들이 어떻게 맞물려 돌아가는지는 보여주지 않습니다.
- 예를 들어,
[자동차]클래스 안에엔진,바퀴객체가 배열로 어떻게 세팅되어 서로 맞물리는지를 디테일하게 그리려면 233번 룰로는 표현이 꼬입니다.
2. 복합 구조 (Composite Structure)의 마법
- 개념: 복잡한 거대 클래스나 컴포넌트, 또는 216번 서술형에서 배운 전체 시스템의 내부 깊은 구조(Internal Structure)를 현미경으로 들이밀어, 그 안의 내부 파트(Part)들이 런타임에 어떻게 상호 연결되어 있는지를 정밀하게 그리는 도면입니다.
- 핵심 구성 요소:
- 파트 (Part): 거대 클래스 뱃속에 들어있는 내부 인스턴스(부품)들.
- 커넥터 (Connector): 뱃속 부품들끼리 데이터를 주고받는 연결 선.
- 포트 (Port) 🌟: 바깥세상과 뱃속 부품을 이어주는 작은 네모 구멍(콘센트). 216번 헥사고날 아키텍처의 그 '포트' 개념을 완벽하게 시각화하는 도구입니다.
Ⅲ. 두 다이어그램의 완벽한 역할 분담
- 패키지 다이어그램: 헬기를 타고 우주로 올라가서, 회사의 1만 개 코드를 **10개의 폴더(거시적)**로 압축해서 봅니다. (나무 대신 거대한 숲을 보기 위함)
- 복합 구조 다이어그램: 현미경을 들이밀고, 1개의 뚱뚱한 클래스의 **뱃속 창자(미시적)**를 갈라서 부품들이 얽힌 꼴을 파헤칩니다. (나무의 세포 속을 보기 위함)
📢 섹션 요약 비유: 소프트웨어의 코드가 쌓이면 감당 안 되는 서류 더미가 됩니다. 패키지 다이어그램은 어지러운 책상을 치우는 **'마법의 3단 서류함 정리술'**입니다. 책상 위에 흩어진 수백 장의 자바 소스 코드(클래스) 종이들을, 펀치로 뚫어 종류별로 '빨간색 바인더(회원 패키지)', '파란색 바인더(결제 패키지)'에 철컥철컥 묶어버립니다. 그리고 바인더들끼리 "이 빨간 바인더 작업할 땐 파란 바인더도 꼭 필요해"라고 포스트잇(의존성 선)을 붙여놓으면, 사장님이 수백 장의 종이를 다 읽을 필요 없이 책상 위 바인더 3권만 쓱 보고도 "아, 우리 회사는 3개의 큰 모듈 덩어리로 돌아가는구나!" 하고 전체 아키텍처(구조)를 1초 만에 파악하는 조감도입니다. 반대로 복합 구조 다이어그램은 바인더 밖이 아니라 **'정교한 손목시계(거대 클래스)의 뒷뚜껑을 따고 현미경을 들이대는 짓'**입니다. 겉보기엔 '시계(클래스)'라는 상자 1개지만, 뚜껑을 열어보니 그 안에 태엽(Part 1), 톱니바퀴(Part 2)가 서로 맞물려(커넥터) 돌아가고 있고, 시계 바깥쪽 용두(Port)를 통해 외부의 손가락과 맞닿아 있음을 뱃속까지 샅샅이 파헤쳐 런타임 내부 구조를 낱낱이 그려내는 내시경 도면입니다.