커스텀 메트릭으로 AI 응답 품질 판별 기준을 만들어보자
·
Observability
문제 상황Edukit 서비스는 교사들을 위해 AI를 활용하여 학생부 작성 업무를 돕는 서비스다. 하지만 이 서비스를 만드는 구성원은 현직 교사가 아닌 개발자 3명이었기 때문에, AI가 생성하는 응답의 품질을 명확하게 판단하기 어려웠다. 이를 보완하기 위해 설문조사를 통해 만족도를 수집했지만, 운영 서버에 새 기능을 배포할 때마다 질문을 초기화해야 하는 번거로움이 있었고, 사용자 수에 비해 응답률도 높지 않아 한계가 있었다. 이러한 상황이 반복되면서 서비스 개선 과정에서도 응답 품질에 대한 확신을 점점 잃게 되었다.그러던 중 소마 전담 멘토링을 통해 커스텀 메트릭이라는 개념을 알게 되었고, 이를 활용하면 실제 사용 패턴을 기반으로 AI 응답 품질을 정량적으로 확인할 수 있지 않을까? 라는 생각을 하게 되었..
메시징 패턴 (feat. Pub/Sub, Queue, Event Stream)
·
Observability
메시징이란메시징은 발신자와 수신자를 분리하는 방법이다. 메시징 시스템은 가장 단순하게 말하면 시스템의 한 부분에서 다른 부분으로 정보를 전달하는 것을 의미한다. 생산자가 메시지를 보내면, 브로커가 이를 저장하고 라우팅하며, 소비자가 가져가서 필요한 작업을 수행한다. 이 과정에서 서비스는 다른 서비스가 작업을 완료할 때까지 기다리지 않는다. 단지 메시지를 전달하고 곧바로 다음 일을 진행한다. 메시지는 브로커에 안전하게 저장되며, 수신자는 준비가 되었을 때 메시지를 처리한다. 만약 수신자가 실패하더라도 메시지는 대기 상태로 남아 있다. 하지만 모든 메시징 시스템이 동일한 동작 방식을 제공하는 것은 아니다. 이번 글에서는 자주 나타나는 3가지 주요 패턴에 대해 살펴 보고자한다.핵심 개념생산자, 소비자, 브로커..
MDC를 활용한 로깅 개선기
·
Observability
문제상황아래 화면은 현재 우리 서버에서 기록되고 있는 로그 일부이다. 회원이 가입을 하면 비동기로 인증 이메일을 발송하는 로직이 동작하는데, 현행 로그 추적 체계에서는 이 요청이 동일한 흐름(즉, 하나의 요청에서 파생된 작업)인지 식별하기가 어렵다는 문제가 있었다.이 때문에 장애가 발생했을 때도 어떤 요청에서 비롯된 문제인지 추적하기 쉽지 않았다.또한 비동기 작업 흐름과 별개로, 어떤 사용자가 보낸 요청인지 식별할 수 없는 점도 불편함을 키웠다. 실제로 사용자 문의 메일을 통해 장애 보고가 접수되더라도, 해당 상황과 관련된 로그를 바로 찾아내기가 어려워 즉각적인 대응이 지연되곤 했다. 물론 타임스탬프를 통해서 어느정도 구분이 가능하지만, 톰캣의 경우 스레드 풀을 재사용하기 때문에 스레드 이름만으로 로그를..
서킷 브레이커(Circuit Breaker) 알아보기
·
Observability
외부 연동 서비스에, 장애가 발생했어요!외부 서비스에 과부하가 발생해 응답을 제대로 주지 못하고 있는 상황이라고 생각해보자. 연동 서비스가 정상화되기 전까지는 요청을 보내도 계속 에러만 발생하게 될 것이다. 또한, 읽기 타임아웃이 발생할 때까지 대기하느라 응답 시간도 길어지게 될 것이다.그림과 같은 상황일 때, A 서비스는 B 서비스에 요청을 보내지 않고 바로 에러를 응답하는 것이 낫다. 이렇게 하면 B 서비스의 문제가 A 서비스에 주는 영향(응답 시간 증가, 처리량 감소)을 줄일 수 있다. 또한 사용자 입장에서도 수 초를 대기하다가 에러 화면을 보는 것보다는, 빠르게 에러 화면을 보는 편이 낫다. 즉, 연동 서비스가 장애 상황일 때는, 연동 대신 바로 에러를 응답하고, 정상화되었을 때 연동을 재개하면 ..
모니터링 시스템 구축기
·
Observability
모니터링 시스템이 왜 필요할까?서비스가 정상적으로 운영되고 있을 때는 모니터링 시스템의 필요성을 쉽게 체감하지 못한다. 그러나 예기치 못한 오류나 성능 저하가 발생하면 상황은 급변한다. 사용자로부터 불만이 접수되기 시작하고, 개발자는 “무슨 일이 일어난 걸까?”라는 질문부터 던지게 된다. 이때 모니터링 시스템의 유무는 문제 해결 속도를 결정짓는 중요한 요소가 된다.모니터링 시스템은 단순히 데이터를 수집하고 시각화하는 도구가 아니다. 시스템의 상태를 실시간으로 파악하고, 장애를 빠르게 감지하며, 그 원인을 추적할 수 있도록 도와주는 운영의 필수 구성 요소다. 또한, 장기적으로는 성능 개선과 리소스 최적화에도 기여하여 서비스의 안정성과 신뢰도를 높이는 데 중요한 역할을 한다.메트릭 기반 모니터링: Prome..
효율적인 로그 관리를 위한 Logback 설정
·
Observability
로깅을 하는 이유?로깅이란 시스템이 동작하는 동안, 그 상태와 동작 정보를 시간의 흐름에 따라 기록하는 행위를 의미한다. 이 과정에서 생성된 로그는 개발자가 애플리케이션의 동작을 파악하고 문제를 진단하는 데 있어 매우 중요한 역할을 한다. 특히 예기치 못한 오류나 예외 상황이 발생했을 때, 로깅은 문제의 원인을 추적하는 실마리를 제공한다.개발 과정에서 뿐만 아니라 운영 환경에서도 로깅은 유용하게 활용된다. 예를 들어, 사용자 행동에 대한 로그는 단순한 기록을 넘어, 서비스 개선을 위한 분석 데이터로 활용될 수 있다. 사용자의 패턴을 파악하고 이를 기반으로 기능을 개선하거나, 성능 병목 지점을 찾아내는 데에도 큰 도움이 된다.하지만 로깅이 무조건 많다고 해서 좋은 것은 아니다. 로깅의 수준(level)이나..