MSA의 핵심 원칙

Lucas.Choi·2024년 11월 11일

마이크로서비스

목록 보기
2/4

MSA라는 개념과 관련해서 많은 이론들을 만들어 낸 마틴 파울러(Martin Fowler)가 정의한 MSA 특징

Componentization via Services: 서비스를 통한 컴포넌트화

모놀리틱 시스템에서는 기능을 코드 모듈이나 라이브러리로 구분하지만 MSA에서는 기능을 독립된 서비스로 분리한다. 각 서비스가 특정 기능을 책임지고, API를 통해 다른 서비스와 통신한다. 이를 통해 서비스 단위로 시스템을 컴포넌트화하여 유지보수와 확장성을 높이고, 개별적으로 배포와 개발이 가능하게 한다.

⭐️⭐️⭐️Organized around Business Capabilities: 비즈니스 기능 중심의 구조

Conway's Law
	"시스템이 설계되면, 그 시스템의 구조는 설계한 조직의 구조와 유사해진다."
Business Capabilities란
	조직이 얼마나 빠르고 유연하게 변화에 대응할 수 있는지에 대한 능력

빠른 대처가 필요한 비즈니스 모델을 가진다는 의미는 빠른 대처가 가능한 MSA를 가진다는 것과 유사한 의미이고, 빠른 대처가 가능한 MSA가 되려면 이와 유사한 조직 구조가 생긴다. 이렇게 구성된 조직은 빠른 대처가 가능하다.

Products not Projects: 프로젝트가 아닌 제품

프로젝트는 일회성 - 프로젝트를 달성하게 되면 유지보수 조직으로 개발의 주도권이 넘어간다.
MSA는 각 서비스를 프로젝트가 아닌 지속적으로 발전하고 유지되는 제품으로 간주하기 때문에 기능 업데이트와 유지보수가 쉽게 이루어질 수 있는 구조이다.

Smart endpoints and dumb pipes: 스마트 엔드포인트와 단순한 파이프라인

Smart endpoints: 각 서비스의 엔드포인트(집입점)가 데이터를 받고 비즈니즈 로직을 수행하며, 이를 처리하는 똑똑한 역할을 한다.
dumb pipes: 파이프라인은 엔드포인트들 간에 데이터를 전달하는 데만 집중하는 단순한 통로 역할을 한다.
이런 방식 덕분에 서비스들 간 통신은 최소한의 역할만 담당하고, 실제 기능은 각 서비스 내부에서 처리되기 때문에 시스템이 더 단순하고 유지보수하기 쉬워진다.

Decentralized Data Management/Governance: 분산 데이터 관리 및 거버넌스

Decentralized Data Management: 데이터 베이스의 분리. 모노리시 방식에서는 일반적으로 하나의 DB를 사용하기 때문에 스케일 업이나 분리하기 어려웠으나, 데이터 베이스의 분리를 통해 데이터의 유연성과 탄력성을 확보할 수 있다.
Decentralized Governance: 시스템의 관리와 결정 권한을 한 곳에 집중시키지 않고, 각 서비스 또는 팀이 독립적으로 필요한 결정과 관리를 수행할 수 있도록 분산시킨다. MSA에서는 각 서비스가 독립적으로 운영되고, 각기 다른 요구 사항이나 변화에 맞춰 빠르게 대응할 수 있어야 하기 때문에 이 개념이 중요시된다.

Infrastructure Automation: 인프라 자동화

MSA에서는 배포 빈도가 높고 서비스 개수가 많기 때문에 인프라 자동화가 필수적이다.

Design for Failure: 장애를 고려한 설계

MSA는 장애가 발생할 가능성을 염두에 두고 설계되어야 한다. 서비스 간 독립성을 보장하고, 오류를 감지하고 대응할 수 있는 매커니즘을 포함해야 한다. 예를 들어, 하나의 서비스가 다운되더라도 전체 시스템이 정상적으로 작동할 수 있도록 장애를 격리하거나 재시도 로직을 포함시킨다. 이를 통해 시스템의 안정성을 높일 수 있다.

Evolutionary Design: 진화적 설계

마이크로서비스는 점진적이고 유연한 설계 방식을 지향한다. 처음부터 완벽한 시스템을 만드는 대신, 시간이 지나면서 새로운 요구 사항과 기능을 반영해 시스템을 점진적으로 개선해 나간다.

0개의 댓글