가이드
ArchiFit 캔버스 사용법과 아키텍처 설계 개념을 학습하세요.
Node와 Edge 관계
캔버스에서 노드 간 연결의 의미론적 타입과 시각적 표현
개요
캔버스에서 노드를 연결할 때, 연결선(Edge)은 단순히 "연결되어 있다"는 것 이상의 의미를 가집니다. flowType은 연결의 의미론적 타입을 나타내며, 각 타입에 따라 다른 시각적 스타일이 적용됩니다.
Flow Types
| flowType | 화살표 | 스타일 | 의미 |
|---|---|---|---|
dependency | O | 실선 ────→ | A가 B에 의존 (DI, import) |
data | O | 점선 - - → | 데이터가 A에서 B로 흐름 |
event | O | 짧은 점선 ···→ | A가 B에게 이벤트 발행 |
association | X | 실선 ────── | A와 B가 연관됨 (무방향) |
상세 설명
1. dependency (의존성)
Controller ────────→ Service
- 의미: 소스 노드가 타겟 노드에 의존합니다.
- 코드 관점: 소스가 타겟을 import하거나 주입받아 사용
- 예시:
Controller → Service: Controller가 Service를 주입받아 사용Service → Repository: Service가 Repository를 주입받아 사용UseCase → Port: UseCase가 Port 인터페이스에 의존
2. data (데이터 흐름)
Repository - - - - → Database
- 의미: 데이터가 소스에서 타겟으로 흐릅니다.
- 특징: 실제로는 양방향일 수 있음 (쿼리 → 결과)
- 예시:
Repository → Database: 데이터 저장/조회Service → Cache: 캐시 저장/조회Adapter → External API: 외부 API 호출
3. event (이벤트)
Service ·········→ EventHandler
- 의미: 소스가 타겟에게 이벤트를 발행합니다.
- 특징: 느슨한 결합, 비동기 통신
- 예시:
Service → MessageQueue: 메시지 발행Controller → EventBus: 이벤트 발행
4. association (연관)
Service ────────── DTO
- 의미: 두 노드가 연관 관계에 있습니다.
- 특징: 방향성이 불명확하거나 양방향인 관계
- 예시:
Service — DTO: Service가 DTO를 생성하고 반환Repository — Entity: Repository가 Entity를 다룸View — Template: View가 Template을 렌더링
자동 결정 규칙
캔버스에서 노드를 연결할 때, flowType은 노드 타입에 따라 자동으로 결정됩니다.
// 규칙 1: 데이터 객체(DTO, Entity)와의 연결 → association
if (targetType === 'dto' || targetType === 'entity' ||
sourceType === 'dto' || sourceType === 'entity') {
return 'association';
}
// 규칙 2: 인프라 데이터 저장소(DB, Cache)로의 연결 → data
if (targetType === 'database' || targetType === 'cache') {
return 'data';
}
// 규칙 3: 그 외 모든 연결 → dependency
return 'dependency';| 연결 대상 | 결정되는 flowType |
|---|---|
| DTO, Entity | association |
| Database, Cache | data |
| 그 외 (Service, Repository, Controller 등) | dependency |
시각적 표현
시나리오 예시
┌─────────────┐
│ Controller │
└──────┬──────┘
│ dependency (실선 화살표)
▼
┌─────────────┐ ┌─────────────┐
│ Service │───────│ DTO │
└──────┬──────┘ └─────────────┘
│ dependency association (실선, 화살표 없음)
▼
┌─────────────┐ ┌─────────────┐
│ Repository │───────│ Entity │
└──────┬──────┘ └─────────────┘
│ data association (실선, 화살표 없음)
▼
┌─────────────┐
│ Database │
└─────────────┘화살표 방향의 의미
ArchiFit에서 화살표 방향은 의존성 방향을 기본으로 합니다.
A → B = "A가 B에 의존"
이는 Clean Architecture의 Dependency Rule과 일치합니다:
- 외부 레이어가 내부 레이어에 의존
- 의존성은 항상 안쪽(도메인)을 향함
왜 의존성 방향인가?
- 일관성: 모든 화살표가 동일한 의미를 가짐
- 아키텍처 시각화: 의존성 위반을 시각적으로 파악 가능
- Clean Architecture 학습: 계층 간 의존성 규칙 이해에 도움
데이터 흐름과의 차이
실제 데이터 흐름은 의존성과 반대일 수 있습니다:
요청: Client → Controller → Service → Repository → Database 응답: Database → Repository → Service → Controller → Client
하지만 의존성은:
Controller → Service → Repository (Controller가 Service에 의존, Service가 Repository에 의존)
data flowType은 이러한 데이터 흐름을 명시적으로 표현할 때 사용합니다.
확장 가능성
향후 추가될 수 있는 flowType:
implements: 인터페이스 구현 관계extends: 상속 관계aggregation: 집합 관계 (UML)composition: 구성 관계 (UML)