클라우드 ·
Unkey, 서버리스 떠나 Go 기반 서버로 전환...지연시간 6배 개선
API 인증 전문 기업 Unkey가 Cloudflare Workers에서 Go 기반 상태 저장 서버로 전환해 성능을 대폭 향상시켰다.
[한국정보기술신문] API 인증 서비스 기업 Unkey가 2년간 사용해온 서버리스 아키텍처를 버리고 Go 언어 기반의 상태 저장 서버로 전환하면서 엔드투엔드 지연시간을 6배 개선했다고 자사 블로그를 통해 밝혔다.
Unkey는 초기에 Cloudflare Workers를 선택했다. 글로벌 엣지 배포, 자동 확장, 사용량 기반 요금제 등이 매력적이었기 때문이다. 그러나 실제 운영 과정에서 서버리스의 근본적인 한계에 부딪혔다.
캐싱 문제가 성능 저하 주범
가장 큰 문제는 캐싱이었다. 서버리스 환경에서는 함수 호출 사이에 지속적인 메모리를 보장받지 못한다. 모든 캐시 읽기에 외부 저장소로의 네트워크 요청이 필요했고, Cloudflare 캐시는 p99 기준 30ms 이상의 지연시간을 보였다. 10ms 이하의 API 응답을 목표로 하는 Unkey에게는 치명적이었다.
회사 측은 여러 계층의 캐시를 활용하는 SWR 전략을 사용했지만, 네트워크 요청이 필요 없는 것보다 빠를 수는 없다는 근본적인 한계를 극복할 수 없었다고 설명했다.
복잡성 증가와 비용 상승
서버리스는 운영 걱정을 덜어준다고 약속하지만, 실제로는 서버리스가 만들어낸 인위적인 문제를 해결하기 위해 여러 서비스를 추가해야 했다. 캐싱을 위해 Redis를, 배치 처리를 위해 큐를, 실시간 기능을 위해 또 다른 서비스를 추가하는 식이었다.
Unkey는 Cloudflare Durable Objects, Logstreams, Queues, Workflows 등을 사용했고, 그 위에 자체 제작한 상태 저장 서버까지 운영해야 했다. 비즈니스 가치를 추가하기 위해서가 아니라 아키텍처의 제약을 해결하기 위해 새로운 SaaS 제품을 계속 평가하고 통합해야 하는 상황이었다.
배치 처리의 복잡성
데이터 추출도 큰 과제였다. API는 모든 키 검증, 속도 제한, API 호출에 대한 이벤트를 발생시킨다. 일반 서버에서는 메모리에 이벤트를 배치 처리하고 주기적으로 플러시하면 되지만, 서버리스에서는 함수가 요청 처리 후 사라질 수 있어 매번 플러시해야 했다.
이를 위해 ClickHouse용 버퍼링 서비스인 chproxy를 자체 개발했고, Axiom으로 메트릭과 로그를 보내기 위한 별도의 버퍼링 서비스도 구축했다. Cloudflare Queues 사용도 검토했지만 비용이 당시의 3배로 증가할 것으로 예상돼 포기했다.
Go 서버로 전환한 결과
v2 API를 Go로 재구축한 결과는 즉각적이었다. 복잡한 파이프라인 대신 메모리에서 이벤트를 배치 처리하고 몇 초마다 또는 버퍼가 특정 크기에 도달하면 직접 플러시하는 간단한 구조로 바뀌었다.
여러 지역에서 v1과 v2 엔드포인트를 테스트한 결과, 성능 차이가 그래프에서 명확히 나타났다. v1 API는 전 세계 300개 이상의 POP에서 실행되고 각 지역에 데이터센터를 보유하고 있었지만, v2가 훨씬 빠른 응답 속도를 보였다.
자체 호스팅 가능성 확보
상태 저장 서버로의 전환은 다른 이점도 가져왔다. Cloudflare 런타임에 종속되어 있을 때는 고객이 Unkey를 자체 호스팅할 수 없었다. Workers 런타임이 기술적으로 오픈소스이지만 로컬에서 실행하기가 매우 어려웠다.
Go 서버는 도커 명령어 한 줄로 자체 호스팅이 가능해졌다. 개발자가 전체 Unkey 스택을 몇 초 만에 로컬에서 실행할 수 있게 되면서 디버깅과 테스트가 훨씬 쉬워졌다.
Cloudflare 생태계에 더 이상 종속되지 않아 어디에나 배포할 수 있고, 모든 데이터베이스를 사용할 수 있으며, 런타임 호환성 걱정 없이 서드파티 서비스와 통합할 수 있게 됐다.
서버리스의 적합한 활용처
Unkey는 이번 결정이 서버리스를 반대하는 것은 아니라고 강조했다. 서버리스는 배경 작업, 예약된 작업, 이벤트 기반 워크플로우, 트래픽이 급증하는 공개 API 등에는 여전히 훌륭한 선택이라고 평가했다.
다만 극도로 낮은 지연시간이 필요하거나, 배치 처리나 캐싱이 중요하거나, 복잡한 상태 관리가 필요한 경우에는 서버리스가 어려움을 겪는다고 지적했다.
회사는 현재 AWS Fargate와 Global Accelerator를 사용하고 있으며, 내년에는 고객과 자사가 원하는 곳 어디에서나 Unkey를 실행할 수 있는 자체 배포 플랫폼인 Unkey Deploy를 출시할 예정이다.
한국정보기술신문 클라우드분과 유민건 기자 news@kitpa.org