Skill/기반기술

CORS 프록시(proxy) 방식으로 우회

진열사랑 2025. 7. 4. 16:23

React에서 CORS 문제를 **라우팅 우회(proxy)**로 해결하는 방법은 주로 **개발 환경(로컬)**에서 사용되며, create-react-app 환경이나 vite, next.js 등에서도 설정 가능합니다. 여기선 대표적으로 React CRA 환경과 Next.js 기준으로 설명드립니다.


✅ 1. CORS 문제란?

CORS(Cross-Origin Resource Sharing)는 브라우저가 보안상 다른 도메인(출처)의 리소스 요청을 제한하는 정책입니다.

예:
http://localhost:3000에서 http://api.example.com로 요청 → CORS 에러 발생 가능


✅ 2. 프록시(proxy) 방식으로 우회하는 원리

React 개발 서버가 중간 프록시 서버 역할을 하여 브라우저는 같은 origin으로 보이게 만들어 CORS를 우회합니다.

[브라우저] → [React dev server (localhost:3000)] → [API 서버]

✅ 3. CRA (Create React App) 환경에서 설정

📄 package.json에 proxy 추가:

{
  "proxy": "http://api.example.com"
}

🔁 예: 실제 요청 코드

// 원래는 이렇게 직접 요청하면 CORS 발생
fetch("http://api.example.com/data")

// proxy가 설정되었으면 이렇게 우회 가능
fetch("/data")  // → React dev server가 http://api.example.com/data로 포워딩

✅ 4. Vite 환경

📄 vite.config.ts

export default defineConfig({
  server: {
    proxy: {
      '/api': {
        target: 'http://api.example.com',
        changeOrigin: true,
        rewrite: path => path.replace(/^\/api/, '')
      }
    }
  }
});

✅ 5. Next.js 환경

📄 next.config.js에서 rewrite 설정:

module.exports = {
  async rewrites() {
    return [
      {
        source: '/api/:path*',
        destination: 'http://api.example.com/:path*'
      }
    ];
  }
};

→ /api/test로 요청 → 실제로는 http://api.example.com/test로 프록시됨.


❗주의사항

  • 이 방법은 개발 환경 전용입니다.
  • 운영 환경에서는 Nginx 리버스 프록시, API 서버에서 CORS 허용 헤더 설정(Access-Control-Allow-Origin)이 필요합니다.
  • 보안이나 인증이 필요한 경우 proxy만으로는 충분하지 않으며, 백엔드에서 적절한 CORS 정책 수립이 필수입니다.

🔚 정리

환경 설정 방식

CRA package.json의 proxy 키 사용
Vite vite.config.ts의 server.proxy 사용
Next.js next.config.js의 rewrites 설정

proxy 설정만으로도 개발 환경에서 대부분의 CORS 문제는 우회 가능합니다.


더 구체적인 예시가 필요하면 사용하는 환경(CRA, Vite, Next.js 등)을 알려주세요!