본문 바로가기

Architecture/Microservices

마이크로 서비스 관련 Tool

마이크로 서비스 Tool이라고 표현했지만, 다양한 기술의 모음이라고 생각하면 된다. 이번 글에서는 서로 다른 용도로 사용되는 마이크로 서비스 Tool에 대해서 살펴 볼 것이다.

 

운영체제

 

어플리케이션을 만들때에 가장 중요한 요소 중 하나는 적합한 기반을 설정하는 것이고, 결국 어플리케이션은 운영체제를 기반으로 수행되게 된다. Linux는 이런 운영체제중에 하나이며 가장 일반적으로 사용된다.
Linux container를 사용하여 실행 환경 및 보안, 네트워킹, 스토리지와 같은 부분을 조절할 수 있다.

 

프로그래밍 언어

마이크로 서비스의 주요 장점은 다른 언어와 기술을 사용할 수 있다는 점이다. 따라서 개발자는 자유롭게 기술 스택을 선택하고 어플리케이션을 개발 할 수 있다. 그러나 현재 시점에서 가장 많이 사용되는 언어는 Java기반의 Spring Boot이다.

 

Spring Boot

 

Spring Boot는 단 몇줄의 코드로 REST기반의 마이크로 서비스 개발을 단순화 한다.

  • 어플리케이션 개발을 빨리 시작하기 위해 일련의 자동 구성 기능을 제공
  • WAR 파일의 사용을 피하기 위해 Embedded Container(e.g. Tomcat)을 제공
  • Maven 구성을 단순화하여 개발자의 시간을 줄여줌
  • 개발 및 생산에서 어플리케이션을 모니터링하고 관리하기 위한 API를 제공

 

API 관리 및 테스트 도구

Postman

 

Postman은 API테스트를 쉽게 할 수 있도록 도와주는 UI 기반의 툴이다.
Postman의 도움으로 인해 RESTful API 리소스 탐색이 매우 쉬워진다. 또한 결과 테스트도 도움이 많이 된다.

  • Postman은 어플리케이션의 개발 사이클과 쉽게 통합된다. (CI에서 활용 가능)
  • 여러 버전의 API를 유지/관리하는 기능을 제공한다.
  • 작성된 전체 Collection을 다른 개발자와 공유할 수 있다. (한명만 작업해두면 재사용이 가능하다는 의미)

 

API Fortress

 

API Fortress는 부하 테스트, 상태 모니터링 및 기능 테스트를 자동화하는 Tool이다.

  • 이 도구는 API 관리 플랫폼을 점검하는 용도이다.
  • GUI를 제공하기에 API에 대한 테스트 작성/실행을 쉽게 제공한다.
  • 손쉽게 사용할 수 있도록 기능이 제공되기에 End to End 테스트를 단순화 한다.

 

메시징

마이크로 서비스는 다른 서비스간 통신이 많기 때문에 Messaging Queue를 사용할 수 있다. 메시징에 사용되는 도구는 아래와 같다.

 

Apache kafka

 

Apache Kafka는 LinkedIn에서 처음 개발한 분산 Pub/Sub 메시징 시스템이고 현재 Apache 프로젝트의 일부이다. Kafka는 확장 가능하고 민첩한 장점을 지니고 있다. 데이터 처리 또는 API 호출에 사용할 수 있는 분산 스트림 처리 플랫폼이다.

Apache Kafka의 기능은 아래와 같다.

  • Kafka는 안정적인 성능을 유지하기 위해서 Pub/Sub에 대한 처리량이 높다.
  • 다운 타임 제로 및 데이터 손실 제로를 보장한다.

 

RabbitMQ

 

Kafka와 마찬가지로 이 툴을 사용하여 마이크로 서비스를 서로 연결하여 분산 시스템의 문제를 해결 할 수 있다. 각 개별 서비스간에 이벤트를 교환 할 수 있다.

  • 안정성, 지속성, Publisher 확인 및 고가용성과 같은 기능을 제공한다.
  • 여러 메시징 프로토콜을 지원한다.

 

Orchestration 도구

Kubernetes

 

Kubernetes는 오픈 소스 컨테이너 관리 도구이다. 컨테이너 관리에는 컨테이너 배포, 컨테이너 확장 및 스케일 제거, 컨테이너 로드 밸런싱등이 포함된다.

 

관점에 따라서 Kubernetes가 평범하고 중요하지 않다고 느낄 수 있다. 그러나 컨테이너 관리를 위해서는 Kubernetes가 필요하고 컨테이너를 만들기 위해서는 Docker가 필요하다. Kubernetes의 기능은 아래와 같다.

  • Kubernetes를 사용하면 이미지를 다시 작성하지 않고도 어플리케이션 구성을 배포하고 업데이트 할 수 있다.
  • Kubernetes는 서비스 관리 외에도 배치 및 CI 워크로드를 관리하여 실패한 컨테이너를 교체 할 수 도 있다.
  • Kubernetes는 CLI와 대시 보드를 제공한다.
  • Kubernetes를 사용하면 원하는 스토리지 시스템을 마운트 할 수 있다. 로컬 스토리지를 선택하거나 GCP 또는 AWS와 같은 퍼블릭 클라우드 공급자를 선택 혹은 NFS, ISCSI등과 같은 공유 네트워크 스토리지 시스템을 사용할 수 있다.

 

Istio

 

Istio는 Kubernetes에서 서비스 배포를 지원한다. 또한 마이크로 서비스 통신에 대한 관리 효율성, 보안 및 안정성을 위한 기능을 제공한다. 이는 Service Mesh 기술에 의해 수행되므로 어플리케이션과 마이크로 서비스 간의 관계 및 상호 작용을 향상 시킬 수 있다.

  • 서비스의 자동 추적, 모니터링 및 로깅을 수행한다.
  • 관리 권한 부여, 인증 및 서비스간 통신 암호화를 통해 서비스를 보호한다.
  • Istio는 서비스간 트래픽 및 API 호출 흐름을 제어한다.
  • 정책을 적용하고 시행한다.

 

모니터링 도구

어플리케이션이 빌드되면 어플리케이션의 작동을 모니터링하는 것은 매우 중요하다. 어플리케이션을 모니터링하기 위해 아래에 언급된 도구를 사용할 수 있다.

 

Prometheus

Prometheus는 이상 패턴을 감지하여 추적하고 모니터링 정보를 시각화 할 수 있다.

  • 유연한 Query 언어를 제공한다.
  • 서비스 디스커버리 또는 정적 구성을 통해 대상을 발견
  • 대시 보드 및 그래프를 제공한다.

 

Logstash

Logstash는 로그를 확인할 수 있는 오픈 소스 도구이다. 이 툴을 사용하면 데이터를 숨기거나 중앙에 집중 시키거나 변환할 수 있다.

  • Logstash는 동시에 여러 가지 공통 소스에서 이벤트를 가져 오는 다양한 입력을 지원한다.
  • 이 툴은 복잡성에 관계없이 데이터를 변환하고 준비하는 것을 목표로 한다.
  • Logstash를 사용하면 전송 데이터를 선택할 수 있다.
  • 200개가 넘는 플러그인이 존재하고 이를 이용하여 원하는대로 파이프 라인을 만들고 구성할 수 있다.

 

태그