마이크로서비스 구축 시 직면할 수 있는 새로운 과제, 즉 관측성(Observability) 및 모니터링(Monitoring)에 대해 다룹니다. 이 두 가지 개념을 통해 마이크로서비스 환경에서 발생하는 다양한 문제를 효과적으로 해결할 수 있는 방법을 탐구할 것입니다.
첫 번째로, 마이크로서비스에서 문제를 디버깅하는 방법에 대해 고민해야 합니다. 모놀리식 애플리케이션에서는 단일 애플리케이션이기 때문에 디버깅이 비교적 간단하지만, 마이크로서비스 환경에서는 요청이 여러 서비스와 컨테이너를 거치게 됩니다. 이 과정에서 발생하는 문제를 추적하고, 정확히 어디에서 문제가 발생했는지를 찾아내는 것은 매우 어려운 과제입니다.
두 번째 문제는 여러 서비스에서 생성된 로그를 어떻게 중앙화된 위치에 모으고 관리할 것인가 하는 것입니다. 모놀리식 애플리케이션에서는 단일 애플리케이션이 로그를 생성하므로, 로그를 수집하고 분석하는 것이 비교적 쉽습니다.
하지만 마이크로서비스 환경에서는 여러 컨테이너와 서비스가 각각 로그를 생성하기 때문에, 모든 로그를 개별적으로 확인하는 것은 매우 번거롭습니다. 따라서 로그를 중앙화된 위치에 모아 쉽게 검색, 필터링, 그룹화할 수 있는 방법이 필요합니다.
세 번째로, 서비스 호출의 성능을 어떻게 모니터링할 것인지가 중요한 문제입니다. 마이크로서비스 환경에서는 하나의 요청이 여러 서비스를 거치며, 각 서비스가 얼마나 오랜 시간이 걸리는지를 추적할 필요가 있습니다. 이를 통해 성능 문제를 식별하고, 특정 서비스가 병목 현상을 일으키고 있는지를 파악할 수 있습니다.
또한, 마이크로서비스와 컨테이너의 메트릭스 및 상태를 어떻게 모니터링할 것인지도 중요한 과제입니다. 수많은 컨테이너와 마이크로서비스의 CPU 사용량, JVM 메트릭스 등을 모니터링하고, 이를 통해 시스템의 전반적인 상태를 파악해야 합니다. 이를 위해 개별 서비스의 상태를 지속적으로 모니터링하는 것은 비효율적이기 때문에, 중앙화된 대시보드에서 모든 서비스를 관리할 수 있는 방법을 찾아야 합니다.
마지막으로, 비정상적인 행동이 감지될 때 자동으로 경고와 알림을 생성할 수 있는 시스템이 필요합니다. 모든 마이크로서비스를 24시간 감시하는 것은 현실적이지 않기 때문에, 문제가 발생했을 때 이를 자동으로 감지하고 경고를 발생시키는 시스템이 필요합니다.
이 모든 문제를 해결하기 위해 관측성(Observability) 및 모니터링(Monitoring) 개념을 도입합니다. 이 두 개념을 통해 마이크로서비스 네트워크에서 발생하는 문제를 효과적으로 식별하고 해결할 수 있습니다.
이번 섹션에서는 관측성과 모니터링의 정의부터 시작하여, 실제로 마이크로서비스 환경에서 이를 구현하고 사용하는 방법을 배우게 됩니다. 관측성 및 모니터링은 마이크로서비스 환경에서 매우 중요한 주제이므로, 이 섹션을 통해 이러한 개념에 대한 이해를 깊이 있게 다질 수 있을 것입니다.