Monolithic vs Microservices

μ‹œμŠ€ν…œμ„ κ΅¬μΆ•ν•˜λŠ” 방식은 크게 λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜μ™€ λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(Microservice Architecture, MSA)둜 λ‚˜λˆŒ 수 μžˆλ‹€.

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜(Monolithic Architecture)

λͺ¨λ†€λ¦¬μ‹ μ•„ν‚€ν…μ²˜λŠ” μ‹œμŠ€ν…œμ˜ λͺ¨λ“  κΈ°λŠ₯이 ν•˜λ‚˜μ˜ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— ν†΅ν•©λœ ꡬ쑰둜, λͺ¨λ“  둜직이 단일 ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ μ‹€ν–‰λ˜λ©°, 배포 λ‹¨μœ„λ„ ν•˜λ‚˜λ‹€.

  • 초기 개발 속도가 빠름

  • λͺ¨λ“  μ½”λ“œκ°€ ν•œκ³³μ— μžˆμ–΄ 둜직 좔적과 톡합 ν…ŒμŠ€νŠΈ 용이

ν•˜μ§€λ§Œ μ‹œμŠ€ν…œ 규λͺ¨κ°€ 컀지고 λΉ„μ¦ˆλ‹ˆμŠ€κ°€ λ³΅μž‘ν•΄μ§€λ©΄ λͺ¨λ†€λ¦¬μ‹ κ΅¬μ‘°λŠ” μ—¬λŸ¬ ν•œκ³„μ— λΆ€λ”ͺνžŒλ‹€.

  • 배포의 경직성: μž‘μ€ μ½”λ“œ μˆ˜μ •μœΌλ‘œ 전체 μ‹œμŠ€ν…œμ˜ λΉŒλ“œ, ν…ŒμŠ€νŠΈ, 배포λ₯Ό λ‹€μ‹œ 유발

  • λΉ„νš¨μœ¨μ μΈ ν™•μž₯μ„±: νŠΉμ • κΈ°λŠ₯(예: 검색)μ—λ§Œ νŠΈλž˜ν”½μ΄ λͺ°λ €λ„ μ‹œμŠ€ν…œ 전체λ₯Ό λ³΅μ œν•˜μ—¬ ν™•μž₯(Scale-out) ν•„μš”

  • 기술 μŠ€νƒμ˜ 쒅속성: ν•œλ²ˆ μ •ν•΄μ§„ 기술 μŠ€νƒ λ³€κ²½ 및 μƒˆλ‘œμš΄ κΈ°μˆ μ„ λ„μž…μ˜ 어렀움

  • 개발 병λͺ©: μ—¬λŸ¬ νŒ€μ΄ ν•˜λ‚˜μ˜ κ±°λŒ€ν•œ μ½”λ“œλ² μ΄μŠ€λ₯Ό λ™μ‹œμ— μˆ˜μ •μœΌλ‘œ μΈν•œ 좩돌과 μ‘°μ • λΉ„μš© 증가

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜(Microservice Architecture, MSA)

λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ μ•„ν‚€ν…μ²˜λŠ” ν•˜λ‚˜μ˜ 큰 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ—¬λŸ¬ 개의 μž‘μ€ μ„œλΉ„μŠ€λ‘œ λΆ„λ¦¬ν•˜λŠ” μ ‘κ·Ό 방식이닀.

핡심 원칙

  • 단일 μ±…μž„ 원칙: 각 μ„œλΉ„μŠ€λŠ” κ³ μœ ν•œ λΉ„μ¦ˆλ‹ˆμŠ€ μ˜μ—­(도메인)에 λŒ€ν•œ μ±…μž„μ„ 가짐

    • 도메인 주도 섀계(DDD)의 λ°”μš΄λ””λ“œ μ»¨ν…μŠ€νŠΈ(Bounded Context) κ°œλ…κ³Ό μœ μ‚¬

  • 독립적인 배포: μ„œλΉ„μŠ€λŠ” μ„œλ‘œ λ…λ¦½μ μœΌλ‘œ 개발, ν…ŒμŠ€νŠΈ, 배포 κ°€λŠ₯

  • λ°μ΄ν„°λ² μ΄μŠ€ 뢄리: 각 μ„œλΉ„μŠ€λŠ” μžμ‹ λ§Œμ˜ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ†Œμœ ν•˜λŠ” 것을 μ§€ν–₯(μ„œλΉ„μŠ€ κ°„ κ°•ν•œ κ²°ν•© λ°©μ§€)

  • 기술 λ‹€μ–‘μ„±: 각 μ„œλΉ„μŠ€μ— κ°€μž₯ μ ν•©ν•œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄, ν”„λ ˆμž„μ›Œν¬, λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό 자유둭게 선택 κ°€λŠ₯

