마이크로서비스를 처음 사용할 때는 새로운 기술을 많이 채택할 필요가 없다. 오히려 역효과를 낳을 수 있기 때문이다. 그 대신에 마이크로서비스 아키텍처를 확장하면서 점차 분산되는 시스템으로 인해 발생하는 문제를 지속적으로 찾고 도움이 될 만한 기술을 찾아야한다.
마이크로서비스를 사용하기로 결정했다면, 도움이 될 몇 가지 활성화 기술을 알아보자.
1. 로그 집계와 분산 추적
마이크로서비스 아키텍처를 채택하기 위한 전제 조건으로 로그 집계 시스템을 구현할 것을 강력히 추천한다.
로그 집계 시스템을 사용하면 모든 서비스에서 로그를 수집하거나 집계하고 한 곳에서 분석할 수 있으며, 능동적인 경보 메커니즘 일부도 만들 수 있다. 이 분야의 많은 방법은 다양한 상황에 활용될 수 있다. 일단은 클라우드 제공업체에서 제공하는 간단한 로깅 서비스도 시작하기에는 충분할 것이다.
연관된 서비스 호출에 사용되는 단일 ID인 상관관계 ID를 구현해 이러한 로그 집계 도구를 훨씬 유용하게 만들 수 있다. 예를 들면 호출 체인의 경우 사용자 상호작용으로 트리거될 경우가 많다. 이 ID를 각 로그 항목에 기록하면 지정된 호출 플로와 관련된 로그를 훨씬 분리할 수 있고, 문제 해결도 더 수월해진다.
상관관계 ID란, 분산 시스템에서 하나의 호출 체인이나 사용자 상호작용에 대해 단일로 부여되는 식별자이다. 예를 들어, 사용자의 요청이 여러 서비스에 걸쳐 처리될 때, 최초 요청 시 생성된 이 ID를 후속 서비스 호출에 함께 전달하게 된다.
이렇게 하면 모든 서비스에서 생성된 로그에 동일한 상관관계 ID가 기록되어, 로그 집계 도구를 사용해 전체 호출 흐름을 한눈에 파악할 수 있다. 결과적으로 문제 발생 시 어느 부분에서 오류가 발생했는지 보다 쉽게 추적하고, 디버깅 과정이 크게 간소화된다.
시스템이 복잡해짐에 따라 시스템이 수행하는 작업을 더 잘 알아낼 도구들을 고려하는 것이 중요해진다. 이 도구들은 여러 서비스를 경유하는 추적을 분석하고, 병목점을 감지하며, 처음에는 묻고 싶지 않았던 시스템에 대한 질문을 할 수 있게 해준다. 오픈 소스 도구는 이러한 몇몇 기능을 제공한다. 예를 들면 분산 추적 측면에 중점을 둔 예거(https://www.haegertracing.io)가 있다.
Jaeger는 마이크로서비스 기반의 분산 시스템 내에서 여러 서비스에 걸친 호출 체인을 추적하고, 서비스 간의 상호작용 및 성능 병목을 분석하는 데 유용한 도구이다.
이 외에도 라이트스텝(https://lightstep.com)이나 허니코움(https://honeycomb.io)과 같은 제품은 그 개념을 더욱 발전시켰으니 한 번 알아보면 좋다.
2. 컨테이너와 쿠버네티스
배포 관리의 오버헤드가 심각한 골칫거리가 되기 시작하면 서비스의 컨테이너화와 쿠버네티스 사용을 고려하자.
3. 스트리밍
대용량 데이터를 쉽게 스트리밍하고 처리하는 제품은 마이크로서비스 아키텍처를 사용하는 사람들에게 인기를 얻고 있다.
많은 사람에게 아파치 카프카는 다양한 이유로 마이크로서비스 환경에서 데이터를 스트리밍하기 위한 실질적인 선택지가 됐다. 예를 들면 메시지 영구성, 압축, 대용량 메시지를 처리할 수 있는 확장 기능 등은 매우 유용하다. 아파치 플린크(Apache Flink)와 같은 전용 스트림 프로세싱 솔루션도 함께 사용할 수 있다. 데베지움(Debezium)은 카프라를 통해 기존 데이터 소스의 데이터를 스트리밍할 수 있도록 개발된 오픈 소스 도구로, 기존 데이터 소스를 스트림 기반 아키텍처의 일부로 만들어준다.
4. 공용 클라우드 및 서버리스
클라우드 제공업체는 관리형 데이터베이스 인스턴스나 쿠버네티스에서 메시지 브로커나 분산 파일 시스템에 이르기까지 많은 관리형 서비스를 제공한다. 관리형 서비스를 사용하면 이러한 작업을 더 잘 처리할 수 있는 제 3자에게 많은 양의 작업을 넘길 수 있다.
클라우드 제품 중 특히 흥미로운 것은 서버리스 제품들이다. FaaS 플랫폼은 코드 배포에 대한 멋진 추상화를 제공한 덕분에 특별한 관심을 받는다. 서비스를 실행하는 데 필요한 서버 수를 신경 쓰지 않으면서 단지 코드를 배포하고 하부 플랫폼이 요청에 따라 코드의 인스턴스를 시작하는 처리만 하면 된다.
'기타' 카테고리의 다른 글
시스템 설계 - 증권 거래소 (0) | 2025.04.06 |
---|---|
[MSA] 마이크로서비스의 핵심 개념 (0) | 2025.04.03 |
[MSA] 마이크로서비스의 정보 은닉(feat. SOA) (0) | 2025.04.03 |
[npm] npm 버전 하나 올리는 명령어 (0) | 2025.04.02 |
Conventional Commit Rules (0) | 2025.02.23 |
댓글