CORS๋?
Cross Origin Resource Sharing
์์ฒญ์ด Same Origin, ์ฆ ๋์ผํ ์ถ์ฒ๊ฐ ์๋ ๊ณต์ ์ ๋ํ ์ ๊ทผ์ ๋ง๋ ๋ณด์ ์ ์ฑ
์ด๋ค.
์์ฒญ์ ํ ๋๋ฉ์ธ์ ์ฃผ์, ํฌํธ๋ฒํธ, ํ๋กํ ์ฝ์ด ๋ชจ๋ ๊ฐ์์ผ์ง ํด๋น ์๋ต์ ๋ฐ์ํ๋ ์ ์ฑ
์ด๋ค.
์๋ฅผ ๋ค์ด,
API์๋ฒ์ ๋๋ฉ์ธ์ด server.com์ด๊ณ ,
์์ฒญํ๋ ์ฌ์ดํธ์ ๋๋ฉ์ธ์ด page.com์ด๋ผ๋ฉด
์์ฒญ์ ํ๋ page.com์ ๋๋ฉ์ธ์ด server.com์ ๋๋ฉ์ธ๊ณผ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ต ์์ฒญ์ ๋ง๋ ์ด์ ์ด๋ค.
CORS ์ ์ฑ ์ ์ด์
๋ง์ฝ, ๋ค๋ฅธ ๋๋ฉ์ธ์ ์๋ต์ ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค๋ฉด,
๋ค๋ฅธ ์ฌ์ดํธ๋ฅผ ์ ์ํ์ ๋, ํด๋น ๋ธ๋ผ์ฐ์ ์์ ๋ค๋ฅธ ๋๋ฉ์ธ์ ์์ฒญ์ ๋ฐ์ ์ฌ์ฉ์์ ์ธ์ฆ ํ ํฐ์ ๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์ด,
์ฌ์ฉ์๊ฐ example.com ์ ์ ์์ ํ๋๋ฐ, ํด๋น ์ฌ์ดํธ์์ www.naver.com์ ์์ฒญ์ ๋ณด๋ด๊ณ ,
www.naver.com์์๋ ์ฌ์ฉ์์ ๋ํ ์ธ์ฆ ํ ํฐ์ ์ฒจ๋ถํด์ ์ค๋ค.
๊ทธ๋ ๋ค๋ฉด exmple.com์์ ์ฌ์ฉ์์ naver์ ๋ํ ์ธ์ฆ ๊ถํ์ ๋ฐ๊ฒ๋ ์ ์๋ค๋ ๊ฒ์ด๋ค.
ํด๊ฒฐ ๋ฐฉ๋ฒ
1. ์๋ฒ์์ ์ค์ ํ๊ธฐ
์ฌ์ด ๋ฐฉ๋ฒ ์ค ํ๋๋ก๋, api ์๋ฒ์์ ๋ฐ๋ก ์ ์ฑ ์ ์ค์ ํ๋ ๊ฒ์ด๋ค.
- Spring
Spring์์ @CrossOrigin ์ด๋ ธํ ์ด์ ์ ํตํด์ ํน์ ๋๋ฉ์ธ์ ๋ํ Origin์ ํ์ฉํ ์ ์๊ฒ ๋๋ค.@RestController @CrossOrigin(origins = "example.com") // ๋๋ฉ์ธ์ ๋ํ Origin ํ์ฉ public class MyController { @GetMapping("/example") public String example() { ... } }
์ ์ฝ๋์์ API์๋ฒ๊ฐ example.com์ ๋ํ CORS๋ฅผ ํ์ฉํ๋ ๊ฒ์ด๋ค.
- Django
django์์ django-cors-headers๋ฅผ ์ด์ฉํ ์ ์๋ค.
pip install django-cors-headers
ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด์ django-cors-headers๋ฅผ ์ค์นํ๋ค.
INSTALLED_APPS = [
# ...
'corsheaders',
# ...
]
MIDDLEWARE = [
# ...
'corsheaders.middleware.CorsMiddleware',
# ...
]
django settings.py์์ ์ ์ค์ ์ ์ถ๊ฐํ๋ค.
๋๋, settings.py์ ํน์ ๋๋ฉ์ธ์ ํ์ฉํ ์ ์๋ค.
CORS_ORIGIN_ALLOW_ALL = True
์๋ ๋ชจ๋ ๋๋ฉ์ธ์ ํ์ฉํ๋ ์ค์ ์ด๋ค.
CORS_ORIGIN_WHITELIST = [
'http://example.com',
'https://example.com',
]
์๋ ํน์ ๋๋ฉ์ธ์ ํ์ฉํ๋ ์ค์ ์ด๋ค.
2. ํด๋ผ์ด์ธํธ์์ ํด๊ฒฐํ๊ธฐ
CORS์ ์ฑ ์ ๋๋ถ๋ถ ๋ธ๋ผ์ฐ์ ์์ ๋ง๋ ํ์๋ก ์ด๋ฃจ์ด์ง๊ธฐ ๋๋ฌธ์, ๋ธ๋ผ์ฐ์ ์์ CORS์ ์ฑ ์ค์ ์ ํด์ฃผ๋ฉด ๋๋ค.
๋ณธ ํฌ๋กฌ ํ์ฅํ๋ก๊ทธ๋จ์ CORS ์ ์ฑ
์ Unblock ํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
์์ฆ์ API์๋ฒ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ค ๋ณด๋, ๋๋ฉ์ธ์ด ๋ฌ๋ผ์ CORS์ค์ ์ ์๋ฒ์์ ํด์ฃผ๋๊ฒ ํ์๊ฐ ๋๋ค !!
'BackEnd > Server' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Apache JMeter๋ก NGNIX์ ๋ก๋๋ฐธ๋ฐ์ฑ ์ฑ๋ฅ ํ ์คํธ (0) | 2023.09.02 |
---|---|
[NGNIX] ์๋ฒ SSL ์ค์ (0) | 2023.09.02 |
[SLASH23] ์ค์๊ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (0) | 2023.09.02 |
[SLASH 23] PinPoint๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ์ฐ์ถ์ ํ๊ธฐ (0) | 2023.09.02 |
aws EC2, ๊ฐ๋น์๋ฅผ ์ด์ฉํ์ฌ Spring Project ์ง์ ๋ฐฐํฌํด๋ณด๊ธฐ + SSL (0) | 2023.09.01 |