refactor(topics): 멀티 에이전트용 지식 재편 — _Common(공통 기본기) + Domain_* 구조

에이전트 8종(대화형/프로그래머 C·S/디자이너/설계자/기획자/QA/PD/PM)에게
[공통 기본 능력 + 롤별 Specialty] 2층으로 지식을 주입하기 위한 재분류.
문서 내용·포맷은 무수정, 폴더 이동만 (6,372개 문서 수 보존 확인).

- Topic_Programming → Domain_Programming (내부 구조 보존)
- Topic_Graphic → Domain_Design
- Topic_Business → Domain_Product
- Topic_General → Domain_General
- _Common 신설: Math(구 Topic_Math_Specialty), Reasoning(구 General/From_Thinking & Reasoning),
  Reasoning_Creativity(구 General/From_창의성), Communication(Poetic_Blog_Writing + From_writing)
- 타 도메인의 From_* 폴더는 유지 (출처 표기일 뿐, 이미 도메인에 맞게 분류된 문서)
- 빈 폴더 정리 (memory/procedures)
- 에이전트→폴더 매핑은 workspace의 .astra/agent-knowledge-map.json (9개 에이전트)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Antigravity Agent
2026-07-11 11:05:56 +09:00
parent 6549ead309
commit c24165b8bc
6193 changed files with 1717 additions and 31 deletions
@@ -0,0 +1,27 @@
---
category: Architecture
tags: [auto-wikified, technical-documentation, architecture]
title: Dependency Inversion Principle
description: "의존성 역전 원칙(Dependency Inversion Principle)은 애플리케이션 서비스가 인프라스트럭처 서비스와 상호 작용할 때 구체적인 구현체(concrete implementations)에 직접 의존하지 않도록 하는 설계 원칙이다 [1]."
last_updated: 2026-05-04
---
# Dependency Inversion Principle
## 📌 Brief Summary
의존성 역전 원칙(Dependency Inversion Principle)은 애플리케이션 서비스가 인프라스트럭처 서비스와 상호 작용할 때 구체적인 구현체(concrete implementations)에 직접 의존하지 않도록 하는 설계 원칙이다 [1]. 이 원칙은 대신 클래스의 생성자를 통해 필요한 의존성을 주입(inject)하는 방식을 제안한다 [1]. 이를 통해 시스템 요소 간의 느슨한 결합(loose coupling)을 촉진하며, 시스템을 더 유연하고 테스트하기 쉽게 만든다 [1].
## 📖 Core Content
* **구체적 구현으로부터의 분리**: 의존성 역전 원칙에 따라 애플리케이션 계층은 구체적인 구현 클래스에 직접적으로 종속되지 않는다 [1]. 대신 필요한 의존성은 생성자를 통해 외부에서 주입받는 방식을 취하여 시스템의 결합도를 낮춘다 [1].
* **헥사고날 아키텍처(Hexagonal Architecture)에서의 역할**: 헥사고날 아키텍처에서 애플리케이션 서비스가 인프라스트럭처 서비스와 상호작용해야 할 때 기본적으로 이 의존성 역전 원칙을 따른다 [1]. 이를 통해 핵심 비즈니스 로직과 외부 시스템 간의 상호작용을 유연하게 관리할 수 있다 [1].
* **프레임워크 단위의 의존성 주입(DI) 지원**: NestJS나 Spring Boot 같은 프레임워크는 이 원칙을 실현하기 위해 강력한 의존성 주입(Dependency Injection) 컨테이너 시스템을 제공한다 [2, 3]. 개발자가 클래스 생성자를 통해 필요한 의존성을 선언하면 프레임워크가 자동으로 인스턴스화하여 주입한다 [2, 3]. 이러한 방식은 의존성을 직접 임포트하여 사용하는 방식에 비해 컴포넌트 간 결합도를 낮추고 단위 테스트(Unit Test) 가능성을 극대화한다 [3].
## ⚖️ Trade-offs & Caveats
소스 내에서 의존성 역전 원칙 자체에 대한 직접적인 단점은 명시되어 있지 않으나, 이를 구현하는 '의존성 주입(DI)' 및 구조적 아키텍처를 실전 프레임워크에 도입할 때 다음과 같은 제약 및 반대 급부(Trade-off)가 동반된다.
* **가파른 학습 곡선**: 의존성 주입, 데코레이터, 모듈화 등의 개념을 바탕으로 엄격한 아키텍처를 강제하는 프레임워크(예: NestJS, Spring Boot)를 사용할 경우, 개발자가 이를 완벽히 숙지하기 위한 학습 곡선(Learning Curve)이 비교적 가파르다 [4, 5].
* **소규모 프로젝트에서의 오버헤드**: 단순한 API나 소규모 팀(2~5명) 환경에서는 의존성 주입 컨테이너나 모듈 시스템을 구성하는 데 드는 비용이 비즈니스 가치 창출보다 클 수 있다 [6]. 즉, 기능 개발보다 프레임워크 구조 설정(wiring)에 과도한 시간이 소모될 수 있는 오버엔지니어링의 위험이 존재한다 [4, 6].
* **순환 참조(Circular Dependency) 문제**: 복잡한 의존성 주입 시스템에서는 모듈 및 서비스 간의 순환 참조 문제가 발생할 수 있다 [7]. 프레임워크에서 이를 우회하는 기능(예: NestJS의 `forwardRef()`)을 제공하긴 하지만, 이를 임시방편으로 사용하기보다는 아키텍처적 재설계를 통해 근본적으로 차단하는 것이 바람직하다 [3, 7].
---
*Last updated: 2026-05-03*