[Spring] MSA 아키텍쳐(Microservice Architecture)

이지연·2026년 2월 20일

개요

예를 들어 주문 시스템이 있다고 가정해보자.
이 시스템은 회원 파트, 상품 파트, 주문 파트로 구성되어 있다.
사용자는 회원가입을 하고, 상품을 조회한 뒤, 주문을 넣는 세 가지 단계의 과정을 거치게 된다.

우리의 실습에서는 이를 모놀리식 구조로 관리했지만, 실제 현업에서는 서비스 단위별로(즉, 개발자가 정한 기준에 따라) MSA 아키텍처로 분리해 관리할 수도 있다.


MSA의 정의

MSA란 하나의 거대한 애플리케이션을 작고 독립적인 서비스로 나누어,
각각이 자신의 프로세스에서 독립적으로 실행되는 구조를 말한다.

모놀리식(Monolithic) ↔ MSA(Micro Service Architecture)


MSA의 장단점

장점

  • 안정성: 하나의 서비스에 문제가 생겨도 전체 시스템에 영향을 주지 않는다.
  • 분산 개발: 각 서비스가 독립적으로 개발될 수 있으며, 서비스별로 다른 기술 스택을 사용할 수 있다.
  • 뛰어난 확장성: 서비스별 트래픽 양에 따라 필요한 서비스만 선택적으로 확장할 수 있다.

단점

  • 복잡성 증가: 서비스 간 통신, 오류 처리 등 구조가 복잡해져 코드 관리가 어려워진다.
  • 네트워크 지연: 서비스 간 통신이 네트워크를 통해 이루어지므로, 시스템 성능 저하가 발생할 수 있다.

주문 처리 예시로 보는 MSA 구조

‘주문’을 넣는 과정은 재고 조회 → 주문 생성의 순서로 진행된다.

하지만 MSA 구조에서는 각 파트가 독립된 서버로 분리되어 있기 때문에,
주문 서버는 상품의 재고 정보를 직접 알 수 없다.
즉, 주문 서버가 상품 DB에 바로 접근하는 것은 불가능하고, 상품 서버를 통해서만 재고를 확인해야 한다.

이 경우 주문 서버에서는 다음과 같은 HTTP 요청 흐름이 발생한다.

  1. 상품 서버에 GET 요청 → 재고 조회
  2. 주문 서버에 POST 요청 → 주문 생성
  3. 상품 서버에 PUT 또는 PATCH 요청 → 재고 감소

발생 가능한 문제: 보상 트랜잭션

문제는 여기서 데이터 일관성 이슈가 생긴다는 점이다.
예를 들어 상품 서버에서 재고를 감소시키는 도중 에러가 발생한다면,
주문은 성공했는데 재고는 줄지 않은 상태가 될 수 있다.

이런 상황을 해결하기 위해 보상 트랜잭션(Compensating Transaction) 이라는 별도의 예외 처리 로직을 두어,
에러 발생 시 데이터의 불일치를 롤백하거나 복원하는 방식으로 처리해야 한다.


모놀리식과 MSA의 차이

  • 모놀리식 구조에서는 코드 내에서 직접 함수 호출만으로 조회나 수정이 가능하다.
    즉, 내부 참조를 통한 빠른 연동이 가능하다.
  • 반면 MSA 구조에서는 서비스 간에 물리적인 서버 통신(네트워크 요청) 이 발생한다.
    그 결과, 필연적으로 네트워크 지연(성능 저하) 이 발생할 수밖에 없다.

결과적으로 MSA는 유지보수성과 확장성 측면에서 큰 장점을 가지지만,
그만큼 복잡성과 통신 비용, 데이터 일관성 관리가 중요한 과제로 남는 구조다.

profile
Eazy하게

0개의 댓글