이 글은 ASAC 06기를 수강하며 강의 자료 참고 및 추가 자료 수집을 통해 작성된 글입니다.
MSA
Monolithic 은 하나의 서버에서 모든 서비스를 처리하는 것. 단일 처리
MSA(micro service architecture) 는 Monolithic과 반대되는 개념이다. MSA는 서버-서버 통신의 일종이다. 각각의 서버마다 정해진 서비스를 담당. 분업화
목적
- monolithic에서는 한쪽 서비스에 문제가 생기면 서버 전체에 영향을 주기 때문에 모든 서비스의 이용이 불가능하다.
=> SPOF(Single Point Of Failure) : 단일 이슈가 전체 이슈로 퍼지는 경우 - MSA는 다수의 웹 서버로 각각의 개별 서비스를 제공할 수 있다. 하나의 웹 서버가 하나의 서비스를 관장한다.
(서비스(모듈)마다 서버(및 DB)를 분할.)
한쪽 서비스에 문제가 발생하는 경우 그 서비스를 담당하는 서버에서만 오류 해결을 하면 되기 때문에, 다른 서비스로 문제가 전파되지 않는다.
객체지향 5원칙 SOLID의 단일 책임 원칙(SRP, Single Responsibility Principle) 을 따른다.
주의
Monolithic과 MSA의 차이점은 책임 분리(각각의 서비스를 담당하는 서버가 분리되어 있는가 분리되어 있지 않는가)에 있다.
Monolithic이 단일 서버를 사용한다고 설명했지만, 이는 로드 밸런싱과 관련된 이야기가 아니다.
Scale Out은 동일한 기능/버전/스펙을 가진 서버가 여러 개 뜨는 것으로, 책임 분리와 상관이 없다.
그렇기 때문에 Monolithic에서도 Scale Out이 가능하다.
다만 Monolithic에서 Scale Out를 하는 경우에는 트래픽 커버리지만 늘어날 뿐, 여전히 SPoF 문제에 노출되어 있다.
API Gateway
MSA에서는 서비스마다 담당하는 웹 서버가 분리되어 있다. 웹 서버들을 통합해서 관리하는 역할을 하는 것이 바로 API Gateway이다. 이는 일종의 프록시로 동작하며, 모든 서버에 대한 모든 api 호출을 중앙화 한다. 클라이언트는 하나의 엔드 포인트인 API Gateway로 요청을 하게되고, 내부적으로 API Gateway가 클라이언트로부터 요청받은 서비스를 담당하는 웹 서버에게 서비스를 요청한다.
- API Gateway가 클라이언트로부터 요청받은 서비스를 확인하여 해당 서비스를 담당하는 서버로 서비스 요청.
- API Gateway는 각 서버의 통신 규약을 알고 있어야 하며, 버전 관리가 필요하다.
- SRE 에 연결되어 서버 가용성 조정을 명령하기도 한다.
- 어떤 서버의 어떤 API를 사용해야 하는지 정리정돈, 버전관리 어렵기 때문에, 버전 관리 메모장을 사용한다. 일반적으로 Swagger 를 사용.
- 컨슈머 - 프로듀서 패턴. API마다 접근할 수 있는 컨슈머를 리스트업한다.
현업에서의 API GW 역할
API GW는 다음 2개를 중앙화 해놓는다.
- API SPEC
API 사용 시 어떤 요청과 응답을 하는가? - Producer - Consumer 리스트
각 서버(consumer)의 API 권한. 이 API를 쓸 수 있는 서버 리스트
MSA는 꼭 필요한가?
-> 서버 여러개를 두고 관리해야 하기 때문에 비용 부담이 어렵다. (스타트업의 경우 특히)
-> 트래픽이 많지 않은데 굳이 MSA를 쓸 필요는 없다.
트래픽을 고려하여 MSA를 사용할 지 결정해야 한다.
'ASAC' 카테고리의 다른 글
[ASAC 06] SEO, 웹 페이지 성능 Core Web Vital (1) | 2024.08.27 |
---|---|
[ASAC 06] 네트워크, DNS (0) | 2024.08.27 |
[ASAC 06] GraphQL (0) | 2024.08.27 |
[ASAC 06] REST API (0) | 2024.08.27 |
[ASAC 06] 웹 (0) | 2024.08.27 |