마이크로서비스 아키텍처(MSA)
기술노트
== ⚡ 마이크로서비스 아키텍처(MSA, Microservices Architecture)란? ==
'''마이크로서비스 아키텍처(MSA, Microservices Architecture)'''는
하나의 큰 애플리케이션을 작은 단위의 독립적인 서비스로 나누어 개발·운영하는 소프트웨어 설계 방식입니다.
- 서비스별로 '''독립 배포·확장·관리'''가 가능하며, 서비스끼리는 '''API'''를 통해 통신합니다.
- 넷플릭스, 아마존, 쿠팡과 같은 대규모 플랫폼 기업들이 적극적으로 채택하고 있습니다.
=== 🔧 MSA의 특징 ===
- 독립적인 작은 서비스 (Independent Services) : 서비스별로 개별 팀이 책임지고, 독립적인 프로세스/컨테이너에서 동작합니다.
- API 기반 통신 (Communication via API) : 서비스끼리 HTTP/REST, gRPC, 메시지 큐(카프카, RabbitMQ 등)로 상호작용합니다.
- 분산 데이터 관리 (Decentralized Data Management) : 서비스별로 별도의 데이터베이스를 관리하여 데이터가 독립적입니다.
- 자동화 및 DevOps 문화 필수 (Automation & DevOps) : 빠른 배포와 무중단 업데이트를 위해 CI/CD 및 자동화된 배포 환경 구축이 필수입니다.
- 장애 격리 (Fault Isolation) : 특정 서비스 장애 시 전체 시스템으로 전파되지 않고 해당 서비스만 격리 가능합니다.
=== 📊 MSA vs 모놀리식 아키텍처 ===
{| class="wikitable"
! 구분 !! 모놀리식 (Monolithic) !! MSA (Microservices) |
---|
애플리케이션 구조 |
- |
배포 방식 |
- |
장애 영향 범위 |
- |
기술 스택 |
- |
확장성 |
} |
=== 📦 MSA 예시 구조 ===
[[파일:MSA-architecture-example.png|600px|가운데|MSA 구조 예시]]
: 각 서비스는 독립 배포, 독립 데이터베이스를 가지며 API로만 통신합니다.
=== ✅ MSA가 적합한 경우 ===
- 서비스의 '''빠른 개발과 빈번한 변경'''이 필요할 때
- 서비스별로 독립된 팀 운영이 필요할 때
- '''대규모 트래픽'''을 처리하기 위해 '''수평 확장성'''이 필수적일 때
=== ⚠️ MSA가 부적합한 경우 ===
- 소규모 서비스로 관리 복잡성이 과도할 때
- 조직의 DevOps 역량과 경험이 부족할 때
=== 🔑 실전 운영 시 고려할 사항 ===
- 서비스 경계는 반드시 '''도메인 중심'''으로 명확히 나눕니다.
- 서비스 간 통신을 위한 '''API 게이트웨이'''와 '''서비스 디스커버리'''를 반드시 구축합니다.
- 로그 관리와 모니터링 시스템 구축은 필수입니다. (Elastic Stack, Prometheus 등)
- 서비스 간 데이터 일관성은 '''Event-Driven 설계'''나 '''Saga 패턴'''으로 해결합니다.
=== 💡 개발자가 꼭 알아야 할 MSA 요약 ===
- MSA는 서비스 단위로 독립된 작은 서비스 아키텍처입니다.
- 서비스끼리 API로 소통하며, 독립 배포 및 확장 가능합니다.
- 운영 복잡도가 높아 자동화, DevOps 역량이 필수입니다.
- 도메인 중심 설계, API 게이트웨이, 서비스 디스커버리 구축이 필수입니다.
== 📚 참고 자료 ==
- [https://technote.wiki technote.wiki - 마이크로서비스 아키텍처]
- [https://d2.naver.com/helloworld/4769021 네이버 D2 - MSA 가이드]
- [https://martinfowler.com/articles/microservices.html Martin Fowler - Microservices]