20

Why: 설계 없이 코딩하면 벌어지는 일

시스템 아키텍처 설계

학습 목표

설계 없이 통합했을 때 발생하는 문제를 이해한다 MVP에서의 "적정 설계" 수준을 판단할 수 있다 모놀리식 vs 마이크로서비스의 트레이드오프를 안다

설계 없이 코딩하면 벌어지는 일

흔한 실패 시나리오

[1일차] "일단 코드부터 쓰자!"
  -> RAG 코드 복사, Agent 코드 복사, 합치기 시작

[2일차] "어? 패키지 충돌이..."
  -> langchain 버전이 RAG랑 Agent에서 다름
  -> chromadb 초기화 코드가 두 군데서 충돌

[3일차] "Agent에서 RAG를 호출하려니까..."
  -> 임포트 순환 참조 (circular import)
  -> config가 여기저기 하드코딩됨

[4일차] "UI 붙이려니까 구조가..."
  -> 어디에 어떤 함수가 있는지 모름
  -> 전역 변수가 얽혀서 리팩토링 지옥

[5일차] "데모 불가능합니다..."
  -> 팀장: "..."

설계 없이 5일 코딩 = 대혼란. 설계에 1일 투자 = 나머지 4일이 순탄.


MVP 설계의 핵심 원칙

1. YAGNI (You Ain't Gonna Need It)

[오버엔지니어링]                    [MVP 설계]
Kubernetes 클러스터           vs    Docker Compose
마이크로서비스 8개            vs    모놀리식 1개
Kafka 메시지 큐               vs    함수 직접 호출
Redis 캐시 + CDN              vs    메모리 캐시
CI/CD 파이프라인              vs    docker compose up

MVP의 목표는 "완벽한 시스템"이 아니라 "동작하는 데모"

2. 의존성 방향 원칙

[좋은 구조]                [나쁜 구조]

  UI Layer                   UI
    |                       / | \
  Service Layer          RAG Agent KG
    |    |                 \ | /
  RAG  Agent  KG          Database
    \   |   /
   Data Layer             (서로 참조, 순환 의존)

규칙: 상위 레이어만 하위 레이어를 참조한다. 역방향 금지.

3. 단일 진입점 (Single Entry Point)

# 나쁜 예: 여러 진입점
python rag_server.py &     # 포트 8001
python agent_server.py &   # 포트 8002
python kg_server.py &      # 포트 8003
streamlit run ui.py        # 포트 8501
# -> 4개 프로세스 관리 필요

# 좋은 예: 단일 진입점
streamlit run app/main.py  # 포트 8501
# -> 내부에서 RAG, Agent, KG 모듈 import

아키텍처 선택: 모놀리식 MVP

구분모놀리식 (MVP)마이크로서비스
개발 속도빠름 (5일 가능)느림 (3주+)
복잡도낮음높음
디버깅쉬움 (단일 프로세스)어려움 (분산 추적)
배포docker compose upK8s 클러스터 필요
확장성제한적유연함
MVP 적합성최적오버엔지니어링

먼저 모놀리식으로 검증하고, 성공하면 필요한 부분만 분리하라. -- Martin Fowler, "MonolithFirst"


핵심 질문

다음 질문에 답할 수 있으면, 아키텍처 설계 준비가 된 것이다:

  1. 시스템의 주요 컴포넌트는 몇 개인가?
  2. 각 컴포넌트 사이의 데이터 흐름은 어떤가?
  3. 외부 의존성 (API, DB)은 무엇인가?
  4. 사용자의 핵심 유스케이스는 무엇인가?
AI로 학습하기 — 꿀팁
설계 없는 통합의 기술 부채 점검AI 학습 팁

AI가 설명한 설계 없는 통합의 문제점이 실제 소프트웨어 공학 원칙(SOLID, 의존성 역전)과 일치하는지 검증하세요.

제조 AI 통합 시스템을 설계 없이 바로 코딩했을 때 발생하는 문제(스파게티 의존성, 테스트 불가, 변경 시 연쇄 오류)에 대해 설명받았는데, 이 문제들이 SOLID 원칙(특히 의존성 역전, 단일 책임)과 클린 아키텍처 관점에서 어떤 위반인지 명시하고, 제조 AI 통합에서의 '적정 설계' 수준(MVP vs 풀 아키텍처)의 판단 기준을 구체적 예시로 제시해줘.
이 팁이 도움이 됐나요?