๋ฌธ์ ์ ์์ โ ๏ธ
๋ก๊ทธ์ธ, ํ์๊ฐ์ ์ ์ํด FIrebase๋ก Google oAuth๋ฅผ ์ฐ๊ฒฐํ๊ณ Firebase ๋ด์ ํ ํฐ์ ๊ฐ์ง๊ณ ๋ฐฑ์๋ ์๋ฒ์ ๋ก๊ทธ์ธ, ํ์๊ฐ์
์์ฒญ์ ๋ณด๋ด์ผ ํ์๋ค.
์ ๋๋๋ผ ..
๐จ Access to fetch at ‘https://api.lubycon.com/me’ from origin ‘http://localhost:3000’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. If an opaque response serves your needs, set the request’s mode to ‘no-cors’ to fetch the resource with CORS disabled.
CORS ..?
๋์น์๋ ...?
๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ (Cross-Origin Resource Sharing, CORS)๋ ์ถ๊ฐ HTTP ํค๋๋ฅผ ์ฌ์ฉํ์ฌ, ํ ์ถ์ฒ์์ ์คํ ์ค์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ ํํ ์์์ ์ ๊ทผํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํ๋๋ก ๋ธ๋ผ์ฐ์ ์ ์๋ ค์ฃผ๋ ์ฒด์ ์ ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฆฌ์์ค๊ฐ ์์ ์ ์ถ์ฒ(๋๋ฉ์ธ, ํ๋กํ ์ฝ, ํฌํธ)์ ๋ค๋ฅผ ๋ ๊ต์ฐจ ์ถ์ฒ HTTP ์์ฒญ์ ์คํํฉ๋๋ค.
- https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
๋ญ๋ผ๋ ๊ฑฐ์ง ? ๐คทโ๏ธ
์ฝ๊ฒ ๋งํด์
http://waitwait.com:80/page/main.html
์์ ๊ฐ์ URL์ด ์๋ค๊ณ ๊ฐ์ ํด ๋ณด์ ์ด๋ ์ด๋ค ๊ฒ์ด ๋์ผ ์ถ์ฒ์ธ์ง ๋ณด๊ณ ์ฝ๊ฒ ์ดํดํด๋ณด์ !
์์ URL | ๋์ผ์ถ์ฒ | ์ด์ |
http://waitwait.com/dir/main.html | โญ๏ธ | ๊ฒฝ๋ก๋ง ๋ค๋ฅด๊ธฐ ๋๋ฌธ |
http://waitwait.com:80/search/main.html | โญ๏ธ | ๊ฒฝ๋ก๋ง ๋ค๋ฅด๊ธฐ ๋๋ฌธ |
https://waitwait.com:80/page/main.html | โ | ํ๋กํ ์ฝ์ด ๋ค๋ฆ |
http://waitwait.com:85/page/main.html | โ | ํฌํธ ๋ฒํธ๊ฐ ๋ค๋ฆ |
http://gogo.com:80/page/main.html |
โ | ํธ์คํธ ๋ค๋ฆ |
CORS ํด๊ฒฐ ๋ฐฉ๋ฒ ๐
์์ ์ ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋์ ๊ณต๊ณต ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๊ธฐ ์ํด Proxy server๋ฅผ ์ด์ฉํด CORS๋ฅผ ํด๊ฒฐํ ์ ์ด ์๋๋ฐ
์ด๋ฒ์ ๋ฐฑ์๋ ์๋ฒ๊ฐ ์๋๋ฐ ๋ค๋ฅธ ์๋ฒ๋ฅผ ์ค๊ฐ์ ๋ฌ๋ ๋๋๊ฑด๊ฐ ..?
์ฌ๋ฌ๊ฐ์ง ํผ๋์ด ์ค๊ณ ๊ฐ๋ค
ํํฐ๋๊ป ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ง๋ฌธ๋๋ ธ๊ณ ๋ช๊ฐ์ง ํด๊ฒฐ์ฑ ์ ์ ์ํด์ฃผ์๋ค .
์ฒซ๋ฒ์งธ ํด๊ฒฐ ๋ฐฉ๋ฒ package.json ํ๋ก์ ํ๊ฒฝ์ค์
create-react-app
๊ณต์๋ฌธ์ https://create-react-app.dev/docs/proxying-api-requests-in-development
package.json ์ proxy ๋ผ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค
"proxy": "http://api-server:8080"
api-server์ ์๋ฆฌ์๋ ์์ฒญํ๊ณ ์ ํ๋ URL์ ๋ฃ์ผ๋ฉด ๋๊ฒ ๋ค !
์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ค์ ๋ก๊ทธ์ธ ์์ฒญ์ ๋ณด๋์ ๋
์ฑ๊ณตํ๋ค !
๊ทธ๋ฆฌ๊ณ ๋ค์๋
๊ฐ์๊ธฐ ์ ๋๋ค ... ์์ง ?
์ด ๊ธ์ ๋ณด๋ ๋ถ๋ค์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ๊ณ์ ์ ๋ฐฉ๋ฒ์ ์จ๋ ๋ฌด๋ฐฉํ๋ค.
ํ์ง๋ง ๋๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ์ํ์ผ ํ ๋ฏ ์ถ์๋ค ..
๋๋ฒ์งธ ํด๊ฒฐ ๋ฐฉ๋ฒ http-proxy-middleware
npm install --save-dev http-proxy-middleware
http-proxy-middleware ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ์
์ฐ์ src ํด๋ ๋ด์ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ด setupProxy.js ํ์ผ์ ๋ง๋ค์ด ์ค๋ค
const { createProxyMiddleware } = require('http-proxy-middleware');
module.exports = function (app) {
app.use(
createProxyMiddleware('/members', {
target: '"proxy": "http://api-server:8080"',
changeOrigin: true,
}),
);
};
setupProxy ํ์ผ์ ์์ฑํ๊ณ ์ ์ฝ๋์ ๊ฐ์ด ์์ฑํด ๋ณด์.
http://localhost:3000/members ๋ก ์์ํ๋ ๋ชจ๋ ์์ฒญ๋ค์ moddleware๊ฐ
http://api-server:8080/members ์ผ๋ก ํ๋ก์ฑ ํด์ฃผ๊ฒ ๋๋ค !
์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๊ฒฐ๊ตญ ๋ก๊ทธ์ธ์ ์ฑ๊ณตํ๋ค ...... ๐
์ ๋ฐฉ๋ฒ ์ธ์ ๋ค๋ฅธ ์ฌ๋์ด ๋ง๋ ํ๋ก์ ์๋ฒ๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ๋ ์์ง๋ง
๊ทธ ๋ฐฉ๋ฒ์ ํ๋ก์ ์๋ฒ๋ฅผ ๋ง๋ ์ฌ๋์ด ์๋ฒ๋ฅผ ๋ซ์ ๋ฒ๋ฆฌ๋ฉด CORS ๋ฌธ์ ๊ฐ ๋ค์ ๋ฐ์ํด๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ์์ด์ ์ถ์ฒํ์ง ์๋๋ค ...
( ๋ด ๊ฒฝํ๋ด ์ด๋ค)
์ด๋ ๊ฒ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ผ๋ฉด ๋๊ตฌ๋ ํ๋ฒ ์ฏค ๊ฒฝํํด ๋ดค์ CORS๋ผ๋ ๋ ์๊ณผ ํํ ์น๋ถ๋ฅผ ๋ฒ์๋๋ฐ
๊ฒจ์ฐ ํด๊ฒฐํด์ ๊ธฐ๋ถ์ด ์ ๋ง ํ๋ณตํ๋ค. .. ํธ์ ๐