--- id: P-REINFORCE-WIKI-8E4ED021 category: "10_Wiki/πŸ’‘ Topics/02_Architecture_Principles" confidence_score: 0.95 tags: ['microservices-architecture-(msa)', 'monolithic-architecture', 'domain-driven-design-(ddd)', 'event-driven-architecture-(eda)', 'service-mesh', 'architecture-principles'] last_reinforced: 2026-05-02 --- # [[Microservices Architecture (MSA)]] ## πŸ“Œ Brief Summary λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(MSA)λŠ” λŒ€κ·œλͺ¨μ˜ 단일(Monolithic) μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯ λ‹¨μœ„λ‘œ λΆ„ν• ν•˜μ—¬ λ…λ¦½μ μœΌλ‘œ 배포 및 μ‹€ν–‰ κ°€λŠ₯ν•œ μž‘μ€ μ„œλΉ„μŠ€λ“€μ˜ μ§‘ν•©μœΌλ‘œ μ„€κ³„ν•˜λŠ” μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄λ‹€ [1-4]. 각 μ„œλΉ„μŠ€λŠ” 고유의 ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•˜λ©° API와 같은 κ²½λŸ‰ν™”λœ 톡신 λ©”μ»€λ‹ˆμ¦˜μ„ 톡해 μƒν˜Έμž‘μš©ν•œλ‹€ [2, 5, 6]. 이λ₯Ό 톡해 쑰직은 μ‹œμŠ€ν…œμ˜ μœ μ—°μ„±, ν™•μž₯μ„±, 볡원λ ₯을 ν™•λ³΄ν•˜κ³  개발 및 배포 속도λ₯Ό κ·ΉλŒ€ν™”ν•  수 μžˆλ‹€ [4, 7]. ## πŸ“– Core Content * **μžμœ¨μ„±κ³Ό 독립성 (Autonomy & Isolation):** 각 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λŠ” 독립적인 μ½”λ“œλ² μ΄μŠ€μ™€ λŸ°νƒ€μž„ ν™˜κ²½, 그리고 κ°œλ³„μ μΈ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λ³΄μœ ν•˜λŠ” 'μ„œλΉ„μŠ€λ‹Ή λ°μ΄ν„°λ² μ΄μŠ€(Database per Service)' νŒ¨ν„΄μ„ λ”°λ₯Έλ‹€ [6, 8-10]. 이λ₯Ό 톡해 ν•œ μ„œλΉ„μŠ€μ— λ°œμƒν•œ κ²°ν•¨μ΄λ‚˜ λ©”λͺ¨λ¦¬ λˆ„μˆ˜ 등이 전체 μ‹œμŠ€ν…œμœΌλ‘œ μ „νŒŒλ˜λŠ” 것을 λ°©μ§€ν•˜λŠ” 결함 격리(Fault isolation)κ°€ κ°€λŠ₯ν•˜λ‹€ [9, 11]. * **단일 μ±…μž„ 원칙 (Single Responsibility)κ³Ό 도메인 주도 섀계:** 각 μ„œλΉ„μŠ€λŠ” 였직 ν•˜λ‚˜μ˜ λΉ„μ¦ˆλ‹ˆμŠ€ κΈ°λŠ₯μ΄λ‚˜ μ±…μž„μ—λ§Œ μ§‘μ€‘ν•˜λ©°, λ‹€λ₯Έ μ„œλΉ„μŠ€μ˜ κΈ°λŠ₯κ³Ό κ²ΉμΉ˜μ§€ μ•ŠλŠ”λ‹€ [12]. μ„œλΉ„μŠ€μ˜ κ²½κ³„λŠ” 도메인 주도 섀계(DDD) 원칙을 기반으둜 λΉ„μ¦ˆλ‹ˆμŠ€ μ—­λŸ‰μ„ μ€‘μ‹¬μœΌλ‘œ μ‘°μ§λœλ‹€ [6, 12]. * **톡신 및 톡합 λ©”μ»€λ‹ˆμ¦˜:** λ³΅μž‘ν•œ λ‘œμ§μ€ μ„œλΉ„μŠ€ 내뢀에 두고 μ„œλΉ„μŠ€ κ°„ 톡신은 λ‹¨μˆœν•˜κ²Œ μœ μ§€ν•˜λŠ” '슀마트 μ—”λ“œν¬μΈνŠΈμ™€ 덀 νŒŒμ΄ν”„(Smart Endpoints and Dumb Pipes)' 원칙을 μ μš©ν•œλ‹€ [6]. μ„œλΉ„μŠ€ κ°„ 톡신은 주둜 HTTP/REST APIλ‚˜ λ©”μ‹œμ§€ 큐(Kafka, RabbitMQ λ“±)λ₯Ό ν†΅ν•œ 비동기 이벀트 전달 λ°©μ‹μœΌλ‘œ 이루어진닀 [2, 13, 14]. 물리적 λ„€νŠΈμ›Œν¬ μ£Όμ†Œμ— ꡬ애받지 μ•ŠλŠ” μœ„μΉ˜ 투λͺ…μ„±(Location Transparency)을 μœ„ν•΄ μ„œλΉ„μŠ€ λ©”μ‹œ(Service Mesh)λ‚˜ λ””μŠ€μ»€λ²„λ¦¬ λ ˆμ§€μŠ€νŠΈλ¦¬κ°€ ν™œμš©λœλ‹€ [15]. * **독립적인 μŠ€μΌ€μΌλ§κ³Ό 기술 μŠ€νƒ μœ μ—°μ„±:** 각 νŒ€μ€ μ„œλΉ„μŠ€ νŠΉμ„±μ— 맞좰 κ°€μž₯ μ ν•©ν•œ ν”„λ‘œκ·Έλž˜λ° 언어와 ν”„λ ˆμž„μ›Œν¬λ₯Ό 자유둭게 선택할 수 있으며 [11, 16], νŠΈλž˜ν”½ 증가 λ“± ν•„μš”μ— 따라 전체 앱을 ν™•μž₯ν•  ν•„μš” 없이 νŠΉμ • μ„œλΉ„μŠ€λ§Œ κ°œλ³„μ μœΌλ‘œ ν™•μž₯(Scaling)ν•  수 μžˆλ‹€ [4, 7, 11]. ## βš–οΈ Trade-offs & Caveats * **μž₯점 (Pros):** κ°œλ³„ μ„œλΉ„μŠ€ λ‹¨μœ„λ‘œ μ‹œμŠ€ν…œμ„ μˆ˜ν‰μ μœΌλ‘œ λΉ λ₯΄κ²Œ ν™•μž₯ν•  수 있고, νŠΉμ • μ„œλΉ„μŠ€λ§Œ λ…λ¦½μ μœΌλ‘œ 지속적 배포(CI/CD)κ°€ κ°€λŠ₯ν•˜μ—¬ 개발 μ£ΌκΈ°κ°€ λ‹¨μΆ•λœλ‹€ [7, 11, 16, 17]. λ˜ν•œ μž₯μ•  격리 κΈ°λŠ₯이 μš°μˆ˜ν•˜μ—¬ μ‹œμŠ€ν…œ μ „μ²΄μ˜ 볡원λ ₯이 ν–₯μƒλœλ‹€ [4, 9, 11]. * **단점 및 μ œμ•½ 사항 (Cons/Trade-offs):** * **λΆ„μ‚° μ‹œμŠ€ν…œμ˜ λ³΅μž‘μ„± 및 톡신 μ§€μ—°:** μˆ˜λ§Žμ€ μ„œλΉ„μŠ€κ°€ λ„€νŠΈμ›Œν¬λ₯Ό 톡해 ν†΅μ‹ ν•˜λ―€λ‘œ, λ„€νŠΈμ›Œν¬ μ§€μ—°(Latency) 및 νŠΈλž˜ν”½ 혼작이 λ°œμƒν•  수 있으며 관리 도ꡬ 및 운영 인프라 κ΅¬μΆ•μ˜ μ˜€λ²„ν—€λ“œκ°€ 크닀 [18-22]. * **데이터 일관성 μœ μ§€μ˜ 어렀움:** 각 μ„œλΉ„μŠ€κ°€ λ³„λ„μ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό κ°€μ§€λ―€λ‘œ 기쑴의 단일 ACID νŠΈλžœμž­μ…˜ μ²˜λ¦¬κ°€ μ–΄λ ΅λ‹€ [23]. λŒ€μ‹  Saga νŒ¨ν„΄, API μ»΄ν¬μ§€μ…˜(API Composition), CQRS νŒ¨ν„΄ 등을 톡해 λ³΅μž‘ν•œ μ΅œμ’… 일관성(Eventual Consistency) λͺ¨λΈμ„ κ΅¬ν˜„ν•΄μ•Ό ν•œλ‹€ [24, 25]. * **운영 및 λ””λ²„κΉ…μ˜ 고도화 μš”κ΅¬:** μ—¬λŸ¬ μ„œλΉ„μŠ€μ— 걸쳐 λ°œμƒν•˜λŠ” 였λ₯˜μ˜ κ·Όλ³Έ 원인을 νŒŒμ•…ν•˜κΈ° μœ„ν•΄ Jaeger λ“±κ³Ό 같은 λΆ„μ‚° νŠΈλ ˆμ΄μ‹±(Distributed Tracing) 및 λΆ„μ‚° 둜그 μˆ˜μ§‘ 체계가 ν•„μˆ˜μ μ΄λ‹€ [18, 21, 25]. * **인프라 λΉ„μš©:** λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μš΄μ˜μ„ μœ„ν•΄ Kubernetes, Docker와 같은 μ»¨ν…Œμ΄λ„ˆ ν™˜κ²½, API κ²Œμ΄νŠΈμ›¨μ΄, μ„œλΉ„μŠ€ λ©”μ‹œ(Istio λ“±) λ“±μ˜ μΆ”κ°€ λ¦¬μ†ŒμŠ€ 및 ν΄λΌμš°λ“œ μžμ›μ΄ μš”κ΅¬λ˜μ–΄ 개발 및 μœ μ§€ λΉ„μš©μ΄ μƒμŠΉν•  수 μžˆλ‹€ [11, 18, 26]. ## πŸ”— Knowledge Connections ### Related Concepts #### [관계 μœ ν˜• A: μ•„ν‚€ν…μ²˜/기반 기술] * [[Monolithic Architecture]] * μ—°κ²° 이유: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λŒ€μ²™μ μ— μžˆλŠ” 전톡적인 μ•„ν‚€ν…μ²˜ νŒ¨ν„΄. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λͺ¨λ“  ꡬ성 μš”μ†Œκ°€ ν•˜λ‚˜μ˜ μ½”λ“œλ² μ΄μŠ€μ— κ°•ν•˜κ²Œ κ²°ν•©(Tight coupling)λ˜μ–΄ μžˆμ–΄ 전체λ₯Ό ν™•μž₯ν•˜κ³  배포해야 ν•˜λŠ” λͺ¨λ†€λ¦¬μŠ€μ˜ ν•œκ³„λ₯Ό μ΄ν•΄ν•¨μœΌλ‘œμ¨, MSAκ°€ μ œκ³΅ν•˜λŠ” μ„œλΉ„μŠ€ 뢄리와 ν™•μž₯μ„±μ˜ ν•„μš”μ„±μ„ λͺ…ν™•νžˆ ν•  수 μžˆλ‹€ [3, 27, 28]. * [[Domain-Driven Design (DDD)]] * μ—°κ²° 이유: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ 경계λ₯Ό μ‹λ³„ν•˜κ³  μ„€κ³„ν•˜λŠ” μ£Όμš” μ§€μΉ¨ 및 기법. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λΉ„μ¦ˆλ‹ˆμŠ€ 도메인을 κΈ°μ€€μœΌλ‘œ μ‹œμŠ€ν…œμ„ μ–΄λ–»κ²Œ λΆ„ν• ν•΄μ•Ό 각 μ„œλΉ„μŠ€κ°€ 단일 μ±…μž„ 원칙과 μžμœ¨μ„±μ„ μœ μ§€ν•  수 μžˆλŠ”μ§€ κ·Έ 원리λ₯Ό νŒŒμ•…ν•  수 μžˆλ‹€ [6, 12]. * [[Event-Driven Architecture (EDA)]] * μ—°κ²° 이유: MSA ν™˜κ²½μ—μ„œ μ„œλΉ„μŠ€ κ°„ λŠμŠ¨ν•œ κ²°ν•©(Loose coupling)κ³Ό 비동기 톡신을 μ§€μ›ν•˜λŠ” 핡심 μ•„ν‚€ν…μ²˜ νŒ¨ν„΄. * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ°„ 직접적인 동기 호좜(API)의 μ„±λŠ₯ 병λͺ©μ„ ν”Όν•˜κ³ , μƒνƒœ λ³€ν™”(이벀트)에 따라 μ—¬λŸ¬ μ„œλΉ„μŠ€μ˜ 데이터λ₯Ό λ™κΈ°ν™”ν•˜κ³  λ°˜μ‘ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ„ 배울 수 μžˆλ‹€ [14, 24, 25]. #### [관계 μœ ν˜• B: κ΅¬ν˜„/ν™œμš© 도ꡬ] * [[Service Mesh]] * μ—°κ²° 이유: μˆ˜λ§Žμ€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ κ°„μ˜ λ³΅μž‘ν•œ 톡신을 μ€‘μ•™μ—μ„œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•œ 인프라 계측(예: Istio). * 이 κ°œλ…μ„ 톡해 더 깊게 이해할 수 μžˆλŠ” λΆ€λΆ„: μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬, νŠΈλž˜ν”½ λΌμš°νŒ…, λ³΄μ•ˆ(μƒν˜Έ TLS), κ΄€μΈ‘μ„± 및 톡신 μ‹€νŒ¨ λ°©μ§€ λ“± λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ ν•„μ—°μ μœΌλ‘œ λ°œμƒν•˜λŠ” λ„€νŠΈμ›Œν¬ 톡신 λ³΅μž‘μ„±μ„ μ–΄λ–»κ²Œ μΆ”μƒν™”ν•˜κ³  μ œμ–΄ν•˜λŠ”μ§€ 이해할 수 μžˆλ‹€ [26, 29-31]. ### Deeper Research Questions * λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜ ν™˜κ²½μ—μ„œ κ°œλ³„ λΆ„μ‚° λ°μ΄ν„°λ² μ΄μŠ€ κ°„μ˜ μ΅œμ’… 일관성(Eventual Consistency)을 보μž₯ν•˜κΈ° μœ„ν•΄ Saga νŒ¨ν„΄κ³Ό CQRS νŒ¨ν„΄μ€ 각각 μ–΄λ–»κ²Œ λ™μž‘ν•˜λ©°, κ΅¬ν˜„ μ‹œμ˜ ν•œκ³„μ™€ νŠΈλ ˆμ΄λ“œμ˜€ν”„λŠ” 무엇인가? * λͺ¨λ†€λ¦¬μ‹ μ‹œμŠ€ν…œμ—μ„œ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ν•  λ•Œ λ°μ΄ν„°λ² μ΄μŠ€ ꡬ쑰λ₯Ό μ„±κ³΅μ μœΌλ‘œ 뢄리(Database per Service)ν•˜κΈ° μœ„ν•œ μ „λž΅κ³Ό 이 κ³Όμ •μ—μ„œ λ°œμƒν•˜λŠ” λ¦¬μŠ€ν¬λŠ” 무엇인가? * MSA λ‚΄μ—μ„œ νŠΉμ • μ„œλΉ„μŠ€μ˜ μ§€μ—°μ΄λ‚˜ μž₯μ• κ°€ λ‹€λ₯Έ μ„œλΉ„μŠ€λ‘œ 연쇄 μ „νŒŒ(Cascading Failure)λ˜λŠ” 것을 막기 μœ„ν•΄ μ„œν‚· 브레이컀(Circuit Breaker) νŒ¨ν„΄μ€ μ–΄λ–»κ²Œ μž‘λ™ν•˜λŠ”κ°€? * λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λ₯Ό λ„μž…ν•  λ•Œ 쑰직의 규λͺ¨, μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ³΅μž‘μ„±, 배포 μ£ΌκΈ°λ₯Ό κ³ λ €ν–ˆμ„ λ•Œ, μ˜€λ²„μ—”μ§€λ‹ˆμ–΄λ§μ„ ν”Όν•˜κΈ° μœ„ν•œ 졜적의 λ„μž… 쑰건(Sweet Spot)은 무엇인가? * ν΄λΌμ΄μ–ΈνŠΈμ˜ μš”μ²­μ΄ λ‹€μˆ˜μ˜ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€λ‘œ ν©μ–΄μ§ˆ λ•Œ API GatewayλŠ” 인증, λΌμš°νŒ…, λ‘œλ“œ λ°ΈλŸ°μ‹± λ“±μ˜ μΈ‘λ©΄μ—μ„œ μ–΄λ–€ ν•„μˆ˜μ μΈ 역할을 μˆ˜ν–‰ν•˜λŠ”κ°€? ### Practical Application Contexts * **Implementation:** κΈ°μ‘΄ λͺ¨λ†€λ¦¬μ‹ 앱을 νšŒμ›, 결제, 재고 λ“± μ£Όμš” κΈ°λŠ₯(도메인)λ³„λ‘œ μͺΌκ°œμ–΄ 각각 λ…λ¦½λœ μ»¨ν…Œμ΄λ„ˆμ— λ°°ν¬ν•˜κ³  λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό λΆ„λ¦¬ν•˜μ—¬ κ΅¬ν˜„ν•œλ‹€ [32-34]. * **System Design:** API Gatewayλ₯Ό μ‹œμŠ€ν…œμ˜ μ§„μž…μ μœΌλ‘œ 두고 μ„œλΉ„μŠ€ 톡신 κ°„ μ‹€νŒ¨λ₯Ό λŒ€λΉ„ν•΄ μ„œν‚· 브레이컀λ₯Ό μ„€κ³„ν•˜λ©°, 데이터 동기화λ₯Ό μœ„ν•΄ 이벀트 브둜컀(Kafka λ“±)와 Saga/Outbox νŒ¨ν„΄μ„ μ‹œμŠ€ν…œ ꡬ성에 ν¬ν•¨μ‹œν‚¨λ‹€ [24, 35]. * **Operation / Maintenance:** κ°œλ³„ μ„œλΉ„μŠ€μ˜ μžμœ¨μ„±μ΄ 높은 λŒ€μ‹ , 였λ₯˜ 좔적을 μœ„ν•΄ 각 μ„œλΉ„μŠ€μ—μ„œ μƒμ„±λ˜λŠ” λ‘œκ·Έμ™€ λ©”νŠΈλ¦­μ„ μ€‘μ•™ν™”ν•˜κ³  상관관계 ID(Correlation ID) 기반의 λΆ„μ‚° νŠΈλ ˆμ΄μ‹±μ„ 톡해 전체 νŠΈλžœμž­μ…˜μ„ λͺ¨λ‹ˆν„°λ§ν•΄μ•Ό ν•œλ‹€ [36-38]. * **Learning Path:** λͺ¨λ†€λ¦¬μ‹ 및 κ³„μΈ΅ν˜• μ•„ν‚€ν…μ²˜ ꡬ쑰 이해 -> 도메인 주도 섀계(DDD) ν•™μŠ΅ -> μ»¨ν…Œμ΄λ„ˆλΌμ΄μ œμ΄μ…˜(Docker, Kubernetes) μŠ΅λ“ -> λΆ„μ‚° μ‹œμŠ€ν…œ 톡신(Service Mesh, EDA) μ›λ¦¬λ‘œ 지식을 μ μ§„μ μœΌλ‘œ ν™•μž₯ν•œλ‹€. * **My Project Relevance:** μ„œλΉ„μŠ€ νŠΈλž˜ν”½μ΄ ν­μ¦ν•˜μ—¬ νŠΉμ • κΈ°λŠ₯(예: 결제 처리)의 μ„œλ²„λ§Œ 증섀해야 ν•˜κ±°λ‚˜, 개발 νŒ€μ΄ μ»€μ Έμ„œ κΈ°λŠ₯λ³„λ‘œ νŒ€μ˜ 배포 일정을 뢄리해야 ν•  λ•Œ μ‹œμŠ€ν…œ ν™•μž₯ 및 민첩성 κ°•ν™”λ₯Ό μœ„ν•΄ λ„μž…μ„ κ²€ν† ν•  수 μžˆλ‹€. ### Adjacent Topics * [[Modular Monolith]] * ν™•μž₯ λ°©ν–₯: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ λ„€νŠΈμ›Œν¬ 톡신 및 λΆ„μ‚° νŠΈλžœμž­μ…˜ λ³΅μž‘μ„±μ„ ν”Όν•˜λ©΄μ„œλ„, μ• ν”Œλ¦¬μΌ€μ΄μ…˜ λ‚΄λΆ€μ μœΌλ‘œ 도메인 경계λ₯Ό μ—„κ²©νžˆ λ‚˜λˆ„μ–΄ λͺ¨λ“ˆμ„±μ„ ν™•λ³΄ν•˜λŠ” λŒ€μ•ˆμ  μ•„ν‚€ν…μ²˜ μ „λž΅μœΌλ‘œ ν•™μŠ΅ ν™•μž₯ [39-41]. * [[Serverless Architecture]] * ν™•μž₯ λ°©ν–₯: λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ—μ„œ ν•œ 단계 더 λ‚˜μ•„κ°€ μ„œλ²„ 인프라 관리 자체λ₯Ό ν΄λΌμš°λ“œ μ œκ³΅μžμ—κ²Œ λ§‘κΈ°κ³  μ΄λ²€νŠΈμ— λ°˜μ‘ν•˜λŠ” κ°œλ³„ ν•¨μˆ˜(Function) λ‹¨μœ„λ‘œ λ‘œμ§μ„ μͺΌκ°œλŠ” ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ λ°œμ „ λͺ¨λΈ 탐ꡬ [41-43]. --- *Last updated: 2026-05-02*