MSA

seomoyang·2024년 6월 12일

MSA

목록 보기
4/7

Microservice

MSA는 소프트웨어를 구축하기 위한 아키텍처이자 하나의 접근 방식으로, 애플리케이션을 상호 독립적인 최소 구성 요소로 분할한다. 모든 요소를 하나의 애플리케이션에 구축하는 전통적인 모놀리식 접근 방식 대신 마이크로서비스에서는 모든 요소가 독립적이며 연동되어 동일한 태스크를 완수한다. 이러한 각각의 구성 요소 또는 프로세스가 마이크로서비스다.

따라서 민첩한 비즈니스 대응을 위해 필요에 따라 쉽게 이용 가능한 클라우드 인프라 환경과 개발과 운영을 모두 책임지는 DevOps 문화도 함께 필요하다.



마이크로 서비스 정의

  • 여러 개의 작은 서비스 집합으로 개발하는 접근 방식
  • 각 서비스는 개별 프로세스에서 실행
  • HTTP 자원 API 같은 가벼운 수단을 사용하여 통신
  • 서비스는 Biz 기능 단위로 구성되어 중앙 집중적인 관리 최소화
  • 자동화된 배포 방식을 이용하여 독립적으로 배포
  • 각 서비스는 서로 다른 언어, 데이터, 저장 기술을 사용할 수 있음(폴리그랏 Polyglot: 인터페이스 만족시 서비스 안의 기술은 자율적으로 선택할 수 있음)



MSA 특징

1. Biz 역량 기반 팀

Biz 역량 기반 팀은 다양한 역할을 가진 기획자, 디자이너, Frontend 개발자, Backend 개발자, 설계자, 테스터 등으로 구성되어 상호간 의사소통이 원활하며 빠른 진행을 할 수 있다. 이러한 팀을 Cross-functional 팀이라 하며, 아마존에서는 피자 두 판으로 식사할 수 있을 정도의 Two Pizza team이라 부르기도 한다. 자율적으로 해당 Biz에 관련된 서비스를 만들고 운용할 책임을 지닌다.



2. 분권 거버넌스

MSA 팀은 중앙에 강력한 표준이나 절차의 준수를 강요하지 않는다. 각 팀은 빠르게 제품을 만드는 것을 목적으로 한다.



3. 프로젝트가 아니라 제품

이전의 방식에서는 필요한 기술 인력들이 한시적으로 모여 장기간의 프로젝트를 통해 개발을 하고, 이를 운영 조직에 넘기는 방식이었다. 그러나 MSA는 소프트웨어를 완성해야 할 기능의 세트로 보는게 아니라, 제품으로 바라보고 빨리 개발한 뒤에 반응을 본 후 개선하는 방식으로 진행한다. 즉, Agile 개발 방식을 적용한다.



4. 인프라 자동화

빠른 소프트웨어 개발을 위해 자동화 도구가 필요하며, 쉽게 활용 가능한 클라우드 인프라를 통해 팀의 속도를 높인다. 이러한 환경은 궁극적으로 DevOps를 가능하게 하기 때문에, DevOps 개발 환경이라 부르기도 한다.



5. 분권 데이터 관리

모노리스식은 단일 데이터 베이스를 사용하는 반면, MSA는 Polyglot Persistence 접근 방식을 사용하여 서비스 별 데이터베이스를 설계한다. 각 저장소는 분산되어야하며, 다른 서비스 저장소는 호출이 불가능해 API를 통해 접근이 가능하다.

그러면 데이터 일관성 문제가 발생하는데, 특정 시점에는 불일치하지만 결과적으로는 같아지는 결과적 일관성을 강조한다.



6. 똑똑한 끝지점 단순한 파이프

Domain Login은 서비스 속에서 높은 응집성을 유지하며, REST와 같은 단순한 도구를 선호한다. 또한 서비스 연결을 위한 Rabbit MQ, Zero MQ 메시지 버스를 사용한다.



7. 실패를 위한 설계

언제든 실패할 수 있으며, 실패해도 자연스럽게 대응할 수 있도록 설계한다. 따라서 실패를 감지할 수 있는 실시간 모니터링 체계가 필요하다. 예를 들어 서킷 브레이크 패턴이 있다.

profile
백엔드 개발자

0개의 댓글