카테고리 없음

🏗 MSA (Microservices Architecture, 마이크로서비스 아키텍처)란?

nika0 2025. 2. 23. 14:19

MSA(Microservices Architecture)는 애플리케이션을 작은 독립적인 서비스 단위로 나누어 개발하고 운영하는 아키텍처 스타일입니다. 기존의 **모놀리식 아키텍처(Monolithic Architecture)**와 대비되며, 특히 대규모 서비스에서 유지보수성과 확장성을 높이기 위해 많이 사용됩니다.


🚀 왜 MSA가 필요할까? (MSA 등장 배경)

과거에는 모놀리식 아키텍처가 일반적이었지만, 다음과 같은 문제점이 있었습니다.

모놀리식 아키텍처(Monolithic Architecture)의 문제점

1️⃣ 배포 및 유지보수 어려움

  • 애플리케이션이 하나의 거대한 코드베이스로 구성 → 작은 변경도 전체 애플리케이션을 다시 배포해야 함
  • 일부 서비스가 문제를 일으키면 전체 시스템에 영향을 미칠 수 있음

2️⃣ 개발 및 확장성 부족

  • 특정 기능만 확장하려 해도 전체 시스템을 수정해야 함
  • 여러 팀이 협업할 때 같은 코드베이스에서 작업해야 하므로 충돌 발생 가능성이 높음

3️⃣ 기술 스택 변경 어려움

  • 특정 언어나 프레임워크에 종속되기 쉬움
  • 새로운 기술을 적용하려면 전체 시스템을 변경해야 함

💡 ➡ 해결책? → 서비스 단위를 쪼개서 독립적으로 운영하자!
이렇게 등장한 개념이 바로 **MSA(Microservices Architecture)**입니다.


🔹 MSA의 특징

1️⃣ 서비스 단위로 분리 (서비스 독립성)

  • 하나의 애플리케이션을 작은 서비스 단위로 분리
  • 각 서비스는 독립적으로 개발, 배포, 운영 가능

2️⃣ 독립적인 배포 가능

  • 하나의 서비스가 변경되더라도 전체 시스템을 재배포할 필요 없음
  • 특정 서비스만 업데이트 가능

3️⃣ 다양한 기술 스택 사용 가능

  • 서비스별로 적합한 언어나 프레임워크 사용 가능
  • 예) 주문 서비스는 Java + Spring, 결제 서비스는 Node.js 등

4️⃣ 팀 단위 개발 최적화

  • 각 서비스는 자율적으로 관리 가능
  • 특정 팀이 자신의 서비스만 담당하므로 협업이 효율적

5️⃣ 개별적인 확장성

  • 특정 서비스만 트래픽이 많다면 해당 서비스만 확장 가능
  • 예) 로그인 서비스는 작은 서버로 운영, 검색 서비스는 큰 서버로 확장

6️⃣ API 기반 통신 (REST, gRPC, 메시지 큐 등)

  • 서비스 간에는 API로 통신
  • REST, GraphQL, gRPC, 메시지 큐(Kafka, RabbitMQ) 등을 활용

🎯 MSA와 모놀리식 아키텍처 비교

모놀리식 아키텍처마이크로서비스 아키텍처 (MSA)

구성 방식 하나의 애플리케이션 독립적인 여러 서비스
배포 방식 전체를 한 번에 배포 각 서비스별 독립적 배포 가능
확장성 전체 애플리케이션 확장 필요 필요한 서비스만 확장 가능
개발 속도 개발 규모가 커질수록 느려짐 병렬 개발 가능, 속도 증가
기술 스택 하나의 기술만 사용 가능 서비스별 다양한 기술 적용 가능
유지보수 코드 복잡도 증가, 수정 어려움 변경이 필요한 서비스만 업데이트 가능

🔨 MSA에서 자주 사용하는 기술 스택

💡 MSA를 적용할 때 필수적으로 고려해야 하는 요소

🏗 1️⃣ API Gateway

  • 여러 개의 마이크로서비스를 한 곳에서 관리
  • 요청을 적절한 서비스로 라우팅하는 역할
  • 대표적인 API Gateway: Kong, Apigee, Nginx, AWS API Gateway

📦 2️⃣ 서비스 간 통신 (Service-to-Service Communication)

  • REST API (HTTP)
  • gRPC (빠른 성능)
  • 메시지 큐 (Kafka, RabbitMQ, SQS 등)

🔄 3️⃣ 서비스 디스커버리 (Service Discovery)

  • 서비스가 동적으로 변경될 수 있으므로, 이를 찾아주는 기능
  • 대표적인 서비스 디스커버리: Eureka, Consul, Kubernetes Service

📊 4️⃣ 로그 및 모니터링

  • 여러 서비스가 동작하므로 로그 수집 및 모니터링 필수
  • 대표적인 도구: ELK Stack, Prometheus + Grafana, Datadog

🔒 5️⃣ 보안

  • 서비스 간 통신 보안 (OAuth 2.0, JWT, API Key)
  • Zero Trust 보안 모델 적용

🎯 MSA를 도입할 때 고려해야 할 점

MSA가 항상 정답은 아니다!
MSA를 무조건 적용한다고 좋은 것은 아님. 다음과 같은 사항을 고려해야 함.

✅ MSA의 장점

✔ 개별 서비스 배포 가능 → 배포 속도 증가
✔ 특정 기능만 독립적으로 확장 가능 → 비용 절감
✔ 팀별로 독립적인 개발 가능 → 생산성 증가
✔ 다양한 기술 스택 적용 가능

❌ MSA의 단점

운영 복잡성 증가 → 여러 서비스가 존재하므로 관리해야 할 요소 많음
네트워크 비용 증가 → 서비스 간 API 통신이 많아지면서 성능 저하 가능
데이터 일관성 문제 → 서비스별로 DB를 분리하면 데이터 정합성 유지 어려움
배포 자동화 필요 → CI/CD 파이프라인 필수


🚀 MSA를 적용할 때 좋은 사례

✔ 대규모 트래픽을 처리해야 하는 서비스 (ex. 쿠팡, 네이버, 카카오)
✔ 다양한 기능을 가진 서비스 (ex. 이커머스, 핀테크)
✔ 빠른 배포와 독립적인 확장이 필요한 경우

✅ 작은 스타트업이라면 처음부터 MSA를 적용하기보다는 모놀리식으로 시작 후 필요 시 마이크로서비스로 전환하는 것이 좋음


🎯 결론: MSA는 무엇을 위한 것인가?

대규모 시스템의 유지보수성과 확장성을 높이기 위한 구조
비즈니스 도메인별로 독립적인 서비스 운영이 가능
✔ 하지만, 운영 복잡성과 네트워크 비용 증가 문제를 해결할 방법도 고려해야 함

💡 MSA가 만능 해결책은 아니다!
프로젝트의 특성과 규모에 따라 모놀리식 vs MSA 중 적절한 선택을 하는 것이 중요합니다. 🚀