아키텍처 분석
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
제안: 결합도를 줄이기 위해 퍼사드 패턴 고려
모범 사례
- 정기적으로 분석 실행 - 문제를 조기에 발견
- 아키텍처 규칙 정의 - 위반 방지
- 복잡도 검토 - 핫스팟 리팩토링
- 트렌드 모니터링 - 시간에 따른 메트릭 추적