밤빵's 개발일지
[TIL]20241217 Observability 본문
프로젝트를 진행하면서 시스템의 상태를 명확하게 관찰할 방법에 대해 고민하게 되었다. 이전까지는 로그만으로 문제를 찾아보는 방식이였는데, 사용자에게 다양한 데이터를 제공하고 외부 API를 활용하는 프로젝트를 진행하다 보니, 단순한 로그 기록만으로는 문제의 원인이나 병목 구간을 파악하는 데 한계가 있었다. Observability(관측성) 라는 개념은, 단순한 로그 확인을 넘어 시스템의 상태와 흐름을 종합적으로 분석하는 능력을 의미한다. 이번 개발일지에서는 Observability의 개념과 이를 학습하며 느낀 점을 정리하려고 한다!
Observability
Observability는 시스템의 내부 상태를 관찰하고 분석해 문제를 파악하는 개념으로, 세 가지 Pillar로 구성된다:
로그
시스템이 남기는 기록으로 에러, 이벤트, 상태 변화 등을 확인할 수 있다.
메트릭
CPU, 메모리 사용량과 같은 시스템 성능 데이터를 정량적으로 제공한다.
트레이싱
하나의 요청이 시스템 내부에서 어떤 경로를 거쳤는지를 추적하고 시각화한다.
이 세 가지 요소를 종합적으로 활용하면 시스템에서 발생하는 문제를 더 빠르고 정확하게 진단할 수 있다.
기존 방식의 한계
병목 구간 파악의 어려움
요청이 여러 서비스 계층을 거쳐 처리되는데, 어느 단계에서 응답 시간이 길어졌는지를 정확히 알기 어려웠다.
사후 대응에 머무름
문제가 발생한 후 로그를 뒤져 원인을 파악하는 방식이다 보니, 문제를 미리 감지하고 대응하는 것이 불가능했다.
서비스 흐름의 불투명성
외부 API를 호출하거나 데이터를 가공하는 과정에서 전체적인 흐름을 시각화하지 못해 비효율적으로 추론해야 했다.
Observability를 통해 무엇을 알 수 있는 것
트레이싱
사용자가 어떤 데이터를 요청했을 때, API가 어떤 단계를 거쳐 데이터를 반환하는지 추적할 수 있다.이런 요청 흐름을 시각적으로 확인하면 어느 단계에서 시간이 지체되었는지 쉽게 파악할 수 있다.
사용자 요청 → 외부 API 호출 → 데이터 변환 → DB에 저장 → 사용자에게 반환
메트릭
시스템의 CPU, 메모리 사용량을 실시간으로 모니터링해서 특정 시점이나 특정 API 호출에서 자원이 비정상적으로 많이 소모되는 패턴을 확인할 수 있다.
로그
기존 로그에 더해 요청과 응답의 상세 데이터를 기록하면, 문제 발생 시 어떤 입력값이 원인이 되었는지 빠르게 확인할 수 있다.
느낀 점
문제 해결 방식의 변화
기존에는 문제가 발생하면 로그를 뒤져 원인을 찾는 대응에 집중했다. 하지만 Observability를 통해 시스템 전반을 관찰하면 문제가 발생하기 전부터 이상을 감지하고 선제적으로 대응할 수 있다는 점이 인상적이었다.
시스템에 대한 이해도 향상
Observability는 단순히 문제를 찾는 도구가 아니라, 시스템의 흐름과 구조를 더 깊이 이해하는 데에도 도움을 준다. 하나의 요청이 어떤 경로를 거치는지를 명확히 파악하면, 시스템의 성능을 개선하거나 구조를 최적화하는 데 큰 도움이 될거다.
초보 개발자의 고민
아직 프로젝트에 Observability를 도입할 단계는 아니지만, 학습하면서 시스템을 바라보는 시각이 넓어졌다. 그동안 기능 구현에만 집중했다면, 이제는 시스템의 성능과 흐름을 분석하는 방법까지 고민해 볼 수 있다.
적용 가능성...?
프로젝트에서 Observability를 직접 도입하는 것은 기술적, 리소스적인 한계가 있을 수 있기때문에, 적용을 한다면 고민을 좀 해야할 것 같다.
기록 로그 개선
중요한 요청에 대해 상세한 입력값과 응답값을 기록해 문제 해결 속도를 높인다.
기본적인 메트릭 수집
시스템의 CPU, 메모리 사용량을 모니터링하고 병목 지점을 파악한다.
트레이싱 도구 학습
간단한 트레이싱을 통해 API 요청 흐름을 시각화하고 이해하는 연습을 한다.
Observability는 단순히 로그를 확인하는 것을 넘어 시스템의 상태와 흐름을 더 깊이 이해하고 분석하는 개념이다. 이번 학습을 통해 시스템 문제를 선제적으로 감지하고 해결하는 접근법의 중요성을 알게 되었고, 장기적으로는 프로젝트에 적용할 가능성도 열어두었다. 앞으로도 기능 구현에만 머무르지 않고 시스템 전반의 성능과 흐름을 개선하는 방법을 고민하며 성장하는 개발자가 되고 싶다.
'개발Article' 카테고리의 다른 글
[TIL]20241219 RestTemplate과 WebClient (2) | 2024.12.19 |
---|---|
[TIL]20241218 멱등성 처리 설계 초안 (0) | 2024.12.18 |
[TIL]20241216 벨루가 추천 시스템 (1) | 2024.12.16 |
[TIL]20241215 DDD 이해하기 (0) | 2024.12.15 |
[TIL]20241214 내 시각에서 이해한 클러스터링 개념 (0) | 2024.12.14 |