devnoong.log
article thumbnail
728x90

 

프론트단에서 CORS 관련 오류를 방지하기 위해서 proxy 설정을 진행하여 백엔드서버에서 데이터를 가지고 옵니다.

 

CORS(Cross Origin Resource Sharing)
서버와 클라이언트가 동일한 IP주소에서 동작하고 있다면, resource를 제약 없이 서로 공유할 수 있지만,
만약 다른 도메인에 있다면 원칙적으로 어떤 데이터도 주고 받을 수 없도록 하는 매커니즘입니다.

 

 

1. 간단 Proxy 설정

 

React package.json 파일 중간에 아래와 같이 proxy 서버를 기입해 간단하게 설정 할 수 있습니다.

  "proxy": "http://localhost:8080/",  // PORT 번호까지만 기입 가능

 

하지만 인터넷 환경에 따라 안되는 경우도 존재하고, 원하는 url 주소를 사용할 수 없고 port번호까지만 기입이 가능하다는 단점이 존재합니다.

 

npm run start;

서버를 재시작해줘야 proxy 설정이 적용되면 아래와 같이 정상적으로 호출되었음을 확인 할 수 있습니다.

 

 

2. http-proxy-middleware 사용

 

위의 1번의 단점을 보완하여 확실하게 사용자가 정의해줄 수 있는 방법입니다. 

 

http-proxy-middleware를 사용하기 위해 라이브러리를 설치해줍니다.

npm install http-proxy-middleware --save

 

라이브러리 설치 후 src폴더 안에 setupProxy.js 라는 proxy 설정 파일을 신규로 생성해줍니다.

const { createProxyMiddleware } = require('http-proxy-middleware');

module.exports = function(app) {
  app.use(
    '/api',
    createProxyMiddleware({
      target: 'http://localhost:8080',	
      changeOrigin: true,
    })
  );
};

 

npm 재시작 후 backend 데이터를 가지고 오는지 확인해봤는데 아래와 같이 proxy 설정이 잘 되지 않았습니다 TT

Request failed with status code 404

 

분명 proxy를 이용해서 8080으로 설정했음에도 불구하고  8080 서버 호출이 안되는 문제점이 존재했습니다.

원인 분석

모든 문서랑 블로그를 뒤져보고,,,, 백엔드 포트랑 다확인 해봤는데 왜 middleware만 사용하면 적용이 안되는지 찾지 못했습니다ㅠㅠㅠㅠㅠ

 

원인을 아시는 분 있으면 공유부탁드리겠습니다.

function App() {
   const [hello, setHello] = useState('')

    useEffect(() => {
        axios.get('/api/test')
        .then(response => setHello(response.data))
        .catch(error => console.log(error))
    }, []);

    return (
        <div>
            {hello}
        </div>
    );
}

 

 

728x90