CORS ์ค๋ฅ๐คข ํด๊ฒฐํ๊ธฐ๐
๋ค์ด๋ฒ api๋ฅผ ์ด์ฉํด ๊ฒ์๊ธฐ๋ฅ์ ๊ตฌํํ๋ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
Access to XMLHttpRequest at 'https://openapi.naver.com/v1/search/movie.json?query=starwars&display=10' from origin 'http://localhost:3000' has been blocked 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(Cross-origin resource sharing)๋ ๋ธ๋ผ์ฐ์ ์ ๊ตฌํ ์คํ์ ํฌํจ๋๋ ์ ์ฑ
์ด๋ฉฐ ๋ณด์์ ๊ฐ์ ํธ์คํธ์ ์ ๋ณด๋ง ํ์ฉํ๋ค๊ณ ํ๋ค.
๋ธ๋ผ์ฐ์ ์ ์ฑ
์ด๊ธฐ ๋๋ฌธ์ ์๋ฒ-์๋ฒ๊ฐ ํต์ ํ ๋๋ ๋ฌธ์ ๋์ง ์๋๋ค.
์ด ์ค๋ฅ๋ ๊ฐ๋ฐ์๋ฅผ ๋ถํธํ๊ฒ ํ๋ ์ฌ์ค ๊ณ ๋ง์ด ๋
์์ด๋ค.
๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํธ์ถํ ์ ์๊ฒ ๋๋ค๋ฉด ๋ชป๋ ๋ง์์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์ง ๋์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ ์ ์์ผ๋ ๊ทธ๊ฒ์ ๊ฑธ๋ฌ์ฃผ๋ ์ญํ ์ ํ๋ค.
ํต์ ๊ณผ์ ์ ๊ทธ๋ฆผ์ผ๋ก ๋ํ๋ด๋ณด์๋ค.
์ด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ช๊ฐ์ง ์์
์ ํด์ค์ผํ๋ค.
๋ท๋จ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์๋จ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด์ฃผ๋ ๊ฒ ์ข๋ค๋๋ฐ
ํ์๋ ๋ฐฑ์๋ฒ๋ฅผ ์ฌ์ฉํ์ง ์์ ํ๋ก ํธ์๋ฒ์์ ํ๋ก์ ์ค์ ์ ํด์ฃผ์ด์ผ ํ๋ค ๐ข
React ์ ๋ชจ๋์ ํ๋ ์ค์นํด์ฃผ์
Npm I http-proxy-middleware --save๏ปฟ
src
โฃ assets
โ โฃ css
โ โฃ bootstrap.css
โ โฃ reset.css
โ โ style.css
โฃ component
โ โฃ MovieList.js
โ โ MovieSearch.js
โฃ pages
โ โ Main.js
โฃ App.css
โฃ App.js
โฃ index.css
โฃ index.js
โฃ reportWebVitals.js
โฃ setupProxy.js
โ setupTests.js
์์
์ค์ธ ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ
setupProxy.js ํ์ผ์ src ํ๋จ์ ์์ฑ ํ ์๋ ๋ด์ฉ ๊ทธ๋๋ก ์
๋ ฅํด์ค๋ค.
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function(app){
app.use(
createProxyMiddleware( '/naver', { target: 'https://openapi.naver.com',
changeOrigin: true,
pathRewrite:{ '^/naver/':'/' }
}) )
};
Target์ ์ฐํํ origin ์ ์์ฑํ๋ค.
Origin์ URL์์ ํ๋กํ ์ฝ, ๋๋ฉ์ธ, ํฌํธ ๋ฒํธ๋ฅผ ํฉ์น ๋ถ๋ถ์ด๋ค.
ํ์๋ ๋ค์ด๋ฒAPI๋ฅผ ์ด์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ค์ด๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํด์ฃผ๋ ์ฃผ์๋ฅผ ์์ฑํด์ฃผ์๋ค.
origin์ ๊ตฌ์กฐ
https://yi-jeong.github.com:80/ | |
ํ๋กํ ์ฝ | https:// |
---|---|
๋๋ฉ์ธ | yi-jeong.github.com |
ํฌํธ๋ฒํธ | :80 |
๋ค์ด๋ฒ ์ํ API ์ฝ๋ ๋ณด๊ธฐ ๐
โ
์ ํ๋ก์ ํธ์์ http-proxy-middleware ์ ์ฌ์ฉํด cors ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
ํ์ฌ ์์
์ค์ธ ํ๋ก์ ํธ์ด๋ฏ๋ก ์์ฑ๋จ๊ณ๋ ์๋์ง๋ง API๋ ์ ๋๋ก ๋ถ๋ ค์์ง๋ค!