์๊ฒ ๋ชจ๋ฅด๊ฒ cors ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด Express.js์์ ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํด์๋๋ฐ
๋ฌธ๋ ์ด๊ฒ ์ ํํ ๋ญ์ง ๊ถ๊ธ์ฆ์ด ์๊ฒผ์ต๋๋ค..
CORS๋ Cross-Origin Resource Sharing์ ์ฝ์๋ก, ๋ค๋ฅธ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ ์ ๋ํ ํ์ฉ/๋นํ์ฉ ์ ์ฑ ์ด๋ค
=> ์ด ์ ์ฑ ์ ๋ธ๋ผ์ฐ์ ์์ ์คํ๋๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ค๋ฅธ ์ถ์ฒ(Origin)๋ก๋ถํฐ ๋ฆฌ์์ค์ ์ ๊ทผํ ๋ ์ ์ฉ๋จ
๋ธ๋ผ์ฐ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Same-Origin Policy๋ฅผ ๋ฐ๋ฅด๋ฉฐ, ์ด๋ ์คํฌ๋ฆฝํธ๋ ์คํ์ผ ๋ฑ์ ๋ฆฌ์์ค ์์ฒญ์ด
๋์ผํ ์ถ์ฒ์์ ์จ ๊ฒ์ด์ด์ผ ํ๋ค๋ ์ ์ฑ ์ด๋ค.
(๋์ผํ ์ถ์ฒ(Origin)๋ ํ๋กํ ์ฝ, ํธ์คํธ, ํฌํธ๊ฐ ๋์ผํ ๊ฒ์ ์๋ฏธ)
https://www.naver.com:3000/ ๊ณผ ๊ฐ์ URL์ด ์๋ค๋ฉด
https๊ฐ ํ๋กํ ์ฝ
www.naver.com์ด ํธ์คํธ
3000์ด ํฌํธ (์ค์ ๋ค์ด๋ฒ ์ฃผ์์์๋ ํฌํธ ๋ฒํธ๊ฐ ์๋ต๋์ด ์๊ณ ์ฌ๊ธฐ์๋ ์์๋ก ๋ฌ์๋ )
๊ทธ๋ ๋ค๋ฉด Same-Origin Policy๋ ํ์ํ ๊น?
=> ์ ํ๋ฆฌ์ผ์ด์ ์ ํด์ปค๊ฐ ์ฌ์ด๋์ ์ฝ๋๊ฐ ์คํ๋์ด ๊ฐ์ธ ์ ๋ณด๋ฅผ ๊ฐ๋ก์ฑ๋ ๋ฑ
๋ณด์ ์ธก๋ฉด์์ Same-Origin Policy๊ฐ ์๋ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ณด์์ ๊ต์ฅํ ์ทจ์ฝํจ!
๋ฌผ๋ก ๋ณด์ ์ธก๋ฉด์ด ์ค์ํ์ง๋ง ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ์ด์ฉ ์ ์์ด ๋ค๋ฅธ ์ถ์ฒ์ ์ํธ์์ฉ ํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค
=> CORS๋ ์ด ์ ํ์ ์ํํ์ฌ, ์๋ก ๋ค๋ฅธ ์ถ์ฒ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์ธ์ ์ผ๋ก ์๋ก์ ๋ฆฌ์์ค์ ์ ๊ทผํ ์ ์๊ฒ ํด์ค
๋ธ๋ผ์ฐ์ ์ CORS์ ๊ธฐ๋ณธ์ ๋์ ํ๋ฆ
๋ณดํต ์น์ HTTP ์์ฒญ์ ํตํด ์๋ฒ์ ์์ฒญ์ ๋ณด๋ด๋๋ฐ ์ด๋ ์์ฒญ ํค๋์ Origin์ด๋ผ๋ ํ๋์ ์ถ์ฒ๋ฅผ ๋ด์ ๋ณด๋
=> ์๋ต์ ๋ฐ์ ์๋ฒ๋ ์๋ต ํค๋๋ฅผ ์ฌ์ฉํ์ฌ ํ์ฉ๋ ์ถ์ฒ๋ฅผ ๋ช ์ํ๋ค
(์๋ต ํค๋์ Access-Control-Allow-Origin ํ๋์ ์ด ๋ฆฌ์์ค๋ฅผ ์ ๊ทผํ๋ ๊ฒ์ด ํ์ฉ๋ ์ถ์ฒ url์ ๋ด์ ํด๋ผ์ด์ธํธ๋ก ์ ๋ฌ)
์ดํ, ์๋ต์ ๋ฐ์ ๋ธ๋ผ์ฐ์ ๋ ์์ ์ด ๋ณด๋๋ ์์ฒญ์ Origin๊ณผ ์๋ฒ๊ฐ ๋ณด๋ธ ์๋ต์ Access-Control-Allow-Origin์ ๋น๊ตํจ
(์ฐจ๋จํ ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ !)
์๋ฒ์์ Access-Control-Allow-Origin ํค๋์ ํ์ฉํ ์ถ์ฒ๋ฅผ ๊ธฐ์ฌํด์ ํด๋ผ์ด์ธํธ์ ์๋ตํ๋๊ฒ CORS ์๋ฌ์ ํด๊ฒฐ์ฑ !
ํ์ฌ ๊ฐ๋ฐ์ค์ธ Node.js์์ CORS๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด, cors ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค!
=> cors ๋ฏธ๋ค์จ์ด๋ Express ํ๋ ์์ํฌ์ ํจ๊ป ์์ฃผ ์ฌ์ฉ๋๋ฉฐ, ๊ฐ๋จํ ์ค์ ์ผ๋ก CORS ๊ด๋ จ ์ด์๋ฅผ ๋ค๋ฃธ
์ด ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ถ์ฒ์์์ ์์ฒญ๋ ํ์ฉํ ์ง, ์ด๋ค HTTP ๋ฉ์๋๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํ์ง,
์ด๋ค ํค๋๊ฐ ํ์ฉ๋๋์ง ๋ฑ์ ์ค์ ํ ์ ์์
๊ฒฐ๋ก ์ ์ผ๋ก๋ ์ด ๋ฏธ๋ค์จ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ ์์์ ์์ฒญ์ด ํ์ฉ๋๋๋ก ํค๋๋ฅผ ์ค์ ํด์ฃผ๋๋ฐ
์ง๊ธ ๊ฐ๋ฐ ์ค์ธ ์ฝ๋์์๋ ๋ณ๋ค๋ฅธ ์ต์ ์์ด ๊ทธ๋ฅ cors()๋ผ๊ณ ์ ํ์๋ ๊ฑธ ํ์ธํ ์ ์๋ค
์ฌ์ค cors()์ ๊ดํธ ์์๋
// ์ฌ๋ฌ ๋๋ฉ์ธ ํ์ฉ
app.use(cors({ origin: ['http://example.com', 'http://another.com'] }));
๋ค์๊ณผ ๊ฐ์ด ์์ฒญ์ ํ์ฉํ ๋๋ฉ์ธ์ ๋ช ์ํด์ค ์ ์๋๋ฐ
์์ ์์ฑ์ค์ธ ์ฝ๋์ฒ๋ผ ๊ทธ๋ฅ cors()๋ฅผ ์ ์ด์ฃผ๋ฉด ๋ชจ๋ origin์์์ ์์ฒญ์ ํ์ฉํ๋ ๊ฒ์ผ๋ก ๊ธฐ๋ณธ ์ค์ ๋๋ค!
=> ๋ณด์์์ ์ด์ ๋ก ์ค์ ์ด์ ํ๊ฒฝ์์๋ ์ด๋ฅผ ๋ฌด์์ ํ์ฉํ๋ ๊ฒ๋ณด๋ค๋
ํน์ ๋๋ฉ์ธ์์์ ์์ฒญ๋ง์ ํ์ฉํ๋๋ก ์ค์ ํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค!!
cors() ์์ origin ์ธ์๋ methods, allowedHeaders,credentials ๋ฑ๋ฑ ์ฌ๋ฌ ์ต์ ๋ค์ด ์กด์ฌํ๋ค!
=> ๊ถ๊ธํ๋ฉด ์ ์ ๋ฆฌ๋ ๋ฌธ์๋ฅผ ์ฐพ์ ์ ์์
์ด๋ฒ์ CORS์ ๋ํด ์์๋ณด๋ฉฐ ์๊ฐ๋ณด๋ค ๊น๊ฒ ๊ณต๋ถํ ๋ถ๋ถ์ด ๋ง๋๋ผ๊ตฌ์...
๋ฐฑ์๋ ์ธก๋ฉด์์๋ง ๊ฐ๋จํ๊ฒ ์์ฝํด ๋ดค๋๋ฐ ๋ ์์ธํ๊ฒ ๊ณต๋ถ๋ฅผ ํด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค์!
'๐ซ Backend > Node' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Node.js] Nodemailer๋ฅผ ์ฌ์ฉํ์ฌ ํ์๊ฐ์ ์ ์ด๋ฉ์ผ ์ธ์ฆ ๊ตฌํํ๊ธฐ (0) | 2024.05.07 |
---|---|
AWS๋ฅผ ์ด์ฉํ์ฌ Node.js + MongoDB ๋ฐฐํฌํ๊ธฐ [Co-Code] (0) | 2024.04.06 |
JWT ํ ํฐ (1) | 2024.01.31 |
TypeORM ์ด๋? (1) | 2024.01.28 |