본문 바로가기
Software Engineering

MSA(Microservices Architecture)

by 차가운개발 2024. 10. 23.

 

마이크로서비스 아키텍처는 애플리케이션을 작고 독립적인 서비스들로 분리하여 개발하고 배포하는 소프트웨어 아키텍처 스타일이다. 각 서비스는 특정 비즈니스 기능을 수행하며, 다른 서비스와 독립적으로 개발, 배포, 확장될 수 있다.

 

단일 애플리케이션을 여러 작은 단위로 쪼갠 형태로, 이러한 작은 서비스들은 서로 통신하면서 전체 애플리케이션을 구성한다. 전통적인 단일체 구조(모놀리틱 아키텍처)와 대조되는 방식이다.

 

ㅇ 특징

  • 독립적인 서비스
    애플리케이션이 여러 독립 서비스로 나누어진다. 각각의 서비스는 특정 비즈니스 도메인에 대한 기능을 수행하며 다른 서비스와 독립적으로 운영될 수 있다.
  • 작은 단위의 개발과 배포
    각 서비스는 별도의 코드 베이스를 가지고 있어, 독립적인 개발, 빌드, 배포가 가능하다. 이를 통해 특정 서비스에 대한 변경을 다른 서비스에 영향없이 수행할 수 있다.
  • 자율적인 팀
    마이크로서비스는 독립적인 배포 가능성을 가지고 있기 때문에, 각 서비스는 별도의 팀에서 관리할 수 있다. 팀은 전체 시스템의 일부분에 대한 개발과 배포만 책임지며 이를 통해 민첩성이 증가한다.
  • 다양한 기술 스택 사용 가능
    필요에 따라 적합한 기술 스택을 사용할 수 있다 한 서비스는 java로 다른 서비스는 python으로 개발할 수 있고 DB 역시 다르게 선택할 수 있다.
  • 경량화 통신
    MSA간 통신은 일반적으로 REST API, gRPC, 메세지 큐 등을 통해 이루어지며 서비스 간에 비동기적으로 데이터를 주고 받는다.

 

ㅇ 장단점

장점

  • 유연성 및 확장성
    각 서비스가 독립적으로 배포되고 확장될 수 있기 때문에 특정 서비스에 대한 트래픽 증가에 맞춰 별도로 확장 가능합니다. 시스템 자원을 효율적으로 사용 가능하다.
  • 신속한 개발과 배포
    각 서비스가 독립적으로 운영되므로 작은 단위로 빠르게 개발 배포가 가능하다. 애자일 방법론과 잘 어울리며 빠른 피드백 루프를 제공한다
  • 독립적인 유지보수
    한 서비스에 대한 변경이 다른 서비스에 영향을 미치지 않기 때문에 수정과 유지보수가 용이하다.
  • 기술 선택의 유연성
    각 MSA는 독립적으로 기술을 선택할 수 있어 적합한 언어와 DB를 사용할 수 있다.
  • 개발 팀의 독립성
    여러 팀이 동시에 개발을 진행할 수 있다. 조직의 효율성이 높아진다.

단점

  • 복잡성 증가
    작은 서비스가 많아지면서 네트워크 호출이 늘어나고 서비스간 통신이 복잡해진다. 이를 해결하기 위해 서비스간 API 게이트웨이나 메세지 브로커와 같은 추가 인프라가 필요할 수 있다. 
  • 데이터 일관성 문제
    각 MSA가 독립된 데이터 저장소를 사용하기 때문에 일관성을 유지하기 어려울 수 있다. 분산 트랜잭션이나 사간트패턴같은 기법이 필요할 수 있다.
  • 운영 및 모니터링의 어려움
    서비스가 많아지면 모니터링과 로그 관리를 복잡하게 만든다. 분산된 여러 서비스에서 발생하는 문제를 추적하기 위해서는 중앙 집중형 모니터링 및 로깅 시스템이 필요하다.
  • 네트워크 오버헤드
    서비스간 네트워크 통신이 많아지므로 성능 저하 및 지연이 발생할 수 있다.

 

ㅇ VS 모놀리틱 아키텍처

  마이크로서비스 모놀리틱
구조 독립적인 여러 서비스 단일 애플리케이션
개발 및 배포 개별 서비스만 독립적으로 배포 가능  전체를 한번에 배포  
확장성 개별 서비스 단위로 확장 전체 애플리케이션 확장
기술 선택 각 서비스별로 다른 기술 스택 사용가능 동일한 기술 스택
팀 구조 서비스별 자율적 팀 운영 하나의 큰 팀에서 협업
장애 복구 장애가 발생해도 다른 서비스에 영양 최소화 전체 애플리케이션에 영향
데이터 관리 독립적인 데이터 저장소 중앙 집중형 데이터베이스
복잡성 초기 설정 관리 복잡, 각 서비스 유지보수용이  초기 설정 간단, 대규모 애플리케이션에서 복잡성 증가

 

'Software Engineering' 카테고리의 다른 글

Third Party  (2) 2024.10.23
DevOps  (2) 2024.10.23
OOP 객체 지향 프로그래밍(Object-Oriented Programming)  (1) 2024.10.23
애자일(Agile) 방법론  (1) 2024.10.23
TDD(Test-Driven Development)  (0) 2024.10.23