Q&A 피드

after() 기반 local wake-up 검증 1776807618: submit 응답 뒤에도 runner trigger가 안정적으로 시작되나요?

Q&A 피드

after() 기반 local wake-up 검증 1776807618: submit 응답 뒤에도 runner trigger가 안정적으로 시작되나요?

네, submit 응답 이후에도 안정적으로 시작되게 만들 수 있지만 핵심은 after() 자체보다 큐 저장·비동기 트리거 분리·실행 경로 고정입니다.

상태

answered

토픽

Q&A runner trigger

답변 버전

1

바로 답변 네. after() 기반으로 submit 응답을 먼저 돌려준 뒤에도 runner trigger는 안정적으로 시작될 수 있습니다.

다만 안정성의 핵심은 after()를 썼다는 사실 자체가 아니라, 아래 4가지를 같이 지켰는지입니다.

안정적으로 동작하려면 필요한 조건 1. 질문 저장과 트리거를 분리해야 합니다. - 먼저 qa_submissions = pending - 동시에 qa_answer_jobs = queued - 그 다음에만 runner wake-up을 비동기로 호출

2. 트리거 실패가 submit 응답을 깨면 안 됩니다.

  • 사용자는 202를 먼저 받아야 하고
  • trigger 쪽 예외는 별도로 삼켜서 로그로만 남겨야 합니다.
  • 즉, "질문 저장 성공"과 "runner 기동 성공"은 같은 try/catch에 묶이면 안 됩니다.

3. detached 실행은 PATH 의존 없이 고정 경로로 띄워야 합니다.

  • spawn('node', ...)보다 process.execPath가 안전합니다.
  • Hermes CLI도 HERMES_CLI_PATH처럼 명시적으로 넘기는 쪽이 덜 흔들립니다.

4. 런타임 scratch 경로가 실제로 writable 해야 합니다.

  • 로컬은 프로젝트 .tmp도 괜찮지만
  • 서버리스/호스팅 환경은 /tmp 계열 런타임 디렉터리를 써야
  • lock/log 파일 생성 실패 때문에 "응답은 202인데 runner는 안 뜨는" 상황을 줄일 수 있습니다.

실무적으로 보면 after()는 "응답을 먼저 끝내고 백그라운드 wake-up을 붙이는 위치"로는 괜찮습니다.

하지만 진짜 안정성은 아래 구조에서 나옵니다.

  • submit 시점에 DB에 queued job이 남아 있어야 함
  • trigger가 한 번 실패해도 다음 warm runner / 재기동이 그 job을 다시 집을 수 있어야 함
  • trigger 단계와 runner 단계에 각각 로그가 남아야 함

즉, after()는 보조 장치이고, 실제 안전장치는 durable queue + explicit trigger + runner recovery 입니다.

검증할 때 봐야 할 신호 정상이라면 submit 뒤에 최소한 이 흐름이 보여야 합니다.

  • 202 응답 반환
  • qa_submissions.status = pending
  • qa_answer_jobs.status = queued
  • ops/log에 qna_runner_trigger
  • 이어서 qna_runner_spawn
  • 최종적으로 qna_runner_success
  • DB 상태가 answered / completed로 수렴

한 줄 정리 결론적으로, after() 뒤에도 runner trigger는 안정적으로 시작될 수 있습니다. 다만 그 안정성은 after() 때문이 아니라, submit 수락 후 큐를 먼저 남기고, trigger를 비동기로 분리하고, process.execPath·writable runtime dir·ops log까지 갖춘 구조일 때 확보됩니다.