Next.js API 프록시

외부 API 프록시 경계와 보안 흐름

클라이언트가 외부 API를 직접 부르지 않고 Route Handler를 거치면 API 키 보호, CORS 회피, 캐싱, 오류 표준화를 한곳에서 처리할 수 있다.

01

내부 요청

브라우저는 /api/search처럼 앱 도메인의 Route Handler만 호출한다.

same origin
02

서버 보강

서버에서 API 키, 사용자 권한, 요청 제한, timeout을 적용한다.

server trust
03

외부 호출

외부 API 응답을 그대로 흘리지 않고 필요한 필드와 상태 코드로 정규화한다.

normalize
04

캐시·오류

성공 응답은 revalidate 기준으로 캐시하고 실패는 재시도 가능 여부를 구분한다.

policy
API key
키는 서버 환경 변수에만 두고 클라이언트 번들에 노출하지 않는다. NEXT_PUBLIC 접두사가 붙으면 브라우저로 나간다는 점을 확인한다.
비밀값 경계
CORS
서버 프록시는 브라우저 CORS 제한을 우회하지만 책임도 가져온다. 허용 origin과 rate limit을 내부 API에도 둔다.
controlled gateway
캐시
외부 API 비용과 최신성 요구에 맞춰 revalidate를 정한다. 사용자별 응답은 공용 캐시에 섞이지 않게 한다.
캐시 범위

프록시 보안 체크

입력 검증 query와 body를 Zod 같은 스키마로 검증한 뒤 외부 API로 보낸다.
오류 축소 외부 API의 내부 오류 메시지나 키 이름을 그대로 노출하지 않는다.
timeout 외부 API 지연이 앱 전체 응답을 오래 붙잡지 않도록 제한한다.

프록시 흐름

client -> /api/books?q=react -> Route Handler
server adds API_KEY -> external API -> normalized JSON