ArchiFit

가이드

ArchiFit 캔버스 사용법과 아키텍처 설계 개념을 학습하세요.

Node와 Edge 관계

캔버스에서 노드 간 연결의 의미론적 타입과 시각적 표현

개요

캔버스에서 노드를 연결할 때, 연결선(Edge)은 단순히 "연결되어 있다"는 것 이상의 의미를 가집니다. flowType은 연결의 의미론적 타입을 나타내며, 각 타입에 따라 다른 시각적 스타일이 적용됩니다.

Flow Types

flowType화살표스타일의미
dependencyO실선 ────→A가 B에 의존 (DI, import)
dataO점선 - - →데이터가 A에서 B로 흐름
eventO짧은 점선 ···→A가 B에게 이벤트 발행
associationX실선 ──────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, Entityassociation
Database, Cachedata
그 외 (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)