ultra_dev
MSA(Micro Service Architecture) 본문
마이크로 서비스 아키텍쳐
독립적으로 배포 가능한, 각각의 기능을 수행하는 서비스로 구성된 아키텍쳐라고 할 수 있다.
서비스마다 다른 기술 스택(개발 언어, 데이터베이스 등)이 사용 가능하다.
기존의 방식은 모놀리식 아키텍쳐 방식이다.
개발이 완료된 웹 어플리케이션을 하나의 결과물로 패키징하여 배포되는 형태를 말한다.
웹의 경우 WAR파일로 빌드되어 WAS에 배포하는 형태를 말한다. 주로 소규모 프로젝트에서 사용된다.
모닐리식 아키텍쳐 방식의 장점
- 전체 애플리케이션이 하나로 되어 있으니, 보통 동일한 개발 툴 사용
- 따라서 배포 및 테스트 등의 개발, 환경설정이 간단
- 각 컴포넌트들이 함수로 호출 되기 때문에 성능에 제약이 덜하고 운영 관리 용이
- 결론 : 작은 볼륨의 시스템에는 매우 유용하지만 시스템이 커지면 문제 발생
모닐리식 아키텍쳐 방식의 단점
- 부분 장애가 서비스 전체 장애로 확대 ex) 잘못된 코드 배포, 트래픽 장애가 다른 곳에도 영향 미침(특정 서비스에 트래픽 몰려서 서버가 멈추면 다른 서비스도 멈추게 되니)
- 부분적인 Scale out이 어렵다. 사용하지 않은 서비스에 대한 부분에도 Scale out 필요
- 서비스 변경이 어렵고, 수정 시 장애 영향도 파악 힘들다
- 여러 컴포넌트가 하나의 서비스에 강하게 결합되어 있기 때문
- 배포 시간이 오래 걸린다
- 최근 추세는 CI/CD를 통한 개발부터 배포까지 빠르게 반영하는 추세이다.
- 규모가 커지면 작은 변경에도 높은 수준의 테스트 비용이 발생한다.
- 하나의 프레임 워크에 종속적이다.
- Spring framework를 사용하다가 추후 blockchain 연동 모듈을 추가할 때 node.js를 사용할 수 없고, java를 이용하여 해당 모듈을 작성할 수 밖에 없다. 선정했던 framework가 Spring이기 때문이다.
MSA 방식은 이런 모놀리식 방식의 단점을 보완한다.
서비스를 각 컴포넌트 별로 나눠서 조합하기 때문이다.
각 컴포넌트는 서비스 형태로 구현, API 이용해서 타 서비스와 통신하게 된다.
따라서 마이크로서비스 기반의 어플리케이션을 다양한 언어와 기술로 구축할 수 있다는 것을 의미한다.
MSA 방식의 장점
- 각각 개별 서비스 개발 및 배포가 가능하고, 유지 보수가 쉽다. -> CI/CD가 가벼워진다.
- 개별 서비스 별로 기술 스택을 다르게 가져갈 수 있다. 회사가 Spring 기반이라도 블록체인 개발 모듈은 node.js를 활용할 수 있다.
- 각각 서비스 부하에 따라 개별적인 scale-out이 가능해서 메모리,cpu적으로 이득이 된다.
MSA 방식의 단점
- 서비스가 모두 분산되어 있기 때문에 개발자는 내부 시스템의 통신을 어떻게 가져가야 할지 정해야한다.
- 모놀리식에서는 단일 트랜잭션을 유지하면 됐지만 MSA에서는 비즈니스에 대한 DB를 가지고 있는 서비스도 각기 다르고, 서비스의 연결을 위해서는 통신이 포함되기 때문에 트랜잭션을 유지하는게 어렵다.
- 통합 테스트가 어렵다.
- 실제 운영환경에 대해서 배포하는 것이 쉽지 않다. 마이크로서비스의 경우 서비스 1개를 재배포 한다고 하면 다른 서비스들과의 연계가 정상적으로 이루어지고 있는지도 확인해야한다.
- 서비스간 호출이 API 통신을 통해 이루어지기 때문에 속도가 느리다.
MSA 문제점
각 서비스가 다른 서버에 분리 배포되어 있어서 서버 URL이 다르다.
따라서 API Gateway와 로드밸런서를 활용해야 한다.
만약 로드밸런서만 활용하면 모든 마이크로서비스의 보안 및 권한부여와 같은 보안적용을 하기 위해서는 상당한 개발노력이 필요하다. 따라서 API Gateway를 사용해야 한다.
API Gateway는 API 서버 앞 단에서 모든 API 서버들의 End-Point를 묶어주는 역할을 한다. 또한 거미줄처럼 복잡한 서비스간의 API호출 구조도 단순화 시켜준다. 즉 API의 Endpoint를 받아서 내부의 마이크로서비스로 라우팅해주는 역할을 한다
API Gateway
장점 :
- 요청에 대한 공통 관심사를 중앙에서 처리할 수 있다. (Security, Routing, Rate Limiting, Monitoring etc)
- 클라이언트에서 어느 마이크로서비스 인스턴스로 요청을 보낼지 고민하지 않아도 된다.
- 백엔드 마이크로서비스의 복잡도를 숨길 수 있다.
단점 :
- 모든 요청이 게이트웨이를 거치기 때문에 응답시간이 늘어날 수 있다.
'Computer Science' 카테고리의 다른 글
B-Tree (0) | 2023.03.29 |
---|---|
제네릭이란 (0) | 2023.03.29 |
인덱스(INDEX)에 대해 (0) | 2023.03.28 |
DI(Dependency Injection) 의존 관계 주입 (0) | 2023.03.28 |
REST API (0) | 2023.03.27 |