왜 프록시를 둘까
운영 앱이 Gemini 앞에 프록시를 두는 데는 두 가지 이유가 있어:
- API 키를 숨겨. 브라우저는 자격 증명을 절대 보지 못해. 브라우저가 침해되어도 피해 범위가 "키로 Gemini를 직접 호출"에서 "자체 프록시를 호출"로 줄어들어.
- 비즈니스 로직을 더해. 인증, 호출 한도, 요청 검증, 응답 기록, 모델 선택을 서버 한곳에 모을 수 있어.
구현 패턴
FastAPI의 StreamingResponse와 httpx.AsyncClient.stream()을 함께 써. Gemini에 스트림을 열고 청크를 클라이언트로 전달한 뒤 끝나면 닫아. 작동하는 프록시는 약 30줄이면 충분해.
SSE 재전송과 그대로 전달하는 방식
설계는 두 가지야:
- 그대로 전달: Gemini의 바이트를 그대로 전달해. 가장 저렴하지만 클라이언트가 Gemini의 정확한 형식을 알아야 해.
- 자체 SSE 형식으로 다시 내보내기: 각 청크를 파싱해
text를 꺼내고 자체data: {"text": "..."}이벤트로 내보내. 손은 더 가지만 클라이언트를 Gemini의 변하는 스키마에서 떼어 놓을 수 있어.