2022. 7. 25. 17:19ㆍReact
예전에 회사에서 slack API로 간단한 애플리케이션을 만들 일이 있었다.
slack에서 깔끔하게 잘 만들어진 openGraph를 적절히 파싱하여 스크래핑하는 애플리케이션이었는데 이때 난 CORS를 처음봤었다.
Access to XMLHttpRequest at '' from origin '' has been block by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
일단 이 에러면 CORS에러라고 보면 되겠다.
보통 백엔드 서버의 주소와 프론트의 주소가 다르기 때문에 CORS 처리를 해놓지 않는다면 일반적으로 이렇게 볼 수 있다.
해결 방법은 두 가지 있다.
1. 도와줘요 백엔드 개발자님!
만약 오픈된 API를 사용하는게 아니라 로컬 서버를 통해 작업이 진행된다면 백엔드 개발자께 해당 주소(보통 포트)를 열어달라고 요청하면 된다. 다시 백엔드를 받고 나서 실행시킨다면 OK!
1-2. 프록시 서버 설정
로컬서버를 사용할 때 우회할 수 있는 프록시 서버를 설정해주면 일단 넘어갈 수 있다.
임시 방편이니 꼭 백엔드 개발자께 고쳐달라고 말하자.
webpack.config.ts
...
devServer: {
historyApiFallback: true,
port: 3000,
publicPath: '/dist/',
proxy: {
'/api/': {
target: 'http://localhost:3095',
changeOrigin: true,
},
},
},
};
...
웹팩을 사용한다면 historyApiFallback과 proxy를 간단하게 사용해 줄 수 있다.
2. 오픈 API를 사용할 때
일단 예전에 slack 애플리케이션을 개발할 때, 브라우저 단에서 바로 요청을 보낼 수 없다는 당연한 사실을 그때서야 깨달았다. 구글 api는 안에 있는 콘솔로 간단하게 도메인이나 설정이 가능하기 때문에 CORS가 있는지도 몰랐는데 slack은 아니었다.
테스트 페이지에서 확인해보면 항상 잘나왔었는데 브라우저에서만 실행하면 CORS 에러가 나는게 그 이유였다.
결론적으로는 플랫폼 내 콘솔에서 적절하게 사용할 도메인을 입력해주고 설정이 완료가 되면 백엔드에서 요청을 보내고 받은 뒤 프론트에서 내려받아야한다.
브라우저에서는 아무것도 할 수 없다. 토이 프로젝트도 못한다ㅠㅠ
'React' 카테고리의 다른 글
웹팩과 함께 import React from "react" 안써보기 (0) | 2023.01.06 |
---|---|
CRA 없이 webpack으로 React 시작하기 101 (with TypeScript) (0) | 2023.01.05 |
[React] useCallback의 onChangeEvent handler로 사용 최적화 (0) | 2022.08.19 |
[ncu] 패키지 업데이트에서 보안오류가 난다면? (0) | 2022.07.22 |