Page 22 -
P. 22
마이크로서비스 아키텍처는 복잡한 모놀리식 소프트웨어 시스템을 더 작고 관리 가능한 부분으로
분해하는 강력한 설계 패러다임이다. 분해된 부분들은 서로 독립적으로 빌드되고 배포될 수 있다.
하지만 이러한 유연성에는 ‘복잡함’이라는 비용이 든다.
마이크로서비스는 본질적으로 분산되어 있기 때문에 문제가 발생한 위치를 디버깅하는 것은 매우
번거로운 작업이다. 분산된 서비스의 특징은 여러 서비스와 물리 머신, 다양한 데이터 저장소에
걸쳐 단일 또는 복수 트랜잭션을 추적한 후 정확히 상황을 종합하려고 노력해야 한다는 것이다.
이 장에서는 분산 디버깅을 위한 몇 가지 기술과 기법을 제시하며 다음 사항을 살펴볼 것이다.
● 상관관계 ID를 사용하여 여러 서비스 간 트랜잭션 연결
● 다양한 서비스에서 전송된 로그 데이터를 검색 가능한 단일 소스로 수집
● 트랜잭션 성능 특성의 각 부분을 이해하고자 여러 서비스 간 사용자 트랜잭션 흐름을 시
각화
● ELK 스택을 이용한 실시간 로그 데이터 분석, 검색, 시각화
이를 위해 다음 기술을 사용한다.
● 스프링 클라우드 슬루스(Spring Cloud Sleuth)(https://cloud.spring.io/spring-cloud-
sleuth/reference/html/): 스프링 클라우드 프로젝트는 유입되는 HTTP 요청을 상관관계
ID라고 알려진 추적 ID(trace ID)로 측정한다. 이 작업을 위해 필터를 추가하고 다른 스프링
컴포넌트와 상호 작용하여 생성된 상관관계 ID를 모든 시스템 호출에 전달한다.
● 집킨(Zipkin)(https://zipkin.io/): 집킨은 여러 서비스 간의 트랜잭션 흐름을 보여 주는 오
픈 소스 데이터 시각화 도구다. 집킨을 사용하면 트랜잭션을 컴포넌트별로 분해하고 성능
병목점을 시각적으로 확인할 수 있다.
● ELK 스택(https://www.elastic.co/what-is/elk-stack): ELK 스택은 세 개의 오픈 소스
도구인 일레스틱서치, 로그스태시, 키바나를 결합하여 실시간으로 로그를 분석, 검색, 시각
화할 수 있다.
■ 일레스틱서치(Elasticsearch)는 모든 유형의 데이터(정형, 비정형, 숫자, 텍스트 기반의 데
이터 등)를 위한 분산 분석 엔진이다.
■ 로그스태시(Logstash)는 여러 소스의 데이터를 동시에 추가 및 수집하고 일레스틱서치
에서 인덱싱되기 전에 로그를 변환할 수 있는 서버 사이드 데이터 프로세싱 파이프라인
이다.
404
macrospring_06.indd 404 2022-06-20 오후 1:10:04