9148c358d0
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를 Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류. - 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로 자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거, 동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거. - 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming, Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business, Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로, 나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는 title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백). 원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지. - 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서. - 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는 지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지. - Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경. - 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
5.1 KiB
5.1 KiB
id, title, category, status, canonical_id, aliases, duplicate_of, source_trust_level, confidence_score, verification_status, tags, raw_sources, last_reinforced, github_commit, tech_stack
| id | title | category | status | canonical_id | aliases | duplicate_of | source_trust_level | confidence_score | verification_status | tags | raw_sources | last_reinforced | github_commit | tech_stack | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| wiki-2026-0508-소프트웨어-아키텍처-설계 | 소프트웨어 아키텍처 설계 | 10_Wiki/Topics | verified | self |
|
none | A | 0.9 | applied |
|
2026-05-10 | pending |
|
소프트웨어 아키텍처 설계
매 한 줄
"매 architecture는 매 의사결정의 기록이며, 매 변경 비용을 결정한다". Bass/Clements/Kazman의 SEI 정의 이후, 매 architecture는 매 코드 자체가 아닌 매 component / connector / constraint의 집합으로 본다. 매 2026 modern view는 매 evolutionary architecture (Ford) — 매 fitness function 으로 매 architectural property 를 매 자동 검증.
매 핵심
매 4+1 View (Kruchten)
- Logical: 매 도메인 객체 / 책임 분배.
- Process: 매 runtime concurrency / 매 thread / 매 process.
- Development: 매 module / 매 package 구조.
- Physical: 매 deployment topology.
- Scenarios (+1): 매 use case driven validation.
매 Quality Attributes (ISO/IEC 25010)
- Performance: latency, throughput.
- Scalability: horizontal / vertical 확장.
- Availability: SLA, MTBF, MTTR.
- Security: CIA triad.
- Modifiability: 매 변경 cost.
- Testability: 매 격리 가능성.
매 응용
- C4 model 으로 매 stakeholder communication.
- ADR (Architecture Decision Record) 으로 매 결정 추적.
- Fitness function 으로 매 architectural drift 방지.
💻 패턴
ADR template
# ADR 0042: Adopt CQRS for Order service
## Status
Accepted (2026-05-10)
## Context
Read traffic 100x higher than write. Single Postgres table contention.
## Decision
Split into command (Postgres) + query (Read replica + Redis cache).
Event sourcing via Kafka.
## Consequences
+ Read scales independently.
- Eventual consistency window ~50ms.
- Two data models to maintain.
Fitness function (ArchUnit, Java)
@AnalyzeClasses(packages = "com.shop")
class ArchitectureTest {
@ArchTest
static final ArchRule domain_independent =
noClasses().that().resideInAPackage("..domain..")
.should().dependOnClassesThat().resideInAPackage("..infra..");
@ArchTest
static final ArchRule controllers_only_call_services =
classes().that().resideInAPackage("..controller..")
.should().onlyDependOnClassesThat()
.resideInAnyPackage("..service..", "java..");
}
C4 Container diagram (Structurizr DSL)
workspace {
model {
user = person "Customer"
shop = softwareSystem "Shop" {
web = container "Web App" "React" "TypeScript"
api = container "API" "Spring Boot"
db = container "Database" "PostgreSQL 16"
}
user -> web "Browses"
web -> api "Calls" "REST/JSON"
api -> db "Reads/writes" "JDBC"
}
}
Hexagonal Architecture (Python)
# domain/order.py — pure
class Order:
def confirm(self) -> "Order": ...
# application/ports.py
class OrderRepo(Protocol):
def save(self, o: Order) -> None: ...
# infra/postgres_order_repo.py — adapter
class PostgresOrderRepo:
def save(self, o: Order) -> None:
self.conn.execute("INSERT ...")
Event Storming output → bounded contexts
[Order Placed] → [Payment Authorized] → [Inventory Reserved] → [Order Confirmed]
Order BC Payment BC Inventory BC Order BC
매 결정 기준
| 상황 | Approach |
|---|---|
| 매 small team, simple domain | Modular monolith (Shopify-style) |
| 매 high read/write asymmetry | CQRS |
| 매 audit critical | Event sourcing |
| 매 polyglot / independent scaling | Microservices |
| 매 latency critical, ML inference | Service mesh + sidecar |
기본값: 매 modular monolith → 매 evidence 기반 매 split.
🔗 Graph
- 부모: 아키텍처 패턴 지식
- 변형: Hexagonal Architecture · CQRS · Event Sourcing
- 응용: Microservices · Cloud_Native
- Adjacent: Domain-Driven Design · ADR · C4 Model (Architecture Documentation)
🤖 LLM 활용
언제: 매 ADR 초안 / 매 trade-off 분석 / 매 quality attribute scenario 생성. 언제 X: 매 production-grade fitness function 의 자동 작성 — 매 human review 필수.
❌ 안티패턴
- Big design up-front: 매 evolution 무시.
- Architecture astronaut: 매 abstraction layer 과잉.
- Distributed monolith: 매 microservice 의 분리 but 매 coupling 유지.
- No fitness function: 매 drift 매 silently.
🧪 검증 / 중복
- Verified (Bass/Clements/Kazman, Software Architecture in Practice 4e; Ford, Building Evolutionary Architectures 2e).
- 신뢰도 A.
🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — 매 4+1, ADR, fitness function 패턴 추가 |