Backend ๐Ÿ’ป/Django

[Django] ์žฅ๊ณ  ์•ฑ์—์„œ CORS ์„ค์ •ํ•˜๊ธฐ

minjiwoo 2023. 11. 19. 18:53
728x90

CORS ๋ž€ ๋ฌด์—‡์ธ๊ฐ€

๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๋ณด์•ˆ์ƒ์˜ ์•ˆ์ „์„ ์œ„ํ•ด์„œ cross-origin HTTP ์š”์ฒญ์„ ์ œํ•œํ•œ๋‹ค. ๋”ฐ๋ผ์„œ cross-origin ์š”์ฒญ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„ ์ธก์—์„œ ํ—ˆ์šฉ์„ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Š” HTTP-header ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ CORS๋ผ๊ณ  ํ•œ๋‹ค. 

CORS ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋Š” ๋‹ค๋ฅธ ์‚ฌ์ดํŠธ์—์„œ ์›๋ž˜์˜ ์‚ฌ์ดํŠธ๋ฅผ ํ‰๋‚ด๋‚ด์„œ ์•…์˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๊ธฐ์กด ์‚ฌ์ดํŠธ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ์•…์˜์ ์œผ๋กœ ๊ฐ€๋กœ์ฑ„๋Š” ๋“ฑ์˜ ๊ณต๊ฒฉ์„ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก CORS๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ํ˜‘์˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ด๋‹ค. 

CROSS-ORIGIN ์ด๋ž€ 

cross-origin ์ด๋ž€ ์ด๋“ค ์ค‘ ํ•œ๊ฐ€์ง€๋ผ๋„ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. 

1. protocol : ํ”„๋กœํ† ์ฝœ์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์ด๋‹ค. ex. http != https

2. domain : ๋„๋ฉ”์ธ ์ด๋ฆ„์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ์ด๋‹ค. ex. domain.com != domain2.com

3. port : ์˜ˆ๋ฅผ ๋“ค์–ด์„œ ํ˜„์žฌ ์žฅ๊ณ  ์•ฑ์ด 8000๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ๋ฆฌ์•กํŠธ ์•ฑ์ด 3000๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๊ฐ™์€ ip ๋ผ๊ณ  ํ•˜๋”๋ผ๋„ cross-origin ์— ํ•ด๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. 

Django์—์„œ CORS ์„ค์ •ํ•˜๊ธฐ

Django ์—์„œ๋Š” django-cors-headers package๋ฅผ ์„ค์น˜ํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

pip install django-cors-headers

 

settings.py ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด cors ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ๋‹ค. Django ์•ฑ ๋ฆฌ์†Œ์Šค ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•  ip+port ๋ฒˆํ˜ธ๋ฅผ ์ ์–ด์ฃผ๋ฉด๋œ๋‹ค.

๋‚˜์˜ ๊ฒฝ์šฐ React ์•ฑ(ํ”„๋ก ํŠธ์—”๋“œ)์—์„œ์˜ ์ ‘๊ทผ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ 3000์œผ๋กœ ์ง€์ •ํ–ˆ๋‹ค. 

INSTALLED_APPS = [
	...
	'corsheaders'
]

MIDDLEWARE = [
	'corsheaders.middleware.CorsMiddleware',
]

...

CORS_ORIGIN_WHITELIST = ['http://127.0.0.1:3000',
                         'http://localhost:3000']
CORS_ALLOW_CREDENTIALS = True
728x90