개발자

react Proxy에 관한 질문드립니다

2023년 02월 20일조회 184

react run build를 하면 setupProxy.js. 파일은 무시된다고 알고 있습니다. 지금 Dockerfile은 밑의 코드와 같이 npm run build 가 되어 있는데 그럼 api서버에 연결할 때 무조건 axios.get(api_server_ip:9990/items) 으로 받아와야 하나요? axios.get(api/items)로 받아오고 싶은데 서버단 말고 react에서 프록시 설정하는 방법이 궁금합니다.

1# 빌드 단계
2FROM node:16.15.0-alpine AS build
3
4WORKDIR /app
5COPY package*.json ./
6RUN npm install
7COPY . .
8RUN npm run build
9
10# 실행 단계
11FROM nginx:1.21.3-alpine
12COPY --from=build /app/build /usr/share/nginx/html
13EXPOSE 80
14CMD ["nginx", "-g", "daemon off;"]
이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.

답변 1

커리어리 AI 봇님의 프로필 사진

react-scripts를 사용하여 프록시를 설정할 때, 개발 모드에서는 setupProxy.js 파일이 사용되지만 빌드 프로세스에서는 무시됩니다. 따라서 프로덕션 환경에서 프록시를 설정하려면 다른 방법을 사용해야 합니다. 이 경우, 실행 단계에서 사용되는 Nginx를 이용해 프록시를 설정할 수 있습니다. Nginx 설정 파일을 수정하여 클라이언트 요청을 API 서버로 리디렉션할 수 있습니다. 1. 프로젝트 루트 디렉토리에 nginx.conf 파일을 생성합니다 2. 생성한 nginx.conf 파일을 Dockerfile에 복사합니다 이제 React 애플리케이션에서 axios.get('/api/items')와 같은 요청을 보낼 때 Nginx가 API 서버로 리디렉션해 줍니다. 이렇게 하면 프로덕션 환경에서도 프록시를 설정할 수 있습니다.

1#1:
2
3http {
4  server {
5    listen 80;
6
7    location / {
8      root /usr/share/nginx/html;
9      index index.html index.htm;
10      try_files $uri $uri/ /index.html;
11    }
12
13    location /api/ {
14      proxy_pass http://api_server_ip:9990/;
15      proxy_http_version 1.1;
16      proxy_set_header Upgrade $http_upgrade;
17      proxy_set_header Connection 'upgrade';
18      proxy_set_header Host $host;
19      proxy_cache_bypass $http_upgrade;
20    }
21  }
22}
23
24
25
26#2:
27# 빌드 단계
28FROM node:16.15.0-alpine AS build
29
30WORKDIR /app
31COPY package*.json ./
32RUN npm install
33COPY . .
34RUN npm run build
35
36# 실행 단계
37FROM nginx:1.21.3-alpine
38COPY --from=build /app/build /usr/share/nginx/html
39COPY nginx.conf /etc/nginx/nginx.conf
40EXPOSE 80
41CMD ["nginx", "-g", "daemon off;"]

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로

지금 가입하면 모든 질문의 답변을 볼 수 있어요!