๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Couch Coding

Couch Coding ( ์นด์šฐ์น˜ ์ฝ”๋”ฉ ) - Frontend์—์„œ CORS ํ•ด๊ฒฐํ•˜๊ธฐ ..

๋ฌธ์ œ์˜ ์‹œ์ž‘  โ˜ ๏ธ

๋กœ๊ทธ์ธ, ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•ด 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๋ผ๋Š” ๋…€์„๊ณผ ํ•œํŒ ์Šน๋ถ€๋ฅผ ๋ฒŒ์˜€๋Š”๋ฐ 

๊ฒจ์šฐ ํ•ด๊ฒฐํ•ด์„œ ๊ธฐ๋ถ„์ด ์ •๋ง ํ–‰๋ณตํ–ˆ๋‹ค. .. ํŽธ์•ˆ ๐Ÿ˜‡