Vercel은 use workflow, use step과 같은 새로운 디렉티브를 Workflows SDK의 일부로 도입하여 개발자 커뮤니티에서 논란을 일으키고 있습니다. 🤯
디렉티브는 JavaScript 코드 내에서 특정 동작이나 컴파일러 지시를 나타내는 특별한 문자열로, use strict에서 시작하여 React의 use client/use server를 통해 프레임워크에 특정 기능을 주입하는 데 사용됩니다. ⚙️
이 새로운 디렉티브의 핵심 목적은 장기 실행, 다단계 JavaScript 함수(예: 7일 후 이메일 전송)의 내구성 있는 실행을 가능하게 하는 것입니다. 이는 외부 서비스 호출, 잠재적 실패, 지연 등을 포함하며, 기존 서버리스 함수는 이러한 복잡한 시나리오를 처리하기 어렵습니다. ⏳
전통적인 방식으로는 이러한 복잡한 워크플로우를 처리하기 위해 코드를 덜 읽기 쉽게 만들거나, 재시도 로직을 추가하거나, Temporal, Ingest, Trigger.dev와 같은 외부 서비스로 오케스트레이션 로직을 분리해야 했습니다. 이는 인프라 복잡성을 증가시키고 상태 관리를 외부 데이터베이스에 의존하게 만듭니다. 🚧
Vercel의 Workflows SDK는 디렉티브와 컴파일러 해킹을 통해 이러한 복잡한 오케스트레이션 로직을 다시 코드베이스 안으로 가져오려 합니다. 목표는 개발자가 createUser, sendEmail, wait(7days)와 같이 의도를 직접적으로 표현하는 간단하고 선언적인 코드를 작성할 수 있도록 하고, Vercel이 내구성, 재시도, 상태 관리 등 하위 복잡성을 처리하는 것입니다. ✨
일부 개발자(Tanner Lindsay 등)는 디렉티브의 확산에 대해 불만을 표하지만, 발표자(Theo)는 처음에는 회의적이었으나, 현대 애플리케이션에서 점점 더 중요해지는 내구성 있는 실행의 필요성을 해결하는 Vercel의 접근 방식에 공감하게 되었습니다. 🤔
애플리케이션의 오류 허용 범위에 따라 이러한 강력한 워크플로우 솔루션의 필요성이 달라진다는 "오류의 중요성 스펙트럼" 개념이 제시됩니다. 치명적인 오류가 발생할 수 있는 중요한 애플리케이션의 경우, 단순한 try/catch를 넘어선 정교한 오류 처리 및 내구성 있는 실행이 필수적입니다. 📈