Vercel 서버리스 환경 슬랙 봇 타임아웃 해결 가이드
TuBrief 편집팀
2026년 7월 21일
0
컴퓨터/소프트웨어원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
커뮤니티의 다른 글
댓글 (0)
Log in to leave a comment
아직 작성된 글이 없습니다
원본 영상을 바탕으로 AI의 도움을 받아 작성했습니다. 원본 영상이 기준입니다.
Log in to leave a comment
아직 작성된 글이 없습니다
중소기업 1인 개발자와 주니어 백엔드 엔지니어라면 슬랙 봇과 LLM 에이전트를 연동할 때 겪는 타임아웃 문제를 잘 알 것이다. 슬랙 Events API는 요청을 받고 3초 안에 HTTP 200 OK를 요구하지만, OpenAI GPT-4o나 Anthropic Claude 3.5 Sonnet 같은 모델은 연산만으로 15초가 걸린다. 슬랙 서버는 이 지연을 에러로 판단해 이벤트를 최대 3회 이상 재전송한다. 동일한 프롬프트가 수차례 실행되면서 API 토큰 비용이 폭발하고 채널은 중복 답변으로 도배된다. 전통적인 서버리스는 응답을 반환하는 순간 프로세스를 종료하므로 응답 뒤에 비동기 연산을 붙일 수 없다. Vercel Fluid Compute 아키텍처와 백그라운드 태스크 API인 waitUntil, Next.js App Router의 after 함수를 사용하면 이 문제를 해결할 수 있다. 요청 수신 즉시 request.text로 원본 바디와 슬랙 서명 헤더를 추출한 뒤 서명 검증을 거쳐 url_verification 챌린지 값을 반환한다. 그 뒤 AI 에이전트 연산을 after 함수로 감싸고 100밀리초 이내에 200 OK를 슬랙에 보내면 3초 타임아웃 에러를 없애고 무한 재전송 루프를 막을 수 있다.
Vercel에 배포된 봇이 403 Forbidden이나 401 Unauthorized를 뱉는 이유는 Next.js 표준 미들웨어가 실행되는 도중 원본 요청 바디의 바이트 스트림이 변형되기 때문이다. 슬랙은 모든 HTTP 요청 무결성을 보장하려고 HMAC-SHA256 기반 서명을 헤더에 넣고, 앱은 시크릿 키와 원본 바디를 조합해 해시를 다시 계산한다. JSON 파싱 과정에서 객체 키 순서가 바뀌거나 공백이 1바이트만 달라져도 해시값이 깨져 서명 검증이 실패한다. Next.js App Router 환경에서는 요청 수신 즉시 request.text 메서드를 호출해 UTF-8 원본 바디 문자열을 확보해야 한다. 이후 타이밍 공격을 막기 위해 Node.js 암호화 모듈의 crypto.timingSafeEqual 함수로 시그니처를 안전하게 비교한다.
프로젝트에 적용하는 구체적인 절차는 다음과 같다.
이 구조를 도입하면 403 에러 발생률을 낮추고 보안 컴플라이언스 요구 조건을 충족할 수 있다.
Vercel 서버리스 함수는 요청마다 새로운 컨테이너 인스턴스에서 독립적으로 실행되고 종료되므로 글로벌 메모리 변수에 대화 히스토리를 저장하면 스케일아웃 시 즉시 날아간다. 슬랙 스레드 안에서 AI 에이전트와 주고받는 멀티턴 대화 맥락을 유지하고 동일 이벤트 중복 처리를 막으려면 외부에 분산된 인메모리 데이터베이스 연결이 필수적이다. 단일 프로세스 안의 메모리 셋은 수평 확장되는 여러 서버리스 인스턴스 간에 공유되지 않는다. Upstash Redis 같은 외부 저장소를 연동해 Redis 원자적 명령어인 SET NX를 이용하면 여러 서버리스 인스턴스가 동시에 같은 슬랙 이벤트를 받더라도 단 하나만 작업을 실행하도록 원자적 격리를 보장할 수 있다.
대화 세션을 안전하게 관리하는 3단계 구현 방법이다.
이 방식을 통해 동일 메시지 중복 처리 비용을 원천 차단하고 대화 컨텍스트를 안정적으로 보존한다.
단일 슬랙 개발자 앱을 프로덕션과 프리뷰 배포 환경이 함께 쓰면 CI/CD 푸시마다 이벤트 구독 웹훅 URL이 덮어씌워져 프로덕션 봇이 멈춘다. 환경을 완전히 분리하려면 슬랙 개발자 콘솔에서 프로덕션 앱과 테스트 앱 두 개의 독립된 애플리케이션을 만들어야 한다. Vercel 프리뷰 배포 URL은 무단 접근을 막으려고 Deployment Protection 기능을 켜는데 이 보안 기능은 외부에서 오는 슬랙 서버의 챌린지 및 이벤트 웹훅 호출까지 차단해 401 및 403 에러를 유발한다. 슬랙 이벤트 웹훅 설정은 커스텀 HTTP 헤더를 지원하지 않으므로 Vercel이 주는 자동화 우회 쿼리 파라미터를 엔드포인트 URL에 직접 붙여야 한다.
이 워크플로우를 자동화하는 3단계 절차이다.
이 절차를 적용하면 보안 설정 유지 시간을 단축하고 배포 실수로 일어나는 사내 서비스 중단 사고를 예방할 수 있다.