본문 바로가기
Backend

[Backend] MSA 환경에서 반드시 고려해야 할 핵심 이슈와 해결 방법

by SeungyubLee 2025. 10. 31.

 

※ MSA(Microservices Architecture)

하나의 큰 애플리케이션을 독립적인 여러 서비스로 분리하여 개발하고 운영하는 소프트웨어 아키텍처 방식

각 서비스는 고유한 기능을 담당하며, 독립적인 배포·확장·운영이 가능하도록 설계된다.

 

※ 왜 MSA를 사용할까?

기존의 모놀리식(Monolithic) 방식은 기능이 커지고 복잡해질수록 다음과 같은 문제가 발생한다.
· 한 부분의 변경이 전체 서비스에 영향을 줌
· 배포가 느리고 위험도가 큼
· 성능 확장 시 전체 시스템을 확장해야 함

반면 MSA는 기능 단위로 분리되어 있어,
· 필요한 서비스만 독립적으로 확장(Scale-out) 할 수 있고
· 서비스별로 다른 기술 스택 선택이 가능하며
· 기능 단위로 빠르게 배포 및 장애 대응할 수 있다.

특히, 클라우드 환경과 컨테이너 오케스트레이션(Kubernetes) 기술의 발전으로
MSA는 대규모 서비스 운영에 사실상 표준 구조가 되고 있다.

 

※ MSA 간단히 비유

모놀리식(Monolithic)
: 한 식당에서 모든 요리를 한 주방에서 처리
→ 한 주방이 복잡해지고 문제가 생기면 전체 운영이 중단될 가능성

MSA
: 메뉴마다 전문 주방(파스타 주방, 스테이크 주방, 디저트 주방)
→ 특정 주방만 증설하거나, 문제가 생겨도 나머지는 정상 운영 가능


※ 핵심 이슈

1. 세션 공유가 어려움

항목 내용
문제 사용자의 로그인 상태(세션)를 서버가 기억하기 어려움
이유 서비스/서버가 여러 개로 분산되어 있고 독립적으로 확장되기 때문
해결 방법 JWT 기반 토큰 인증, OAuth2 + OIDC, API Gateway 인증, Redis는 보조 저장소 방식

 

2. 서비스 간 통신 복잡도 증가

항목 내용
문제 서비스가 늘어날수록 서비스 간 호출(REST/gRPC)이 폭발적으로 증가
이유 기능을 서비스별로 분리했기 때문
해결 방법 API Gateway, Service Mesh(Istio, Linkerd), 비동기 메시징(Kafka)

 

3. 트랜잭션 처리 어려움 (분산 트랜잭션)

항목 내용
문제 여러 서비스가 하나의 작업에 참여하면 데이터 정합성 유지가 어려움
이유 각 서비스가 별도 DB를 가짐(Loose Coupling)
해결 방법 Saga 패턴, Event Sourcing, 보상 트랜잭션(Compensation)

 

<예시> 주문 → 결제 → 재고 차감 → 배송 (중간 실패 시 롤백이 아니라 보상 처리 방식 필요)

 

4. 장애 추적이 매우 어려움 (분산 환경)

항목 내용
문제 어디서 장애/지연 발생했는지 찾기 어려움
이유 요청이 여러 서비스/컨테이너를 통과
해결 방법 Distributed Tracing (OpenTelemetry, Jaeger, Zipkin), APM(Datadog, New Relic), 중앙 로그 시스템(ELK, Loki)

 

5. 로그가 여러 곳에 흩어짐

항목 내용
문제 마이크로서비스별 Log 파일이 따로 존재
이유 서버/컨테이너가 여러 개이기 때문
해결 방법 중앙 로그 수집(ELK Stack, EFK Stack, Datadog Log, Grafana Loki)

 

6. 배포 및 버전 관리가 복잡

항목 내용
문제 여러 서비스가 각자 버전 유지
이유 독립 배포 원칙
해결 방법 CI/CD 파이프라인 구축, GitOps(ArgoCD), Canary / Blue-Green Deploy

 

7. 서킷 브레이커 필요

항목 내용
문제 하나의 서비스가 느려지면 다른 서비스도 연쇄적으로 느려짐
이유 서비스 간 네트워크 호출 체인
해결 방법 Circuit Breaker 패턴, Resilience4j, Envoy

 

8. 서비스 디스커버리 필요

항목 내용
문제 어떤 서비스가 어디 IP/Port에 있는지 모르게 됨
이유 컨테이너가 동적으로 생성/삭제됨
해결 방법 Service Discovery 서버(Kubernetes DNS, Consul, Eureka)

 

9. Config 관리 어려움

항목 내용
문제 각 서비스 환경변수를 따로 관리해야 함
이유 독립 실행 특성
해결 방법 Config Server (Spring Config Server), Vault + Kubernetes Secrets

 

10. 데이터 중복 & 데이터 동기화

항목 내용
문제 각 서비스 DB가 독립이기 때문에 데이터 중복 발생
이유 Loose Coupling 원칙
해결 방법 이벤트 기반 데이터 동기화, CQRS, Event Sourcing

 

※ 요약

MSA 이슈 이유 해결
세션 공유 어려움 서버 분산 JWT, OAuth2
통신 증가 서비스 분리 API Gateway, Service Mesh
트랜잭션 어려움 DB 분리 Saga, Event Sourcing
장애 추적 어려움 분산 구조 Distributed Tracing
로그 분산 컨테이너 확장 ELK, Datadog Logs
배포 복잡 독립 배포 CI/CD, GitOps
장애 전파 서비스 연쇄 호출 Circuit Breaker
서비스 위치 모름 컨테이너 동적 변화 Service Discovery
환경 변수 분산 서비스 독립 Config Server
데이터 정합성 DB 분리 CQRS, 이벤트 설계