역량 진단 리포트 마무리
이날은 제품 기능 마무리랑 테스트 인프라 안정화를 같이 한 날이었다.
역량 진단 리포트 확장의 마지막 정리를 하고 QA 시트에서 불필요한 API 의존성을 빼고 멈춤 문제의 타임아웃을 줄였다.
어제 역량 진단 리포트를 국비지원 코스 전용에서 전 코스로 확장했다.
오늘은 그 뒷마무리를 했다.
강사 역할 접근을 뺐다.
역량 진단 리포트는 매니저 전용 기능인데, 어제 확장 과정에서 강사도 접근할 수 있게 되어 있었다.
매니저만 써야 하는 기능이니까, 강사 접근을 제거했다.
그리고 UI에서 “국비지원 매니저 전용”이라는 문구를 지웠다.
이제 전 코스에서 쓸 수 있는 기능이니까, 특정 코스 전용 문구가 의미가 없어졌다.
진단 태그 설정 링크도 조건부로 숨겼다.
관련이 있을 때만 보이게 만들었다.
정리를 마치고 알파 환경에 배포했다.
이걸로 며칠에 걸친 역량 진단 리포트 확장 작업이 끝났다.
노션 제목 API 의존성 제거
QA Agent 쪽에서는 시트 생성 파이프라인을 정리했다.
어제 노션 페이지 제목을 가져오는 기능을 추가했다.
시트를 생성할 때 노션 페이지 제목을 시트 이름으로 쓰는 거였다.
근데 하루 쓰다
보니까, 이게 불필요하다는 걸 깨달았다.
사용자가 슬랙 모달에서 이미 시트 이름을 입력한다.
그런데 노션 API를 또 호출해서 제목을 가져오는 건 네트워크 왕복이랑 실패 지점만 늘리는 거였다.
사용자가 입력한 값을 그대로 쓰면 되니까, 노션 제목 조회를 아예 빼버렸다.
의존성을 빼니까 시트 생성 파이프라인이 단순해졌다.
외부 API 호출이 하나 줄었으니까 실패 지점도 하나 줄었다.
이걸로 시트 생성 파이프라인이 안정적으로 완성됐다.
두 번째 실행이 멈추는 문제
QA 시트에서 두 번째 실행이 멈추는 증상이 있었다.
처음 실행은 잘 되는데, 두 번째부터 멈추는 거다.
원인을 추적해보니 LLM 프로바이더 쪽 장애였다.
에이전트 코드 자체의 버그가 아니라, 외부 LLM이 응답하지 않는 상황이었다.
그런데 타임아웃이 1시간으로 잡혀 있으니까, 장애가 나면 1시간 동안 아무것도 안 하고 기다린 거다.
타임아웃 1시간에서 20분으로
그래서 전체 실행 타임아웃을 1시간에서 20분으로 줄였다.
LLM 프로바이더가 응답하지 않을 때, 한 시간을 기다릴 이유가 없다.
20분이면 충분히 오래 기다린 거다.
타임아웃을 줄이니까, 장애 상황에서 빨리 실패하고 슬랙으로 알림이 가게 됐다.
조용히 한 시간을 멈춰 있는 대신, 20분 만에 실패를 알리는 거다.
이 타임아웃은 이후에 더 줄어든다. 약 두 달 뒤에 비슷한 멈춤 문제가 또 생겼는데, 이때 타임아웃을 20분에서 8분으로 더 줄였다.
에이전트 프레임워크 자체에 하드 타임아웃이 없으니까, 호출하는 쪽에서 잡는 타임아웃이 유일한 방어선이다.
빨리 실패하게 만드는 게 낫다는 걸 점점 더 확실하게 깨달아간 거다.
마무리
내가 이날 배운 핵심은 다음과 같다.
제품 기능 마무리랑 테스트 인프라 안정화를 같이 한 날이었다.
두 가지는 전혀 다른 작업 같지만 사실 연결되어 있다.
역량 진단 리포트 같은 기능을 안정적으로 만들려면, 그 기능을 검증하는 QA 에이전트도 안정적이어야 한다.
의존성 제거가 두 작업의 공통 주제였다.
역량 진단 리포트에서는 특정 코스 전용이라는 의존성을 빼고 전 코스로 확장했다.
QA 시트에서는 노션 API라는 외부 의존성을 빼고 사용자 입력을 직접 썼다.
의존성을 빼면 더 단순해지고 더 안정적이 된다.
그리고 타임아웃을 줄인 것도 중요한 교훈이다.
외부 서비스가 응답하지 않을 때, 길게 기다리는 건 도움이 안 된다.
빨리 실패하고 빨리 알리는 게 낫다.
이 원칙은 이후에도 계속 적용됐다.