Study/Spring Boot
[MSA - 01] 모놀리스, SOA, MSA 등장 배경
monitor
2025. 6. 1. 15:43
모놀리스의 배경과 종류
1. 모놀리스 아키텍처
- MSA가 생기기 전에는 존재조차 하지 않던 개념입니다.
- 기본적으로 모든 종류의 서비스가 하나의 애플리케이션으로 구성되어있는 아키텍처를 의미합니다.
- DB Endpoint가 하나이므로 DB 관리 필요
- 특징
- 단 한줄만 코드 수정이 되더라도 애플리케이션 모두 재배포가 필요
- 관리가 쉬워서 사용 할 수 밖에 없었음
- 고려할 부분이 크지 않았음
1 - 1.싱글모듈 아키텍처
- 단일 모듈 내에 모든 소스가 존재함
- 응집도와 결합도가 매우 높음
- 설계 / 구현이 단순
- 최상위 싱글 패키지
- 유연성, 확장성이 제한적임
1 - 2. 멀티모듈 아키텍처
- 역할, 서비스 별로 모듈화 되어있음
- 응집성과 결합도가 낮음
- 모듈관 인터페이스 정의가 필요
- 유연성, 확장성이 좋다.
- 도메인 별로 모듈별로 별도 빌드하여 관리됩니다.
- 쿠버네티스에 비유하자면 SideCar 패턴으로 배포 되는 형태입니다.
결론 : CI/CD, Scale Out, Agile한 개의 시점에서 본다면 모놀리식은 단점이 된다.
MSA의 등장
MSA, Why now?
- 일반적으로 Cloud 환경 자체가 익숙치 않았습니다.
- IDC를 사용하는 것이 당연한 문화로 적용되었었습니다.
AWS
- IaaS (EC2, S3)
- PaaS (Lambda)
- SaaS (WorkDocs, Workmail, Appstream)
S3 (객체형 DB), DynamoDB(Key-Value DB), RDS (RDB)
AWS EC2
- AWS 제공하는 클라우드에서 가상 서버를 구축하고 실행할 수 있는 서비스
- Scale up, Scale out이 유연하게 가능
- 실제 사용된 만큼의 비용 지불
Docker Compose
- 경량화 K8S
- Container Orchestration
결론 : 위와 같이 Cloud, 컨테이너의 경량화로 인하여 MSA가 일반적일 수 있는 상황이 만들어짐
SOA
- 서비스 단위로 개발하고 서비스 간 규격화된 프로토콜을 사용하여 통신
- 동일한 기술 스택을 가지고 서비스를 개발하며 각 서비스들 간의 재사용이 목적
모놀리식과 SOA 공통점
- Shared DB를 사용
- 대개 원 코드베이스
- 모듈/서비스 간 강한 의존성, 결합도
SOA 특징, 차이점
- 독립적으로 배포 가능
- 트랜잭션 구현은 별개로 해야 함
- ESB(Gateway)의 관리가 필요함
SOA-MSA와 비교
- 비즈니스 로직의 재사용성을 지양함
- 결합도를 낮추기 위함 (애자일하게 대응)
- 동일한 플랫폼이 되지 않아도 된다.
- 모두 독립적으로 기술 스택을 선택하여도 된다.
MSA 등장 / MSA 핵심 원칙
요구사항 변화에 따른 빠른 대처를 하기 위해서 MSA를 사용하게 되었다.
빠른 빌드 / 배포 , CI/CD Pipeline, API Gateway,...
MSA 핵심 원칙
- 서비스를 통해서 컴포넌트화
- 빠른 대처가 가능한 MSA
- Not project, it's product
- 최대한 Gateway는 단순해야 한다. (Smart endpoints and dump pipes)
- 데이터의 유연성, 탄력성 확보
- CI/CD의 중요
Design for Failure
- 감지 (CircuitBreaker)
- 복구 (Container Ochestration, K8S)
- Readiness Probe : 부팅 시 서비스가 통신 가능한 상태인지 확인한다. (initialDelaySecond가 너무 짧으면 실패가 쌓이고 서비스에서 제외 될 수 있음)
- Liveness Probe : 지속적으로 서비스의 health check로 서비스 정상 유무를 확인한다.
- 의도치 않은 결과 방지 (Transaction, Event Driven)
- A -> B -(X)-> C
- C 서비스로의 트랜잭션이 실패하였다면 어떻게 할 것인가?
- Saga 패턴을 이용해서 최종 일관성을 보장 할 것임
- C 서비스로의 트랜잭션이 실패하였다면 어떻게 할 것인가?
- A -> B -(X)-> C
- 서비스 간의 영향도 (Chaos Test)
- A -> B -> C ... 가는 중에 한 서비스에서 실패가 난다면 Latency가 늘어날 것
간단하게 MSA를 왜 쓰는지, 개념적인 방면에서 MSA를 정리해보았습니다.
다만, 실제적으로 MSA가 어떻게 적용되는지 이해 하기 위해서는 실제 코드를 쳐보는 것이 필요하여 Github에서 코드를 작성하면서 알아보겠습니다. (K8S 부분은 Docker Compose로 대체하여 진행합니다.)
GitHub - 1ComputerMaster/MSA
Contribute to 1ComputerMaster/MSA development by creating an account on GitHub.
github.com