
들어가며
저는 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/
해결책 탐색
일단 유저가 에러를 겪고 있으니 빠르게 문제를 해소해야 했습니다. 해결법이 몇가지 떠올랐습니다.
- Gemini API 에러가 발생하면, 다른 LLM API 로 Fallback 한다.
- 가장 간단한 해결책입니다. 다만 gemini-2.5-flash-light API 만큼, 가성비가 훌륭하면서, 토큰양이 많은 모델이 없습니다. gemini API 를 활용하면, 저렴한 가격으로, 제가 원하는 퀄리티의 분석을 해낼 수 있습니다. 서비스에서 분석의 퀄리티가 가장 중요했으므로, 이것은 포기하기 힘들었습니다.
- Workers 와 Gemini API 사이에 Region 이 고정된 프록시 서버를 둔다.
- 이것은 본질적으로 훌륭한 엔지니어링 해결책입니다. 프록시 서버를 AWS Lambda 를 띄우면 됩니다. 하지만 이는 사이드 프로젝트 치고 아키텍쳐가 복잡하고, 비용도 발생하므로, 후순위로 고려하려고 했습니다.
- Cloudflare Workers 에서 placement 속성을 정하여, 중국에서 떨어진 Region 을 활용한다.
- 다른 해결책을 찾아보다가, Workers 에서 placement 속성을 지정할 수 있다는 것을 알았다. 서울에 고정하면 베스트 이지만, 서울로 고정을 할 수는 없었다. placement.hint 로 대륙을 설정하여, 범위를 한정시켜줍니다. placement.mode = “smart” 로 지정하여, 그 내에서 최적화를 실행합니다. 아시아-태평양으로 위치를 한정시키면, 여전히 중국이 포함될 수가 있습니다. 그러므로 wnam 이나, eeur, oc 정도로 설정하여, 중국을 피하도록 만들어야 합니다.
출처 : https://developers.cloudflare.com/r2/reference/data-location/#available-hintswnam Western North America enam Eastern North America weur Western Europe eeur Eastern Europe apac Asia-Pacific oc Oceania
3번 해결책은 설정값만 바꿔주고 배포하면 되므로, 단기간에 해결하기 좋았습니다. 아래처럼 설정을 변경하고, 문제를 일시적으로 해소했습니다.
"placement": {
"mode": "smart",
"hint": "wnam"
},
심각한 문제는 해소했습니다만, 또 다른 문제가 발생합니다. 미국으로 region 이 고정되면, Latency 가 증가합니다. 200ms 이상은 증가할 것으로 예상합니다. 다만, 현재 클라이언트에서 오는 API 요청은 한가지 입니다. LLM 을 함께 지르는 API 입니다. 그러므로, 이미 2~3초 이상의 Latency 가 있습니다. 그래서 200ms 가 더해지는 것은 사용자 경험에서 크리티컬 하지 않다고 판단하여, 임시방편을 적용했습니다.
근본적인 해소를 위해서는 인프라 플랫폼을 변경하거나, Lambda 를 Proxy 서버로 사용하는 방법을 적용해야 할 것입니다. 서비스가 반응이 좋다면, 향후 과제로 수행해 볼 계획입니다.
'서버' 카테고리의 다른 글
| DB 테이블 스키마 변경 전략 (0) | 2026.02.22 |
|---|---|
| Node.js 에서 Date 객체 Time Zone 다루기 (0) | 2026.02.09 |
| Characterization Test 로 안전하게 리팩터링 하기 (0) | 2026.02.07 |
| NestJS 철학 이해하기 1 : Layered Architecture (0) | 2026.02.01 |
| Gemini API Latency 추적 (1) | 2026.01.30 |