MSA : 소프트웨어 개발에서 자주 사용되는 아키텍처 스타일 중 하나로, 대규모 애플리케이션을 독립적인 작은 서비스들로 분할하여 개발, 배포, 유지보수하는 방식을 말한다.
각 마이크로서비스는 고유한 비즈니스 기능을 가지고 있으며, 독립적으로 배포되고 확장될 수 있다.
독립성:
각 마이크로서비스는 다른 서비스와 독립적으로 개발되고 배포될 수 있고, 이는 한 서비스의 변경이 다른 서비스에 영향을 미치지 않는다.
작은 크기:
서비스가 작고 명확한 책임을 가지므로 이해하고 관리하기 용이하다.
독립적인 배포:
각 서비스는 독립적으로 배포될 수 있어, 부분적인 변경 사항을 빠르게 반영할 수 있다.
다양한 기술 스택 사용 가능:
각 마이크로서비스는 필요에 따라 다른 프로그래밍 언어와 기술 스택을 사용할 수 있다.
API를 통한 상호작용:
마이크로서비스 간의 통신은 일반적으로 HTTP/REST, 메시지 큐 등 표준 프로토콜을 사용하여 이루어진다.
확장성:
서비스별로 독립적인 확장이 가능하여 특정 기능에 대한 성능 요구 사항을 효율적으로 처리할 수 있다.
유지보수성:
작은 단위의 서비스로 분리되어 있어, 문제 발생 시 해당 서비스만 수정하면 되므로 유지보수가 용이하다.
신속한 배포:
각 서비스가 독립적으로 배포될 수 있어, 새로운 기능이나 수정 사항을 빠르게 배포할 수 있다.
기술 다양성:
각 서비스가 독립적으로 개발될 수 있어, 팀이 적합한 도구와 기술을 선택하여 사용할 수 있다.
복잡성 증가:
서비스 간의 통신, 데이터 일관성 유지 등 시스템 전체의 복잡도가 증가할 수 있다.
운영 오버헤드:
많은 서비스가 독립적으로 실행되므로, 모니터링, 로깅, 배포 관리 등의 운영 오버헤드가 증가할 수 있다.
데이터 관리:
각 서비스가 독립적인 데이터베이스를 가질 수 있어 데이터 일관성을 유지하는 것이 어려울 수 있다.
자동화된 배포 파이프라인:
CI/CD(Continuous Integration/Continuous Deployment) 파이프라인을 구축하여 자동화된 테스트와 배포를 구현한다.
모니터링과 로깅:
중앙 집중식 모니터링 및 로깅 시스템을 도입하여 각 서비스의 상태를 지속적으로 확인하고, 문제를 신속히 파악할 수 있어야 한다.
서비스 간 통신 관리:
서비스 간 통신을 효과적으로 관리하기 위해 API 게이트웨이, 서비스 메시 등 도구를 활용할 수 있다.
MSA 의 장단점을 잘 적어주셨네요!👍🏻