CORS
CORS ๋
Cross-Origin Resource Sharing
์ ์ค์๋ง์ด๋ค. ๋จ์ด ๊ทธ๋๋ก ๋ณด๋ฉด ๊ต์ฐจ ์ถ์ฒ ์์ ๊ณต์ ๋ผ๋ ์๋ฏธ์ธ๋ฐ, ์ข ๋ ํ์ด๋ณด๋ฉด ์ถ์ฒ๊ฐ ๋ค๋ฅธ ์์์ ๊ณต์ ํ๋ค๋ ๊ฑธ๋ก ์ดํดํ ์ ์๋ค.CORS
๋ ๋์ผ ์ถ์ฒ์ ์ฑ (Same-origin policy, ์ดํ SOP) ๋๋ฌธ์ ๋์๋ค. ๊ทธ๋ผ ๋จผ์ ๋์ผ ์ถ์ฒ ์ ์ฑ ์ ๋ํด์ ๋จผ์ ์์๋ณด์.๋์ผ์ถ์ฒ ์ ์ฑ (Same-origin policy)
ํ ์ถ์ฒ ์์ ๋ก๋ํ ๋ฌธ์ ๋๋ ์คํฌ๋ฆฝํธ๊ฐ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์ํธ ์์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ํํ๋ ์ค์ํ ๋ณด์ ๋ฉ์ปค๋์ฆ์ ๋๋ค.
๋ผ๊ณ ์ด๊ณณ์ ์์ ๋ผ ์๋ค.
์์ ๋ฌธ์ฅ์ ๋ณด๋ฉด, ํ ์ถ์ฒ์์ ๋ก๋๋ ๋ฆฌ์์ค๋ ๋ค๋ฅธ ์ถ์ฒ์ ๋ฆฌ์์ค์ ์ํธ์์ฉ ํ ์ ์๊ฒ ํ๋ค๊ณ ํ๋ค. ์ ๊ทธ๋ฌ์๊น? ๋ณด์ ๋๋ฌธ์ด๋ผ๋ ๊ฒ์ ์ฝ๊ฒ ์ ์ถํ ์ ์๋ค.
์๋ฅผ ๋ค์ด์ ๋๋ A๋ผ๋ ์นํจ์ง์ ์ ํํด์ ์๋ 1๋ง๋ฆฌ๋ฅผ ์์ผฐ๋๋ฐ, A๊ฐ B๋ผ๋ ๊ฐ๊ฒ์ ํ์ฒญ์ ์ฃผ์ด์(redirect?) B์นํจ์ง์์ ์๋ ์นํจ์ ๋ณด๋ด์จ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋ ๊ฒฝ์ฐ, ๊ฒฐ๊ตญ์๋ ๋ด๊ฐ ์ํ๋ ์นํจ๋ง์ด ์๋ ์๋ ์๊ณ ๋์๊ฐ B์์ ๋ด ์นํจ์ ๋ฌด์จ ์ง์ ํ๋์ง ๋๋ ์ ํ ๋ชจ๋ฅธ ์ฑ๋ก ์นํจ์ ๋จน์ด์ผ ํ ์๋ ์๋ ๊ฒ์ด๋ค.(๋ฌผ๋ก ์นํจ์ ํญ์ ๋ง์์ ๊ฑฐ๋ผ ์๊ฐํ๋ค.)
์ ์ฌ์ ์ธ ์ ์ฑ ๋ฌธ์๋ฅผ ๊ฒฉ๋ฆฌํ๊ณ ๊ณต๊ฒฉ์ ์๋ฐฉํ๋ค๋ ์ทจ์ง์ธ ๊ฒ์ด๋ค. ์ข ๋ ์ง์งํ ์๋ก, ์ธํฐ๋ท์ ์ ์์ ์ธ ์น์ฌ์ดํธ๊ฐ ๋ธ๋ผ์ฐ์ ์์ JS๋ฅผ ์คํํ์ฌ ํ์ฌ ์น๋ฉ์ผ ์๋น์ค(์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ์๋น์ค) ๋๋ ํ์ฌ ์ธํธ๋ผ๋ท์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๋ ์ผ์ด ์์ ์๋ ์๋ ๊ฒ์ด๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๋์ผ์ถ์ฒ๊ฐ ์๋๊ธฐ ๋๋ฌธ์ client์์ ๊ฑฐ๋ถํ ์ ์๋ค.
๋์ผ ์ถ์ฒ๋ฅผ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์ host url์ ๊ธฐ์ค์ผ๋ก ํ๋๋ฐ, ํ๋กํ ์ฝ, ํฌํธ, ํธ์คํธ๊ฐ ๋ชจ๋ ๋์ผํด์ผ ๊ฐ์ url์ด๋ผ๊ณ ์ธ์ ํ๋ค.
CORS
์ ํ์์ฑ์ธํฐ๋ท์ด ๋ฐ๋ฌํ๋ฉด์ ๊ฐ application์ ๋น์ฆ๋์ค๊ฐ ๋ณต์กํด์ง๊ณ , ํ ํ๋ก๊ทธ๋จ๊ณผ์ ์ฐ๊ด์ฑ์ด ๋์์ง๋ฉด์ ์๋ก ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํด์ผ ํ ์ผ์ด ๋ง์์ก๋ค.
F/E์ B/E์ ๋ถ๋ฆฌ๋ก ์ธํด์ ์๋ฒ๊ฐ ๋๋๊ฒ ๋๋ค. Front ์๋ฒ๋ ๋ ๋๋ง์ ์ฌ์ฉ๋๊ณ , Backend ์๋ฒ๋ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ๋ ๋ฐ ์ฌ์ฉ๋๋ค. ํด๋ผ์ด์ธํธ๋ ์ด ๋ ๊ฐ์ง ์๋ฒ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ์์ฒญ์ ๋ณด๋ด์ผํ๊ธฐ ๋๋ฌธ์ ์ฒ๋ฆฌ์ ํ๊ณ๊ฐ ์๊ฒผ๋ค.
์ด๋ฌํ ํ์์ฑ์ ๋ฐ๋ผ CORS๋ฅผ ํ์ฉํ๊ฒ ๋๋๋ฐ, ์ด ์์ ์ HTTP ํค๋๋ฅผ ์กฐ์ํจ์ผ๋ก ์ด๋ค์ง๋ค.
Access-Control-Allow-Origin
์ง์ญํด๋ณด๋ฉด ์ด ์ถ์ฒ์ ์ ๊ทผ ํ์ฉ์ ํต์ ํ๋ค๋ ๋ป์ด๊ฒ ๋ค. HTTP ํค๋์ ์์ ์์๋ฅผ ์ถ๊ฐํ๊ณ , ๊ทธ ๊ฐ์ผ๋ก url์ ๋ฃ์ผ๋ฉด ํด๋น url์ client์์ ์ถ์ฒ๊ฐ ๋ค๋ฅด๋๋ผ๋ ํ์ฉํ๊ฒ ๋๋ค.
JSONP
๋ธ๋ผ์ฐ์ ์์ SOP๋ฌธ์ ๋ฅผ ํํผํ๊ธฐ ์ํด์
<script>
ํ๊ทธ๋ฅผ ์ด์ฉํด ๊ผผ์๋ฅผ ์ฌ์ฉํด์ JSON ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค. HTML์<script>
์์๋ก๋ถํฐ ์์ฒญ๋๋ ํธ์ถ์๋ ๋ณด์์ ์ ์ฑ ์ด ์ ์ฉ๋์ง ์๋๋ค๋ ์ ์ ์ด์ฉํ ์ฐํ ๋ฐฉ๋ฒ์ด๋ค.JSONP๋
GET
๋ฐฉ์๋ง ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฉฐ ์๋ฒ์์ ํจ๊ปJSONP
๋ฅผ ์ง์ํด์ค์ผ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค๋ ์ ์ฝ์ด ์๋ค.
@CrossOrigin
Java์ Servlet๊ธฐ๋ฐ HTTPํต์ ์ ์ฌ์ฉ๋๋
HttpServletResponse
ํด๋์ค๋ฅผ ํตํด ํค๋๊ฐ์Access-Control-Allow-Origin
๋ฅผ ์ค์ ํด์ฃผ๋ฉด ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค.Spring
์์๋ ์ฌ์ฉ์๊ฐ ๋ ํธ๋ฆฌํ๊ฒ@CrossOrigin
์ ๋ฉ์๋๋ ํด๋์ค(์ํฉ์ ๋ง๋ ์ค์ฝํ)์ ์ถ๊ฐํ๊ฒ ๋๋ฉด, CORS๋ฅผ ํ์ฉํ๊ฒ ์ฒ๋ฆฌํด์ค๋ค.@CrossOrigin
๋ง ๋ถ์ด๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋๋ฉ์ธ๊ณผ, ๋ชจ๋ ์์ฒญ๋ฐฉ์์ ๋ํด ํ์ฉํ๋ค๋ ๋ป์ด๋ค.@CrossOrigin
์ ์์ ์ค์ origins์ ๊ฐ์ผ๋ก url์ ์ถ๊ฐํ๋ฉด, ํ์ฉํ ๋๋ฉ์ธ์ ํ์ดํธ๋ฆฌ์คํธ ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
Last updated