언어 및 도구들 공부/React

Proxy 설정과 네트워크 통신 03

Dr.Mlem 2024. 12. 3. 14:56

Proxy 설정과 네트워크 통신 02를 다시 읽다가 든 궁금증.


Q1.
나중에 갑자기 생긴 궁금증인데, 지금 질답과정에서 리엑트 개발 서버라고 계속 말이 나왔단 말이지? 그러면, 리엑트 프로젝트를 개발 완료하고 난 뒤에 상용화 시킨 이후에는, 개발 서버는 쓰이지 않게 되는거야? 그렇게 되면, proxy 설정같은 설정값들은 어떻게 되는거지?

 
 
 
A1.

ChatGPT의 말:

 

상용화된 React 프로젝트에서 개발 서버와 Proxy 설정의 역할

React 프로젝트를 개발 환경에서 작업할 때 사용하는 React 개발 서버(e.g., localhost:3000)는 실제 상용화된 프로젝트에서는 더 이상 사용되지 않습니다. 대신, React 애플리케이션은 빌드(build) 과정을 거쳐 정적 파일로 변환되며, 이를 실제 서버에 배포하게 됩니다.


1. React 개발 서버는 상용화 후 사용되지 않음

  • React 개발 서버(localhost:3000)는 개발 중 핫 리로드(Hot Reload), Proxy 설정 등 개발 편의를 제공하기 위한 도구입니다.
  • 프로젝트를 상용화할 때는 npm run build 명령을 통해 정적 파일(HTML, CSS, JavaScript)로 컴파일됩니다.
  • 빌드된 React 애플리케이션은 Nginx, Apache, 또는 클라우드 서비스(예: AWS S3, Netlify) 등에서 정적으로 호스팅됩니다.

2. Proxy 설정의 상용화 환경에서의 처리

React의 Proxy 설정은 개발 환경에서만 동작합니다. 상용 환경에서는 Proxy 설정이 동작하지 않으므로, 이를 대체할 다른 방법을 사용해야 합니다.

상용화에서 Proxy 설정의 대체 방법

1) API 서버와 React를 같은 도메인에서 호스팅
  • 상용화 시 가장 일반적인 방법은 React 앱과 API 서버를 같은 도메인에서 제공하는 것입니다.
  • 예를 들어, API 서버를 /api 경로로 제공하도록 설정합니다:
https://example.com       -> React 앱 (빌드된 정적 파일)
https://example.com/api   -> API 서버
  • Nginx 설정 예:
server {
    listen 80;
    server_name example.com;

    # React 앱의 정적 파일 경로
    root /var/www/react-app;

    # API 요청을 백엔드 서버로 프록시
    location /api {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }

    # React 앱의 정적 파일을 기본으로 서빙
    location / {
        try_files $uri /index.html;
    }
}

 

  • 이 방식에서는 React의 Proxy 설정이 필요 없습니다. API 서버와 정적 파일 서버가 같은 도메인에서 작동하기 때문에 CORS 문제도 발생하지 않습니다.

2) 리버스 프록시로 동작
  • React 앱과 API 서버가 다른 도메인에서 동작해야 하는 경우, 리버스 프록시를 사용해 API 요청을 프록시 처리합니다.
  • 예를 들어:
  • React 앱에서 https://api.example.com으로 직접 요청을 보냅니다.
  • API 서버에서 CORS를 설정해 React 앱의 출처를 허용합니다:
Access-Control-Allow-Origin: https://frontend.example.com

3) 환경 변수를 통한 동적 API URL
  • 상용화 환경에서는 React의 process.env를 사용해 API 서버 URL을 동적으로 지정할 수 있습니다.
  • 예를 들어:
  • env.production 파일:
REACT_APP_API_URL=https://api.example.com
  • React 코드:
const API_URL = process.env.REACT_APP_API_URL;
fetch(`${API_URL}/news`)
  .then(response => response.json())
  .then(data => console.log(data));
  • 이 방법을 사용하면 개발 환경과 상용 환경에서 다른 API URL을 사용할 수 있습니다.

3. CORS 문제 해결

상용 환경에서도 브라우저와 API 서버 간의 CORS 문제가 발생할 수 있습니다. 이를 해결하려면:

  • 같은 도메인에서 호스팅: React와 API 서버를 같은 도메인으로 통합하면 CORS 문제를 근본적으로 방지할 수 있습니다.
  • 백엔드 CORS 설정: 백엔드에서 Access-Control-Allow-Origin 헤더를 설정해 React 애플리케이션의 출처를 허용합니다.

결론

  1. React 개발 서버는 상용화 이후 사용되지 않으며, Proxy 설정은 개발 환경에서만 동작합니다.
  2. 상용화 환경에서는 Proxy 설정을 대신해:
    • React 앱과 API 서버를 같은 도메인에서 호스팅하거나,
    • 리버스 프록시를 설정하거나,
    • 환경 변수를 통해 API URL을 동적으로 설정하는 방식이 사용됩니다.
  3. CORS 문제는 백엔드에서 올바른 설정으로 해결해야 합니다.

추가적인 질문이나 세부적인 구현 방안이 필요하다면 언제든 말씀해주세요! 😊