2023-08-02(수)
CORS 에러
많은 사람들이 알겠지만 CORS 에러의 근본적인 오류는 "같은 도메인으로부터 요청"을 하지 않았기 때문이다.
CORS 교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다.
근데 개발을 하다보면 react server에서 db server로 요청을 해야하는데 같은 도메인을 공유하지 않기에 요청을 하면 CORS에러가 뜸
그러면 CORS에러를 어떻게 해결??????
CORS 에러 해결하기
해결방법: proxy 이용하기
Proxy? 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램 (위키피디아 - 프록시 서버)
얻는 장점?
- proxy를 사용하면 다른 도메인으로 요청/응답을 할 수 있으며
- 앞에 주소 없이 상대경로만으로 백앤드 서버에 접속할 수 있음(한 곳에서 관리하기에 나중에 수정이 필요할 때 여러 곳에서 수정할 필요없이 한 파일에서 바로 수정할 수 있음)
첫 번째 방법: package.json에 proxy값 넣기
- package.json에서 가장 최하단에 아래와 같이 설정
....
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
"proxy" : "우회할 API 주소"
}
- fetch 또는 axios 요청에 원래 있던 도메인 부분 삭제
// 원본
const response = await fetch('우회할 api주소/params');
.then(() => {
// 변경
const response = await fetch('/params');
.then(() => {
두 번쨰 방법: React Proxy 사용하기
- npm install http-proxy-middleware --save로 middleware 설치
- src 파일에서 setupProxy.js를 생성하고 아래와 같이 작성
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app) {
app.use(
'/proxy가 필요한 path prameter',
createProxyMiddleware({
target: '타겟이 되는 api url',
changeOrigin: true,
})
);
};
// 또는 받아야할 도메인이 2개 이상이면
app.use(
['/path prameter1', '/path prameter2'], // 배열로 생성
createProxyMiddleware({
target: '기본적으로 target되는 api url', // 기본적으로 target되는
changeOrigin: true,
router: {
'/path prameter2' : '추가 api url'
// '/api3' : 도메인으로 추가할 수 있음
}
})
);
- fetch 또는 axios 요청에 원래 있던 도메인 부분 삭제
// 원본
const response = await fetch('우회할 api주소/params');
.then(() => {
// 변경
const response = await fetch('/params');
.then(() => {
'Section4' 카테고리의 다른 글
Unit 7 (0) | 2023.08.02 |
---|---|
Unit 7 - [Deploy] CI/CD 파이프라인 (0) | 2023.08.01 |
Unit 7 - [Deploy] CI/CD (0) | 2023.08.01 |
Unit 7 - [Deploy] DevOps (0) | 2023.08.01 |
Unit 7 - [Deploy] 개발 프로세스 (0) | 2023.08.01 |