서버

From Cloudflare Workers, To Gemini API 에러

행복한 시지프 - 서버 2026. 1. 28. 01:49

들어가며

저는 AI 블로그 분석기 서비스를 만들고 있습니다. Cloudflare Workers 로 API 를 서빙하고 있습니다. LLM API 는 gemini-2.5-flash-light 로 저렴하지만, 강력한 모델을 쓰고 있습니다. 오늘 서비스를 배포하고 바로 에러가 잡히기 시작하여, 분석해보았습니다.

 

에러 분석 : User location is not supported for the API use

배포 후, 얼마 지나지 않아 Sentry 에 이런 로그가 잡혔습니다.

 
상세 로그를 보시죠

{
    "code": 400,
    "message": "User location is not supported for the API use.",
    "status": "FAILED_PRECONDITION"
}

 
google gemini api 에서 이런 에러가 발생합니다. 왜 지원되지 않는 곳이라고 할까요?
살펴보니, 서버를 Cloudflare Workers 에 배포한 것과 있었습니다.
 

Cloudflare Workers 는 어떤 것인가?

Workers 는 Cloudflare 의 서버리스 플랫폼 입니다. 전 세계 300개 이상의 도시에서 Cloudflare 엣지 네트워크가 있습니다. 개발자는 서버를 직접 관리할 필요가 없고, 함수만 배포하면 됩니다. 엣지 방식이다보니, 요청이 올 때만 순간적으로 함수를 실행시키므로, 사이드 프로젝트를 수행하는 이들에게 매우 훌륭한 도구입니다.
 
참고 : https://developers.cloudflare.com/workers/
 

Cloudflare Workers 에서 Gemini API 호출에 간헐적으로 실패하는 이유

제가 띄운 Workers 에 요청이 들어오면, Cloudflare Workers 는 동적으로 Edge 서버를 찾아서 Worker 를 Start 합니다. 근데 문제는 이 Edge 선택 알고리즘에 있는데요. 바로 Anycast 라는 것입니다. 이 알고리즘은 단지 물리적인 거리로만 결정되는 것이 아닙니다. 비용이나, 네트워크 연결, 트래픽을 고려해서 더 효율적인 동선을 짜는거죠. 그러니까 요청이 서울에서 와도, 중국이나, 싱가폴 서버에 서빙될 수도 있는 것입니다.
이게 무엇이 문제가 되냐면, 바로 Gemini 의 미지원 지역과 엇갈릴 수 있다는 것입니다. 가령, Gemini 는 중국에 서비스 하지 않는데요. Cloudflare Workers 가 상하이에 서빙된다면, Gemini API 로의 요청도 상하이에서 오는 것이 되는거죠. 그러니까 요청이 막히고 User Location is not suppoerted for the API use 이 에러가 발생하는 것입니다.
 
Gemini 지원 지역 참고 : https://ai.google.dev/gemini-api/docs/available-regions?hl=ko
Cloudflare 서버 지역 참고 : https://www.cloudflare.com/network/
 
 

해결책 탐색

일단 유저가 에러를 겪고 있으니 빠르게 문제를 해소해야 했습니다. 해결법이 몇가지 떠올랐습니다.

  1. Gemini API 에러가 발생하면, 다른 LLM API 로 Fallback 한다.
    1. 가장 간단한 해결책입니다. 다만 gemini-2.5-flash-light API 만큼, 가성비가 훌륭하면서, 토큰양이 많은 모델이 없습니다. gemini API 를 활용하면, 저렴한 가격으로, 제가 원하는 퀄리티의 분석을 해낼 수 있습니다. 서비스에서 분석의 퀄리티가 가장 중요했으므로, 이것은 포기하기 힘들었습니다.
  2. Workers 와 Gemini API 사이에 Region 이 고정된 프록시 서버를 둔다.
    1. 이것은 본질적으로 훌륭한 엔지니어링 해결책입니다. 프록시 서버를 AWS Lambda 를 띄우면 됩니다. 하지만 이는 사이드 프로젝트 치고 아키텍쳐가 복잡하고, 비용도 발생하므로, 후순위로 고려하려고 했습니다.
  3. Cloudflare Workers 에서 placement 속성을 정하여, 중국에서 떨어진 Region 을 활용한다.
    1. 다른 해결책을 찾아보다가, Workers 에서 placement 속성을 지정할 수 있다는 것을 알았다. 서울에 고정하면 베스트 이지만, 서울로 고정을 할 수는 없었다. placement.hint 로 대륙을 설정하여, 범위를 한정시켜줍니다. placement.mode = “smart” 로 지정하여, 그 내에서 최적화를 실행합니다. 아시아-태평양으로 위치를 한정시키면, 여전히 중국이 포함될 수가 있습니다. 그러므로 wnam 이나, eeur, oc 정도로 설정하여, 중국을 피하도록 만들어야 합니다.
    Hint description
    wnam Western North America
    enam Eastern North America
    weur Western Europe
    eeur Eastern Europe
    apac Asia-Pacific
    oc Oceania
    출처 : https://developers.cloudflare.com/r2/reference/data-location/#available-hints

 
3번 해결책은 설정값만 바꿔주고 배포하면 되므로, 단기간에 해결하기 좋았습니다. 아래처럼 설정을 변경하고, 문제를 일시적으로 해소했습니다.

"placement": {
  "mode": "smart",
  "hint": "wnam"
},  

 
심각한 문제는 해소했습니다만, 또 다른 문제가 발생합니다. 미국으로 region 이 고정되면, Latency 가 증가합니다. 200ms 이상은 증가할 것으로 예상합니다. 다만, 현재 클라이언트에서 오는 API 요청은 한가지 입니다. LLM 을 함께 지르는 API 입니다. 그러므로, 이미 2~3초 이상의 Latency 가 있습니다. 그래서 200ms 가 더해지는 것은 사용자 경험에서 크리티컬 하지 않다고 판단하여, 임시방편을 적용했습니다.
 
근본적인 해소를 위해서는 인프라 플랫폼을 변경하거나, Lambda 를 Proxy 서버로 사용하는 방법을 적용해야 할 것입니다. 서비스가 반응이 좋다면, 향후 과제로 수행해 볼 계획입니다.