Micro Service
마이크로서비스는 소프트웨어 개발 패러다임의 하나로, 애플리케이션을 독립적인 서비스로 분해하는 아키텍처 스타일을 말한다.
독립적으로 존재하기 때문에 자체적으로 실행 가능하며, 데이터 베이스, 저장소 및 네트워크를 포함한 필요한 모든 것을 갖추고 있다.
서버 개발을 하다보면 여러가지 많은 기능을 만들어야하는데 하나의 프로젝트, 하나의 프로그램에 수 많은 서비스가 존재하게 되면 테스트, 컴파일, 빌드, 배포 등의 작업을 진행할 때에 상당한 시간이 소요 되고, 단일 서비스의 라이브러리 혹은 프레임워크의 버전 호환 문제 등 유지 보수 작업에도 어려움이 따른다.
이런 Monolith Architecture
의 문제점을 해결할 수 있는 방법으로 Microservice Architecture
를 사용할 수 있다.
마이크로서비스는 일반적으로 데이터베이스 및 데이터 관리 모델을 포함하여 자체 기술 스택을 보유하고 있고, REST API, 이벤트 스트리밍 및 메시지 브로커의 조합을 통해 서로 간에 통신한다.
마이크로서비스 장점
- 서비스가 독립적으로 존재하기 때문에 특정 서비스를 쉽게 업데이트할 수 있다.
- 팀 개발시 서로 다른 컴포넌트에 대해 서로 다른 스택과 서로 다른 프로그래밍 언어를 사용할 수 있다.
- 컴포넌트간 독립적으로 스케일링할 수 있으므로, 전체 애플리케이션의 스케일링과 연관된 자원의 낭비를 줄일 수 있다.
(트래픽이 몰리는 서비스만 규모를 키울 수 있다.)
DevOps 관점
마이크로서비스와 DevOps는 서로 밀접한 관련을 가지고있다.
DevOps는 개발과 운영의 조합으로, 소프트웨어 개발과 배포를 빠르고 자동화된 프로세스로 처리하는 것을 목표로하는데 마이크로서비스 아키텍처는 이러한 목표를 달성하는 중요한 역할을 한다.
(마이크로서비스는 독립적인 서비스로 구성되어 배포, 관리가 용이하기 때문이다.)
마이크로서비스 단점
마이크로서비스를 사용하면 개발 복잡도는 낮아질 수 있으나, 운영 복잡도는 높아진다. 기본적으로 서비스의 다발을 관리하기 위해 사용되는 툴이 많아지기 때문에 이를 관리하기 위한 시간과 비용이 늘어나는게 그 이유이다.
또, 서비스간 통신이 너무 많을 경우 소요 시간이 오래걸리거나, 누락될 수 있고, API를 통해 서비스간 데이터를 주고 받기 때문에 버그나 이슈가 발생했을 경우 서비스를 특정하는데 어려움이 있을수 있다.
서비스 별 관리 팀이 필요, 책임 회피, 팀 간 커뮤니케이션 x, 느린 의사결정
마이크로서비스 도입 시점
마이크로서비스는 아마존, 넷플릭스 같은 대형 기업이 사용하는 아키텍처 구조로 분명한 장점과 단점을 가지고 있기 때문에 마이크로서비스 아키텍처를 도입하는건 고민이 필요하다.
처음 프로젝트를 설계할 때는 Monolith Architecture
구조를 통해 서비스를 시작하고, 서비스의 규모가 커지고, 복잡한 코드 때문에 생산성이 저하된다면 그 때 마이크로 서비스를 도입을 시작하자
Monolith Architecture를 대체할 수 있는 또 다른 방법으로 구글에서 사용하는 Serverless 형태가 존재한다.
Tool
마이크로서비스를 구현하기 위해선 툴의 사용이 필수적이라고 볼 수 있다.
사용되는 툴은 각 서비스를 독립적으로 관리, 배포하며 이를 모니터링하고 오류를 디버그하고, 보안을 강화하는 등 서비스 간의 통신을 관리하기 위해 사용된다.
컨테이너화
마이크로서비스는 일반적으로 컨테이너 기술을 사용해 패키징된다.Docker, Kubernetes
서비스 디스커버리
각 서비스의 위치를 추적하고, 서비스 간의 통신을 관리 감독하는데 쓰인다.Eureka, Consul, Etcd, ZooKeeper
API 게이트웨이
마이크로서비스 아키텍처에서 클라이언트와 서버 간의 통신을 관리하는데 사용 된다. NGINX, Istio, Kong
로깅 및 모니터링
로깅 및 모니터링 툴은 각 서비스의 로그를 수집하고, 모니터링하며, 시스템의 성능을 최적화하는데 사용된다.ELK 스택, Grafana, Prometheus
보안
보안 툴은 서비스 간의 통신을 보호하고, 권한 부여 및 인증을 관리하는 데 사용된다.OAuth2, Vault, Keycloak
이 외에도 마이크로서비스를 구현하기 위한 다양한 툴과 기술이 사용될 수 있다.