개발 slecs

폭주하는 피드백으로 마비된 학습 시스템 복구

목차

작업: learn-update 스크립트의 세 가지 버그를 한 번에 수정했다. 피드백 제한(cap), 백로그 드레인, 실행 권한 복원.

문제 상황

학습 시스템은 주기적으로 모델 성능 분석 결과나 상태 피드백을 생성한다. 그런데 어느 순간부터 스크립트가 실행될 때마다 쌓인 피드백들이 한꺼번에 폭주했다. 알림과 로그가 넘쳐났고, 응답 속도가 눈에 띄게 떨어졌다. 심지어 백그라운드 작업이 앞쪽 사용자 요청을 밀어내는 상황까지 발생했다.

근본 원인은 세 가지였다:

문제 증상
한 번 실행에 처리 제한 없음 메모리 부하, 외부 API 레이트 리밋 초과
오래된 피드백 누적 백로그 무한 증가, 통계 왜곡
실행 권한 누락 cron 작업 침묵 실패

세 가지 수정사항

1. 한 번 실행당 피드백 처리량 제한 (cap feedback per run)

스크립트가 주기적으로 실행될 때, 메모리에 쌓인 모든 피드백을 동시에 처리하려 하면 문제가 생긴다. 예를 들어:

# Before: 백로그를 한꺼번에 처리 (위험)
feedback_list = get_all_pending_feedback()  # 10만 개?
for feedback in feedback_list:
    send_notification(feedback)  # 과부하

# After: 한 번에 N개씩만
feedback_list = get_pending_feedback(limit=100)
for feedback in feedback_list:
    send_notification(feedback)

이렇게 cap을 설정하면:
- 한 사이클당 예측 가능한 리소스 사용량
- 여러 실행 주기에 걸쳐 점진적 처리
- 타임아웃이나 레이트 리밋 회피

실제로 처리 속도가 생성 속도를 따라가지 못할 때는, 무한정 기다리거나 다 처리하려 하기보다, 시스템 설계에 처음부터 제한을 반영하는 게 훨씬 깔끔하다.

2. 백로그 드레인 (drain backlog)

오래된 피드백은 이미 의미가 없을 수 있다. 너무 오래된 항목(예: 1주일 이상)은:
- 타이밍이 지나간 인사이트
- 통계적 왜곡 (3일 동안 못 돈 스크립트의 "catch-up" 실행)
- 스토리지 낭비

드레인 전략:
├─ 1주일 이상 오래된 항목 → 폐기
├─ 3일~1주일 → 요약/집계
└─ 3일 이내 → 정상 처리 (limit 적용)

이렇게 하면 "스크립트 재시작 후 갑자기 폭주" 같은 현상을 예방할 수 있다.

3. 실행 권한 복원 (restore +x)

스크립트 파일의 +x 권한이 어딘가에서 날아갔을 것이다. 보통 원인은:

  • git add -A 할 때 권한 정보 손실: 특히 재배포나 다른 환경에서 커밋될 때
  • 배포 스크립트에서 tar/zip 압축할 때 권한 미보존: 설정 누락
  • 파일 복사/동기화 과정에서 권한 초기화: rsync, scp 기본값

이 문제가 생기면 cron 작업이 Permission denied 에러를 뱉으면서 조용히 실패한다. 대부분 로그를 자세히 보지 않으면 한참 헤맨다.

예방책:

# 배포 스크립트에 명시적 권한 설정
find deploy/ -name "*.sh" -exec chmod +x {} \;
find deploy/ -name "learn-update.py" -exec chmod +x {} \;

# 또는 git 설정 확인
git config core.fileMode  # true 여야 권한 보존

회고: 백그라운드 작업의 "눈에 띄지 않는 문제"

이런 주기적 작업들은 한 번 맞춰 놓으면 잊기 쉽다. 하지만 시간이 지나면서:
- 부하가 점진적으로 쌓임
- 시스템 한계에 갑자기 도달
- 권한이나 환경 설정이 변함

정기적으로 체크해야 할 신호:
- 스크립트 로그: 실패율, 처리 시간의 증가 추세
- 백로그 크기 그래프: 언제부터 가파르게 올라가나
- cron/스케줄러 실행 이력: 침묵 실패가 반복되지 않나

이번 수정으로 일시적 안정성은 회복되겠지만, 구조적 개선 없이는 몇 개월 후 또 비슷한 형태의 문제가 반복될 가능성이 크다. 그래서 이 수정과 함께:
- "왜 백로그가 계속 쌓이는가?" (생성/처리 속도 비율 분석)
- "왜 배포 과정에서 권한이 누락되는가?" (파이프라인 점검)

를 팀과 함께 풀기로 했다.

다음에는 이런 배경 작업들에 "최대 백로그 크기", "경고 임계값", "자동 드레인 정책" 같은 걸 처음부터 설계해야겠다는 생각이 든다.


🛒 이 글과 어울리는 추천 상품

*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.

댓글 0

첫 댓글 달아줘.