상관관계 ID(Correlation ID)분산 시스템 또는 마이크로서비스 아키텍처에서 트랜잭션 추적을 위해 사용하는 고유한 식별자입니다. 이 ID는 하나의 요청이나 트랜잭션이 시스템을 통해 여러 서비스를 거칠 때, 각 서비스의 로그에 같은 ID를 기록함으로써 요청의 흐름을 추적하고, 전체적인 트랜잭션을 한눈에 파악할 수 있게 해줍니다.

상관관계 ID의 역할

  1. 요청 추적:

    • 클라이언트가 서버로 요청을 보낼 때, 요청에 상관관계 ID를 포함시킵니다. 그 후 여러 서비스가 요청을 처리하면서 각 서비스의 로그에 해당 상관관계 ID를 포함시켜, 요청이 어디서부터 시작되었는지, 어떤 경로로 갔는지, 어떤 서비스에서 실패했는지를 추적할 수 있습니다.
  2. 분산 시스템에서 트랜잭션 추적:

    • 마이크로서비스 아키텍처에서는 하나의 요청이 여러 개의 서비스에 걸쳐 처리됩니다. 각 서비스가 개별적으로 로깅되기 때문에 개별 로그만으로는 전체 흐름을 알 수 없습니다. 상관관계 ID를 사용하면, 이들 로그를 하나로 연결해 전체 트랜잭션을 추적할 수 있습니다.
  3. 디버깅과 모니터링:

    • 시스템 장애가 발생했을 때, 상관관계 ID를 통해 문제가 발생한 요청을 추적하여 문제를 신속하게 파악하고 해결할 수 있습니다. 이는 효율적인 디버깅을 가능하게 하고, 서비스 간의 연관을 쉽게 파악할 수 있게 합니다.

상관관계 ID 사용 예시

1. HTTP 요청에 상관관계 ID 포함

클라이언트가 요청을 보낼 때, HTTP 헤더상관관계 ID를 포함시킵니다. 이후 각 서비스는 이 ID를 추적하여 자신이 처리한 로그에 해당 ID를 기록합니다.

  • 클라이언트 요청:
    클라이언트가 HTTP 요청을 보낼 때, 요청 헤더에 상관관계 ID를 추가합니다.

    GET /api/resource HTTP/1.1
    Host: example.com
    X-Correlation-ID: 12345-abcd-67890
  • 서비스 A (첫 번째 서비스):
    서비스 A는 상관관계 ID를 받으면, 이 ID를 로그에 기록하고, 그 다음 서비스로 요청을 전달할 때 해당 ID를 그대로 전달합니다.

    [INFO] 2024-12-09 14:35:00 Request started, Correlation ID: 12345-abcd-67890
  • 서비스 B (두 번째 서비스):
    서비스 B는 요청을 처리할 때, 상관관계 ID를 다시 받아서 로그에 기록하고, 그 다음 서비스로 요청을 전달합니다.

    [INFO] 2024-12-09 14:36:00 Processing request, Correlation ID: 12345-abcd-67890
  • 최종 서비스:
    마지막 서비스는 요청을 처리한 후 결과를 반환하면서, 상관관계 ID를 포함하여 응답을 보냅니다.

    HTTP/1.1 200 OK
    X-Correlation-ID: 12345-abcd-67890

2. 로그에서 상관관계 ID 추적

  • 각 서비스에서 로그를 남길 때, 상관관계 ID를 같은 형식으로 기록함으로써, 트랜잭션의 흐름을 파악할 수 있습니다.

    [INFO] 2024-12-09 14:35:00 Request started, Correlation ID: 12345-abcd-67890
    [INFO] 2024-12-09 14:36:00 Processing request, Correlation ID: 12345-abcd-67890
    [INFO] 2024-12-09 14:37:00 Response sent, Correlation ID: 12345-abcd-67890

3. 디버깅 및 장애 추적

  • 장애가 발생했을 때, 상관관계 ID를 사용하여 관련된 모든 로그를 빠르게 찾고 문제를 파악할 수 있습니다.
  • 예를 들어, 서비스 A에서 요청을 처리하고, 서비스 B에서 실패가 발생했다면, 상관관계 ID를 통해 실패한 부분명확하게 추적할 수 있습니다.

상관관계 ID를 사용하는 이유

  1. 분산 시스템에서 트랜잭션 추적:

    • 분산 시스템에서는 각 서비스가 독립적으로 동작하기 때문에, 단일 트랜잭션이 여러 서비스에 걸쳐 실행될 수 있습니다. 상관관계 ID는 각 서비스에서 요청을 추적하고 전체 흐름을 파악하는 데 중요한 역할을 합니다.
  2. 문제 해결 용이:

    • 장애나 성능 이슈가 발생했을 때, 상관관계 ID를 사용하면 문제의 원인을 더 빨리 파악할 수 있습니다. 특히, 장애가 여러 서비스에 걸쳐 발생할 경우, 로그에서 해당 ID를 추적하면 어떤 서비스에서 문제가 발생했는지를 쉽게 알 수 있습니다.
  3. 모니터링 및 분석:

    • 상관관계 ID는 분석 도구모니터링 시스템에서 트랜잭션을 추적하는 데 유용합니다. 예를 들어, APM(Application Performance Management) 도구에서는 상관관계 ID를 사용해 성능 문제를 추적하고, 서비스 간의 응답 시간을 분석할 수 있습니다.

상관관계 ID 구현 방법

  1. 클라이언트 측:

    • 클라이언트는 요청을 보낼 때 상관관계 ID를 생성하거나, 이미 존재하는 ID를 헤더에 추가합니다. 만약 클라이언트가 상관관계 ID를 제공하지 않는다면, 서버 측에서 자동으로 생성하여 응답 헤더에 포함시킬 수 있습니다.
  2. 서버 측:

    • 서버는 클라이언트가 보낸 상관관계 ID를 추출하고, 이를 기반으로 로그를 기록합니다. 서버 간의 통신에서도 상관관계 ID를 전달하며, 여러 서비스 간의 트랜잭션 흐름을 추적합니다.
  3. 중간 계층 서비스:

    • API 게이트웨이프록시 서버가 있을 경우, 이들 또한 상관관계 ID를 받아서 요청을 다른 서비스로 전달하고, 관련된 모든 서비스에 동일한 ID를 전파합니다.

결론

상관관계 ID분산 시스템에서 트랜잭션 추적을 돕는 중요한 도구로, 클라우드 기반 시스템, 마이크로서비스 아키텍처, 서비스 간 연동에서 요청의 흐름을 추적하고 장애를 빠르게 파악하는 데 매우 유용합니다. 이를 통해 시스템 간의 의존성 추적이 가능하고, 디버깅모니터링을 더 효율적으로 할 수 있습니다.

+ Recent posts