I. 독립된 서비스로 시스템을 분할하는 아키텍처, MSA의 개요
가. MSA(Micro Service Architecture)의 정의
- 대규모 소프트웨어 구축을 위해 동작이 가능한 기능단위로 서비스를 분할하고, 각 서비스들이 API형태로 제공되는 아키텍처
나. MSA의 등장배경
구분 |
설명 |
개발환경의 변화 |
소프트웨어 경쟁력 확보를 위해 고객 요구에 대한 신속한 대응 중요 |
기존 아키텍처 |
Monolithic 아키텍처는 모듈 간 결합도가 높고, 배포 시간이 길어 신속한 대응 한계 |
II. MSA의 구성도 및 구성요소
가. MSA의 구성도
- Rest API를 통해 마이크로 서비스간 통신으로 서비스를 개발하고, 서비스별 최적의 DB 선택 가능
나. 마이크로 서비스 아키텍처의 구성요소
문서종류 |
문서내용 |
세부내용 |
Client Layer |
Rest API |
- HTTP 기반의 경량 프로토콜 Rest API 사용 |
Orchestration |
- 이미 구축된 API를 재활용하여 서비스 구축 |
|
Application Layer |
API Gateway |
- 사용자에게 단일 엔드 포인트 제공 - Traffic 제어, 인증 및 허가 공통 로직 처리, API 라우팅 |
Containerization |
- 서비스 별 컨테이너화 및 Auto Scaling 지원 |
|
Persistence Layer |
Polyglot 구조 |
- RDB, No-SQL 등 최적의 DB 선택 가능 |
대용량 분산 DB |
- 성능 및 안정성 극대화 가능한 DB 구조 가능 |
- 마이크로 서비스 아키텍처는 기능단위로 점점 세분화되어, FaaS(Functions as a Service)형태로 진화 중이며, Agile, DevOps, 컨테이너 기술과 결합하여 신속한 배포와 생산성 제고에 기여
III. MSA 구현패턴 및 고려사항
가. 마이크로 서비스 아키텍처의 구현패턴
구분 |
내용 |
기술 |
Communication |
- 서비스가 분리되었기 때문에 기존 내부 함수 호출 방식이 아닌 서비스 간 동기(RPC: Remote Procedure Call), 비동기 방식 호출 |
Rest API, RabbitMQ |
Circuit Breaker |
- 서비스 간 장애 전파 방지를 위한 회로 차단기 - 특정 서비스 호출에 대한 에러 발생 임계치 초과 시 호출 차단 |
Netflix Hystrix |
API Gateway |
- 클라이언트와 마이크로 서비스 사이에 위치하여 프록시 역할 - Traffic 제어, 인증 및 허가 공통 로직 처리, 프로토콜 변환 |
Netflix Zuul, K8S Service |
Service Discovery |
- 서비스들의 호스트, 포트 정보 등록 레지스트리 - 클라우드 환경에서 Auto-Scaling으로 인한 유동IP 자동 관리 |
Netflix Eureka, K8S DNS |
Log Aggregation |
- 분산된 서비스에서 전송하는 로그를 통합/가공/시각화/분석 |
Elasticsearch, Fluentd, Kibana |
나. MSA 구축을 위한 고려사항
구분 |
내용 |
설명 |
비즈니스 관점 |
도메인 기반 업무 분리 |
DDD(Domain Driven Design)을 통한 마이크로 서비스 분리 |
조직적 관점 |
콘웨이 법칙 활용 |
마이크로 서비스 단위의 조직을 구성하여 운영 |
기술적 관점 |
컨테이너 기술 적용 |
Docker, K8S 기술로 SW기반 자동 배포/확장 구조적용 |
- 마이크로 서비스 단위로 최적화 팀 구성, DevOps기반 애자일 방법론 적용, 신속한 배포로 Time-to-Market 달성, 안정적 서비스 운영
IV. MSA와 Monolithic Architecture 비교 (참고)
- 마이크로 서비스 아키텍처 등장으로 이전까지의 단일 아케텍처를 Monolith로 분류
구분 |
MSA |
Monolithic Architecture |
개념 |
하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 구현하여 조합하는 방법 |
하나의 서비스 또는 애플리케이션이 하나의 아키텍처로 구현된 방법 |
목적 |
애플리케이션을 개별서비스 단위로 개발, 배포 |
전체 애플리케이션을 하나의 통합된 패키지로 개발, 배포 |
개발 |
서비스 단위의 신속한 개발, 확장 용이 |
배포, 테스트, 표준화된 방식으로 관리용이 |
특징 |
-특정 서비스의 오류가 다른 서비스에 영향 주지 않음 -서비스별 다른 언어로 개발 가능 -분산시스템에 따른 추가적인 복잡도 증가 |
-서비스 복잡도, 규모 증가에 따른 문제점 증가 -배포 시간 증가 -부분적 스케일 아웃의 어려움 -안정성의 감소 |
배포/구동 |
DevOps 자동화, 고속 |
배포/서버 가동시간 소요 |
개발 독립성 |
상호의존성 낮아짐 |
전체 서비스간 영향 높음 |
유지보수 |
유지보수 용이, 단순 |
전체 코드이해 필요 |
확장성 |
부분적 물리확장 가능 |
확장성/유연성 낮음 |
생산성 |
다양한 언어 사용가능 |
선택된 특정 언어에 의존 |
'정보관리기술사&컴퓨터응용시스템기술사 > SW공학과 프로젝트관리' 카테고리의 다른 글
[SW 아키텍처 평가] SW Architecture 수준의 대한 품질 평가 (0) | 2021.01.29 |
---|---|
[ISO42010] SW 아키텍처의 표준 (0) | 2021.01.29 |
[WBS(Work Breakdown Structure), 프로젝트 일정 및 R&R 관리 계획을 위한 Framework (0) | 2021.01.13 |
[프로젝트 관리 지식영역] 프로세스 그룹별로 진행할 활동의 그룹핑 (0) | 2021.01.12 |
[요구사항 수집] 프로젝트 목표달성의 지표 (0) | 2021.01.12 |
댓글