8:40Vercel
Log in to leave a comment
No posts yet
서버리스 함수를 만지다 보면 실행 시간 제한이라는 벽에 부딪힙니다. Vercel Workflows는 이 문제를 해결하려고 비동기 함수를 상태 유지가 가능한 프로세스로 바꿉니다. 여기서 핵심은 오케스트레이터 함수 안에서 데이터베이스 쓰기나 랜덤 함수 같은 불확실한 요소를 제거하는 겁니다. 모든 부수 효과는 반드시 step.run 블록 안에 가두어야 시스템이 꼬이지 않습니다.
전체 로직을 제어하는 함수에는 use workflow를 선언하고 흐름만 관리하세요. 실제 API 호출이나 DB 작업은 독립적인 스텝으로 정의합니다. 다음 단계로 넘길 때는 필요한 데이터만 골라 전달해야 로그 저장 비용을 아낄 수 있습니다. 이렇게 짜면 중간에 작업이 실패해도 처음부터 다시 시작할 필요가 없습니다. 멈춘 지점부터 재개하면 그만이니까요.
분산 시스템에서는 네트워크 오류 때문에 똑같은 단계가 두 번 실행되는 일이 생깁니다. 결제 시스템에서 이런 일이 터지면 재앙이죠. Vercel Workflows는 각 단계마다 고유한 stepId를 제공합니다. 토스페이먼츠나 스트라이프 연동 시 이 ID를 멱등성 키로 사용하면 중복 결제 사고를 막을 수 있습니다.
데이터를 쓰기 전에 이미 처리된 내역이 있는지 확인하는 패턴을 코드에 넣으세요. getStepMetadata()로 추출한 ID를 외부 서비스 요청 헤더에 할당하면 됩니다. 이미 처리된 트랜잭션이라면 즉시 반환하도록 설계하십시오. 이 구조만 제대로 잡아도 불필요한 API 호출을 줄여 인프라 비용을 20% 이상 아낍니다.
Vercel의 서버리스 함수는 보통 1분에서 15분이면 꺼집니다. 하지만 step.sleep을 쓰면 며칠씩 걸리는 예약 작업도 거뜬합니다. 이 함수가 실행되면 워크플로우 상태는 저장소에 기록되고 함수는 즉시 종료됩니다. 대기 중에는 컴퓨팅 비용이 나가지 않습니다.
예를 들어 결제 완료 3일 후에 설문 조사 메일을 보내야 한다면 await step.sleep('3 days') 한 줄이면 충분합니다. 별도의 크론탭이나 스케줄러를 관리할 필요가 없으니 운영 시간이 주당 2시간은 줄어듭니다. 서버를 24시간 돌리는 비용도 사라집니다.
배포하고 수정하는 반복 작업은 개발 속도를 깎아먹습니다. Vercel CLI의 기능을 활용하면 클라우드에 올리지 않고도 로컬에서 테스트할 수 있습니다. 외부 웹훅을 받아야 한다면 ngrok 같은 도구로 로컬 호스트를 외부에 노출하세요.
vercel dev를 띄우고 ngrok으로 생성된 URL을 스트라이프 웹훅 설정에 등록하면 로컬 코드가 외부 이벤트를 실시간으로 수신합니다. 배포 전에 실패 시나리오를 미리 검증할 수 있어 개발 속도가 2배는 빨라집니다. 환경 변수 설정 실수로 삽질하는 시간도 줄여줍니다.
API 속도 제한이나 일시적인 네트워크 장애 때문에 무한 재시도가 발생하면 비용 폭탄을 맞습니다. 오류 성격에 따라 대응을 달리해야 합니다. 인증 실패 같은 영구적인 오류는 즉시 중단하고, 네트워크 장애 같은 일시적인 문제는 시간을 두고 다시 시도해야 합니다.
재시도 간격을 점진적으로 늘리는 지수 백오프 공식을 적용하세요.
step.run 함수에 maxRetries: 3을 설정해 최대 횟수를 제한하십시오. 시스템이 자동으로 복구되니 서비스 가용성은 올라가고, 무한 루프로 인한 과금은 사전에 차단됩니다.
Vercel Workflows는 Pro 플랜 기준으로 50,000단계의 실행 횟수를 기본 제공합니다. 초과 시 100,000단계당 $2.50 수준의 요금을 받습니다. 장기 대기 시 발생하는 저장소 비용은 GB-Hour당 $0.00069로 아주 저렴합니다.
| 구분 | Hobby/Pro 포함량 | 초과 요율 |
|---|---|---|
| Workflow Steps | 50,000 단계 | 100,000 단계당 $2.50 |
| Workflow Storage | 720 GB-Hours | GB-Hour당 $0.00069 |
| Serverless Function | 1,000 GB-Hours | GB-Hour당 $0.60 |
복잡한 메시지 큐를 직접 구축하고 관리하는 수고에 비하면 압도적으로 경제적입니다. 멱등성 보장과 지수 백오프만 제대로 결합해도 인프라 관리 부담 없이 프로덕션 수준의 신뢰성을 확보할 수 있습니다. 비즈니스 로직에만 집중하고 싶은 1인 개발자에게 이보다 합리적인 선택은 없습니다.