μž₯점

  • 선택적 ν™•μž₯μ„±: νŠΈλž˜ν”½μ΄ λͺ°λ¦¬λŠ” νŠΉμ • μ„œλΉ„μŠ€(예: 결제)만 μ„ νƒμ μœΌλ‘œ ν™•μž₯ν•  수 μžˆμ–΄ μžμ› νš¨μœ¨μ„± κ·ΉλŒ€ν™”

  • λΉ λ₯Έ 배포 μ£ΌκΈ°: 각 νŒ€μ΄ 맑은 μ„œλΉ„μŠ€λ₯Ό λ…λ¦½μ μœΌλ‘œ λΉ λ₯΄κ²Œ 배포 κ°€λŠ₯

  • μž₯μ•  격리: ν•˜λ‚˜μ˜ μ„œλΉ„μŠ€μ— μž₯μ• κ°€ λ°œμƒν•˜λ”λΌλ„, ν•΄λ‹Ή μž₯μ• κ°€ μ‹œμŠ€ν…œ μ „μ²΄μ˜ μ€‘λ‹¨μœΌλ‘œ μ΄μ–΄μ§€λŠ” 것을 λ°©μ§€ κ°€λŠ₯

  • νŒ€μ˜ μžμœ¨μ„±: μž‘μ€ νŒ€μ΄ νŠΉμ • μ„œλΉ„μŠ€μ˜ 전체 라이프사이클을 μ±…μž„μ§€λ©°, μ˜μ‚¬κ²°μ • 속도 ν–₯상

MSAκ°€ λ§ˆμ£Όν•˜λŠ” μƒˆλ‘œμš΄ 도전 과제

MSAκ°€ λͺ¨λ†€λ¦¬μ‹μ˜ 문제λ₯Ό ν•΄κ²°ν•˜μ§€λ§Œ, λΆ„μ‚° μ‹œμŠ€ν…œ 고유의 λ³΅μž‘μ„±μ„ μƒˆλ‘­κ²Œ λ§Œλ“€μ–΄λ‚Έλ‹€.

  1. λΆ„μ‚° νŠΈλžœμž­μ…˜κ³Ό 데이터 일관성

    • μ„œλΉ„μŠ€λ§ˆλ‹€ λ°μ΄ν„°λ² μ΄μŠ€κ°€ λΆ„λ¦¬λ˜λ©΄, μ—¬λŸ¬ μ„œλΉ„μŠ€μ— 걸친 데이터 변경을 ν•˜λ‚˜μ˜ νŠΈλžœμž­μ…˜μœΌλ‘œ 묢을 수 μ—†μŒ

    • SAGA νŒ¨ν„΄μ„ μ‚¬μš©ν•΄ μ΅œμ’… 일관성(Eventual Consistency)을 λ§žμΆ”κ±°λ‚˜, νŠΈλžœμž­μ…”λ„ μ•„μ›ƒλ°•μŠ€ νŒ¨ν„΄ λ“± ν™œμš©

  2. λ„€νŠΈμ›Œν¬ 톡신과 μž₯μ•  μ „νŒŒ

    • REST APIλ‚˜ gRPC 같은 동기식 ν˜ΈμΆœμ€ ν•˜λ‚˜μ˜ μ„œλΉ„μŠ€ μ§€μ—°μ΄λ‚˜ μž₯μ• κ°€ ν˜ΈμΆœν•œ μ„œλΉ„μŠ€μ— μ—°μ‡„μ μœΌλ‘œ μ „νŒŒ κ°€λŠ₯

    • μž₯μ• κ°€ λ°œμƒν•œ μ„œλΉ„μŠ€λ₯Ό μΌμ‹œμ μœΌλ‘œ μ°¨λ‹¨ν•˜λŠ” μ„œν‚· 브레이컀 νŒ¨ν„΄ λ„μž… ν•„μš”

  3. μ„œλΉ„μŠ€ 탐색 (Service Discovery)

    • μˆ˜λ§Žμ€ μ„œλΉ„μŠ€κ°€ λ™μ μœΌλ‘œ μƒμ„±λ˜κ³  μ§€λŠ” ν™˜κ²½μ—μ„œ 각 μ„œλΉ„μŠ€μ˜ μœ„μΉ˜(IP, Port)λ₯Ό κ΄€λ¦¬ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜ ν•„μš”

    • Eureka, Consul 같은 μ„œλΉ„μŠ€ λ””μŠ€μ»€λ²„λ¦¬ 도ꡬ ν™œμš©

  4. 운영 및 λͺ¨λ‹ˆν„°λ§μ˜ λ³΅μž‘μ„±

    • 배포, λͺ¨λ‹ˆν„°λ§, λ‘œκΉ…, μ„€μ • 관리가 λͺ¨λ‘ λΆ„μ‚°λ˜μ–΄ λ³΅μž‘λ„κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ 증가

    • ν•˜λ‚˜μ˜ μš”μ²­μ„ μΆ”μ ν•˜κΈ° μœ„ν•΄ μ—¬λŸ¬ μ„œλΉ„μŠ€μ˜ 둜그λ₯Ό μ—°κ²°ν•˜λŠ” λΆ„μ‚° 좔적 μ‹œμŠ€ν…œ ν•„μš”

Last updated

Was this helpful?