π‘ CORS(Cross-Origin Resource Sharing)
- μΉ μ ν리μΌμ΄μ μ΄ λ€λ₯Έ λλ©μΈμμ 리μμ€λ₯Ό μμ²ν λ λ°μνλ 보μμμ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν λ©μ»€λμ¦μ΄λ€.
- μλ₯Ό λ€μ΄, νλ‘ νΈμλ μ ν리μΌμ΄μ μ΄ http://localhost:3000 μμ μ€ν μ€μ΄κ³ , λ°±μλ API μλ²κ° http://localhost:4000 μμ λμ μ€μ΄λΌλ©΄,
μ΄ λμ μλ‘ λ€λ₯Έ λλ©μΈμΌλ‘ κ°μ£Όλμ΄ CORS λ¬Έμ κ° λ°μν μ μλ€.
λ‘컬 νκ²½μμ νλ‘ νΈμλμ λ°±μλ κ° API νΈμΆ μ CORS λ¬Έμ κ° λ°μν μ μλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ λ°±μλμ CORS μ€μ μ μΆκ°ν΄μΌ νλ€.
export default function App() {
const [data, setData] = useState("");
useEffect(() => {
fetch(`${import.meta.env.VITE_API_SERVER}/api/hello`)
.then((response) => response.json())
.then((data) => setData(JSON.stringify(data)));
}, []);
// ...
return (
// ...
<p>
/api/hello: <code>{data}</code>
</p>
// ...
);
}
μ΄ μ½λλ₯Ό μμ±ν λ€ νλ‘ νΈμλμ λ°±μλλ₯Ό μ€ννλ©΄, κ°λ°μ λꡬ μ½μμ λ€μκ³Ό κ°μ μλ¬κ° λνλ κ²μ΄λ€
Access to fetch at 'http://localhost:4000/api/hello' from origin 'http://localhost:3000' has been blocked by CORS policy.
express.jsλ₯Ό μ¬μ©νλ λ°±μλμ CORS μ€μ μ μΆκ°νμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€.
-
CORS λΌμ΄λΈλ¬λ¦¬ μ€μΉ
cd ~/git/backfront/backend npm install cors
-
app.js νμΌ μμ
const cors = require("cors"); // ... app.use(cors());
-
μλ² μ¬μμ ν νμΈ
npm start
λ‘컬 κ°λ° νκ²½μμλ νλ‘ νΈμλ(3000 ν¬νΈ)μ λ°±μλ(4000 ν¬νΈ)κ° μλ‘ λ€λ₯Έ λλ©μΈμμ μ€νλμ§λ§, λ°°ν¬ νκ²½μμλ λμΌν λλ©μΈμμ μ 곡λλ€.
μ΄λ₯Ό μν΄ νκ²½λ³μλ‘ API μλ² μ£Όμλ₯Ό λμ μΌλ‘ μ€μ ν΄μΌ νλ€.
-
λ‘컬 νκ²½ μ€μ
frontend/.env.local
νμΌμ μμ±νκ³ λ€μ λ΄μ©μ μΆκ°νλ€.VITE_API_SERVER=http://localhost:4000
-
μ½λ μμ
frontend/src/App.tsx
νμΌμμ νλμ½λ©λ URLμ νκ²½λ³μλ‘ λ체νλ€.useEffect(() => { fetch(`${import.meta.env.VITE_API_SERVER}/api/hello`) .then((response) => response.json()) .then((data) => setData(JSON.stringify(data))); }, []);
-
μλ²μμ νκ²½λ³μ μ€μ
λ°°ν¬ νκ²½μμλ
frontend/.env
νμΌμ μμ±νκ³ λ€μ λ΄μ©μ μΆκ°νλ€VITE_API_SERVER=
-
μλ² μ¬μμ
νκ²½λ³μ λ³κ²½ ν μλ²λ₯Ό μ¬μμνμ¬ λ³κ²½ μ¬νμ μ μ©νλ€
npm start