
내 인프라에 직접 심는 서버리스: Rust로 구현한 OpenWorkers 분석기
Cloudflare Workers의 경험을 내 인프라로 가져오는 오픈소스 런타임, OpenWorkers를 분석합니다. Rust와 V8 Isolates 기반의 기술적 특징과 활용 방안을 소개합니다.
김영태
테크리드

안녕하세요. 풀링포레스트 테크리드 김영태입니다.
개발자로서 서버리스 아키텍처, 특히 Cloudflare Workers 같은 엣지 컴퓨팅 기술을 접했을 때의 충격은 아직도 생생합니다. 인프라 관리에 드는 공수를 획기적으로 줄여주고, 전 세계 어디서나 빠르게 코드가 실행된다는 점은 분명 매력적입니다. 하지만 운영 연차가 쌓이고 트래픽 규모가 커지다 보니, 마음 한구석에는 늘 불안감이 자리 잡더군요. "이 비용 구조가 감당 가능한가?", "특정 벤더 기술에 너무 종속되는 것은 아닐까?" 같은 고민들이었습니다.
특히 저희 풀링포레스트처럼 고객 데이터를 민감하게 다루는 입장에서, 데이터가 외부 인프라를 거치지 않고 내부에서만 돌아야 한다는 요구사항이 들어오면 기존의 퍼블릭 서버리스 솔루션은 힘을 잃곤 했습니다. 그러던 중 최근 흥미로운 프로젝트 하나를 발견했습니다. 바로 'OpenWorkers'입니다. 이름에서 알 수 있듯이, Cloudflare Workers의 경험을 그대로 가져오되, 내 서버에서 직접 돌릴 수 있게 만든 오픈소스 런타임입니다.
OpenWorkers의 핵심 컨셉은 명확합니다. Rust와 V8 Isolates를 기반으로 신뢰할 수 없는 자바스크립트 코드를 안전하게 실행하는 샌드박스를 제공하는 것입니다. 사실 저도 과거에 사내 서비스의 유연함을 위해 vm2 같은 라이브러리로 샌드박싱을 시도했다가, 보안 취약점과 성능 이슈로 꽤나 고생했던 기억이 있습니다. 그 후 Deno를 기웃거리기도 했죠. OpenWorkers의 개발 히스토리를 보니 저와 비슷한 길을 걸었더군요. vm2에서 시작해 deno-core를 거쳐, 최근에는 AI의 도움을 받아 rusty_v8 위에 직접 엔진을 다시 짰다고 합니다. 7년이라는 시간 동안 '안전한 JS 실행'이라는 한 우물만 판 집요함이 느껴져 꽤 인상 깊었습니다.
코드를 한번 살펴보면, Cloudflare Workers를 써보신 분들에게는 아주 익숙할 겁니다.
export default {
async fetch ( request , env ) {
// KV 스토리지 접근
const data = await env.KV.get("key");
// PostgreSQL 쿼리 실행
const rows = await env.DB.query("SELECT * FROM users WHERE id = $1", [1]);
return Response.json({ data, rows });
}
};보시다시피 문법이 Cloudflare Workers와 호환됩니다. 즉, 기존에 작성했던 로직을 큰 수정 없이 그대로 가져와서 내 인프라 위에서 돌릴 수 있다는 뜻입니다. 단순히 fetch 이벤트만 처리하는 게 아니라, KV 스토리지, R2 호환 스토리지, 심지어 PostgreSQL 바인딩까지 지원합니다.

아키텍처도 꽤 흥미롭습니다. 내부적으로 NATS 메시징 시스템을 사용해 스케줄러와 러너(Runner)들이 통신하는 구조입니다. 러너는 V8 Isolates를 사용해 각 워커마다 128MB 메모리와 CPU 시간을 엄격하게 제한합니다. 덕분에 하나의 물리 서버 안에서도 수천 개의 워커를 격리된 상태로 띄울 수 있죠. 배포 과정도 복잡하지 않습니다. PostgreSQL과 도커 컴포즈(Docker Compose) 파일 하나면 로컬에서 바로 띄워볼 수 있을 만큼 간결하게 설계되어 있습니다.
이 프로젝트가 주는 시사점은 '기술적 독립'과 '비용 예측 가능성'입니다. SaaS를 운영하다 보면 고객별로 커스텀 로직을 실행해주고 싶을 때가 있습니다. 이때마다 별도 컨테이너를 띄우는 건 리소스 낭비가 심하고, 그렇다고 고객 코드를 메인 서버에서 그냥 돌리는 건 자살행위나 다름없습니다. OpenWorkers 같은 격리된 런타임은 이런 상황에서 훌륭한 대안이 됩니다. 데이터가 내 인프라를 절대 떠나지 않으면서도, 서버리스의 개발 편의성은 누릴 수 있으니까요. 게다가 요청 건당 과금이 아니라 내가 띄운 서버 리소스만큼만 비용이 나가니 예산 계획을 세우기도 훨씬 수월합니다.
물론, 아직 Cloudflare의 거대한 글로벌 엣지 네트워크가 주는 물리적인 속도 이점을 당장 내 서버 한두 대로 따라잡을 수는 없습니다. 하지만 "데이터 주권"과 "벤더 락인 해제"라는 관점에서 OpenWorkers는 백엔드 개발자라면 한 번쯤 파헤쳐볼 만한 가치가 충분한 도구입니다.
저도 주말을 이용해 로컬 장비에 한번 올려서 테스트를 진행해 볼 생각입니다. 다음 로드맵으로 '결정론적 디버깅(Deterministic Debugging)'을 위한 실행 기록 및 재생 기능을 준비 중이라는데, 이게 구현된다면 디버깅 경험이 획기적으로 좋아질 것 같네요. 여러분도 "내 손바닥 위의 서버리스"를 한번 경험해 보시면 어떨까요?


