본문으로 건너뛰기

아키텍처 분석

ArchiCore를 사용하여 코드베이스 아키텍처를 이해하고 개선하는 방법을 배웁니다.

개요

ArchiCore는 코드 구조를 분석하여 다음을 식별합니다:

  • 모듈 종속성
  • 순환 종속성
  • 레이어 위반
  • 복잡도 핫스팟
  • 아키텍처 패턴

시각화

종속성 그래프

메인 대시보드에는 대화형 종속성 그래프가 표시됩니다:

  • 노드는 파일 또는 모듈을 나타냄
  • 엣지는 import/종속성을 나타냄
  • 색상은 모듈 유형 또는 상태를 나타냄
  • 크기는 파일 복잡도를 반영

탐색

  • 마우스 휠로
  • 패닝 드래그로
  • 클릭 노드 클릭으로 세부 정보 보기
  • 더블 클릭 모듈에 포커스

아키텍처 규칙

아키텍처 경계를 강제하는 규칙을 정의합니다.

규칙 생성

// .archicore/rules.json
{
"rules": [
{
"id": "layer-separation",
"name": "레이어 분리",
"type": "import",
"severity": "error",
"config": {
"forbidden": [
{
"from": "controllers/*",
"to": "repositories/*",
"message": "컨트롤러는 리포지토리에 직접 접근해서는 안 됩니다"
}
]
}
}
]
}

내장 규칙

규칙설명
no-circular-deps순환 종속성 방지
max-complexity순환 복잡도 제한
max-file-length파일 크기 제한
naming-convention명명 표준 강제

규칙 검증

> /rules validate
아키텍처 규칙 검증 중...

✓ no-circular-deps: 통과
✗ layer-separation: 실패 (2개 위반)
- src/controllers/user.ts:5가 src/repositories/user.ts를 import
- src/controllers/product.ts:3이 src/repositories/product.ts를 import

바운디드 컨텍스트

애플리케이션에서 논리적 경계를 정의합니다:

// .archicore/architecture.json
{
"boundedContexts": [
{
"name": "인증",
"description": "사용자 인증 및 세션",
"paths": ["src/auth/*", "src/middleware/auth*"]
},
{
"name": "제품",
"description": "제품 카탈로그 관리",
"paths": ["src/products/*", "src/inventory/*"]
}
]
}

메트릭

복잡도 메트릭

  • 순환 복잡도 - 독립 경로 수
  • 인지 복잡도 - 코드 이해 난이도
  • 유지보수성 지수 - 전체 유지보수성 점수

핫스팟 식별

> /metrics --sort complexity
코드 복잡도 핫스팟:

1. src/services/order.ts:processOrder()
복잡도: 25 | 라인: 180 | 유지보수성: 45

2. src/utils/parser.ts:parseInput()
복잡도: 18 | 라인: 120 | 유지보수성: 52

3. src/api/handlers.ts:handleRequest()
복잡도: 15 | 라인: 95 | 유지보수성: 58

리팩토링 제안

ArchiCore는 리팩토링 기회를 제안할 수 있습니다:

> /refactoring src/services/order.ts
src/services/order.ts 리팩토링 제안:

1. 메서드 추출
processOrder()가 너무 복잡합니다 (25)
제안: 검증 로직을 validateOrder()로 추출

2. 파일 분할
파일에 180줄이 있고 여러 책임이 있음
제안: OrderProcessor와 OrderValidator로 분할

3. 종속성 줄이기
파일이 12개 모듈을 import
제안: 결합도를 줄이기 위해 퍼사드 패턴 고려

모범 사례

  1. 정기적으로 분석 실행 - 문제를 조기에 발견
  2. 아키텍처 규칙 정의 - 위반 방지
  3. 복잡도 검토 - 핫스팟 리팩토링
  4. 트렌드 모니터링 - 시간에 따른 메트릭 추적