Vite를 사용하여 외부 API를 호출할 때, 때때로 CORS 문제가 발생할 수 있습니다. 이러한 문제는 API 호출에 실패하거나, 데이터를 받아올 수 없는 상황을 초래할 수 있습니다.
CORS는 Cross-Origin Resource Sharing의 약자로, 보안상의 이유로 브라우저에서 한 도메인의 자원을 다른 도메인에서 요청할 때 발생하는 문제입니다. 이를 해결하기 위해서는 프록시를 별도로 설정해주어야 합니다.
Vite에서는 Vite.config.js 파일에서 프록시 설정을 할 수 있습니다. 프록시 설정을 통해, API 요청을 보낼 때 Vite 개발 서버를 거쳐 요청을 보내기 때문에 CORS 문제를 우회할 수 있습니다.
프록시 설정하기
`Vite.config.js` 파일 수정
import react from "@vitejs/plugin-react";
import { defineConfig } from "vite";
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
"@": "/src",
},
},
server: {
proxy: {
"/api": {
target: "http://아이피:포트/api/v1",
rewrite: (path) => path.replace(/^\/api/, ""),
changeOrigin: true,
secure: false,
ws: true,
configure: (proxy, _options) => {
proxy.on("error", (err, _req, _res) => {
console.log("proxy error", err);
});
proxy.on("proxyReq", (_proxyReq, req, _res) => {
console.log("Sending Request to the Target:", req.method, req.url);
});
proxy.on("proxyRes", (proxyRes, req, _res) => {
console.log(
"Received Response from the Target:",
proxyRes.statusCode,
req.url
);
});
},
},
},
},
});
index.tsx
Axios를 이용해 API를 호출할 때, CORS 문제를 해결하기 위해 인덱스 파일 상단에 Axios 설정 값을 추가하거나, 각 API 호출 코드에서 URL을 입력해야 합니다.
import axios from "axios";
axios.defaults.baseURL = "http://아이피:포트/api/v1";
API 호출 파일 예제
import axios from "axios";
import { APIProps, ResponseProps } from "../interface/responseInterface";
/**
* * 로그인
* @param data : Data Json
* @returns {
* status: success | failure | expire
* }
*/
export async function SignInAPI({ data }: APIProps): Promise<ResponseProps> {
let result: ResponseProps;
await axios
.post(`/signin`, data, {
validateStatus: (status: number) => {
// 500 오류 이상일때 거부, 나머지는 통과
return status < 500;
},
})
.then((res) => {
result = res.data;
})
.catch((error) => {
console.error(error);
});
return new Promise((resolve, reject) => {
try {
switch (result.status_code) {
case "200":
resolve(result);
break;
default:
reject(new Error(result.message));
return;
}
} catch (error: any) {
console.error(error);
reject(new Error(error));
}
});
}
위와 같이 프록시를 설정해 주고 API를 호출해 주면, CORS 문제없이 서버 호출이 가능합니다.
728x90
사업자 정보 표시
레플라 | 홍대기 | 경기도 부천시 부일로 519 화신오피스텔 1404호 | 사업자 등록번호 : 726-04-01977 | TEL : 070-8800-6071 | Mail : support@reafla.co.kr | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
'React' 카테고리의 다른 글
[React] useContext 사용하기 (0) | 2023.12.10 |
---|---|
[React] 카카오톡 공유시 썸네일 교체가 안되는 경우 OG 캐시 초기화 하기 (0) | 2023.04.18 |
[React] npm, yarn, pnpm 차이점과 패키지 관리자 알아보기 (0) | 2023.04.02 |