우리는 MSA 환경의 Spring 에서 주로 Sleuth 라는 Library 를 사용한다. Sleuth 는 B3-Propagation 을 이용하여 서버간의 Request 흐름을 알 수 있게 해준다. Zipkin 등을 이용하면 UI 측면에서 쉽게 추적할 수 있다. 일단 Sleuth 가 어떻게 되어 있는지 간단하게 살펴보자. 기본적으로 Sleuth 는 아래와 같이 trace_id 와 span_id 를 가진다.
Spring Sleuth 를 사용하게 되면 Multi Thread 간의 문제도 최신버전에서는 해결해준다. @Async 를 썼을때 다른 Thread 로 Context 가 넘어가더라도 traceId 를 잘 복사해주는 것을 확인했었다. 하여튼 TraceId 를 통해서 우리는 아래와 같이 하나의 요청이 들어왔을때 로직들의 흐름이 파악이 가능하다.
이렇게 Logging 을 했을때 가장 중요한 점은 하나의 Request 가 Response 가 되기까지 어떤 행동들을 하는지 전부 파악할 수 있다는 것이다. 즉, 어떤 서버를 호출하거나 혹은 DB 에 쓰기 / 읽기 작업을 하는 것 모두 파악이 가능하다. 우리 팀 서버에는 한가지 문제점이 있었는데 Sleuth 를 최근에 도입한 후에 NodeJS 까지 연결성을 가져가는 것이 힘들었다. 그래서 기술 조사를 하던 도중 NodeJS 에도 B3-Propagation 정책을 따르는 라이브러리가 있는 것을 발견했다.
https://github.com/open-telemetry/opentelemetry-js
위 라이브러리 인데 해당 라이브러리를 이용하여 코드를 적용하면 NodeJS 에서도 아래와 같은 로그를 확인할 수 있다.
'Nodejs' 카테고리의 다른 글
Npm VS Yarn (2) | 2022.03.14 |
---|---|
Mac NVM 설치 (0) | 2021.12.08 |