🥞 BE
home

MSA

MSA의 특징

시스템을 독립적으로 배포할 수 있는 서비스들로 구성
비즈니스 기능 단위로 나누고 독립적인 팀들이 담당
각 서비스는 잘 정의된 API를 통하여 통신
장점
서비스 단위로 변경하고 독립적으로 배포할 수 있다.
API로 기능을 재사용하고 조합하여 신규 기능을 만들 수 있다.
아키텍처를 조직 구조에 맞게 정렬할 수 있다.
서비스 단위로 스케일 아웃할 수 있다.
서비스의 장애가 다른 서비스에 퍼지는 것을 차단하여 대형 장애를 방지할 수 있다.
서비스 별로 다른 기술을 사용할 수 있으며, 이러한 특성 때문에 신규 기술을 적용하기 쉽다.
단점
서비스 간 통신이 필요하며, 서로 간 연결 구축 및 관리의 복잡성이 증가한다.
초기 개발 및 통신 등에 시간이 소요된다.

MSA의 적용

소프트웨어 개발-배포 과정과 절차를 경량화하는 것이 중요
개발-배포-테스트 주기를 짧게 → CI/CD (자동화)가 중요해진다.
변경 관리의 부담을 경감하여 iteration 가속화
장애 대응의 효율 또한 중요한 요소
해결하고자 하는 문제는 기술적인 것이 아니다.
스프린트 중심의 애자일 개발 방법 및 지속적 인도 적용이 동력
→ 대규모 및 복잡한 프로젝트, 시스템을 독립적으로 개발하고 확장해야 하는 경우에 사용하기 좋다.

모놀리식 아키텍처와 비교

모놀리식 아키텍처의 장점
초기 개발에 유리하며 빠르게 프로토타입을 개발할 수 있다.
필요한 모든 기능을 한 번만 호출하기 때문에 복잡한 통신 없이 직접 사용할 수 있다.
모놀리식 아키텍처의 단점
코드 베이스가 커질수록 복잡해지고 유지관리 및 확장이 어려워진다.
일부 기능을 수정하거나 업데이트를 하려면 전체 애플리케이션을 재배포해야한다.

아키텍처-프로세스-조직

지속적으로, 빠르고 자주, 안정적으로 SW딜리버리
아키텍처
MSA
프로세스
DevOps
CI/CD
Lean process
조직
작고, 자율적이고, 범기능적이고 충분한 권한을 가진 팀들의 조합

아키텍처 예시

개인적 평가

장점 : 기능별 단위 테스트와 배포가 자유롭다. (연속적으로 돌아가야하는 시스템에서는 꼭 필요함)
이전 프로젝트에서 프로토타입 시연을 할때, jwt로직에 문제가 생겨서 인증서버가 제대로 안돌아간적이 있었음 → 당연히 연결된 회원서버, 주문서버 쪽 API에서도 안돌아가는 애들이 생김 → 근데 발표 시작 → 일단 다른 서버쪽 기능을 미리 시연함 (상품 검색, 필터링, faq, 알림 기능 같은) → 발표중에 백엔드팀 모여서 인증서버 고쳐서 배포함 → 나머지 로그인, 상품 주문, 마이페이지 등 남은 기능 다 시연 성공.
단점 : 더럽게 비싸다.
3개월 운용 기준 프론트 서버에서 10만원, 백엔드 서버에서 38만원, CI/CD쪽에서 거의 20만원..? 나왔던 것 같다. 그냥 객체지향 지켜서 멀티모듈로 구현해도 학생 수준 프로젝트에서는 충분히 좋을 것 같다고 생각했다.