2019/09/25 TIL(Today I Learn) - ํฌ๋ก์ค ๋๋ฉ์ธ ์์ฒญ CORS
- September 25, 2019
- 2 minute read
์ผ๋ง์ ์ฝ๋์คํ
์ด์ธ ์ธ์
์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋ค ์ ์๋ ๊ฒ๋ค์ ์๋ ค์ฃผ์๋ค.
์น ์ดํ๋ฆฌ์ผ์ด์
๋ถํฐ ๋จธ์ ๋ฌ๋, ์๋์ด๋
ธ๊น์ง ์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ํ ์ ์๋ ๊ฒ์ด ๋ฌด๊ถ๋ฌด์งํ๋๋ฐ, ๋๋ ๊ทธ ์ค์์ ํด๋ก๋ฐ ์ต์คํ
์
์ ๋ง๋ค์ด ๋ณด๊ณ ์ถ์๋ค.
์์ ๋ถํฐ ์๊ฐํด๋ ๊ฒ ์์ด์ ๊ณต๊ณต ๋ฐ์ดํฐ ํฌํธ์ ๋ค์ด๊ฐ ๋ฌด์์ ๋ฒ์ค API ์ฌ์ฉ ์ ์ฒญ์ ํ๊ณ , XMLHttpRequest๋ก ์๋ฃ๋ฅผ ์์ฒญํ๋ ํ ์คํธ๋ฅผ ์งํํ๋ค. ๊ทธ๋ฆฌ๊ณ CORSCross Origin Resource Sharing ํฌ๋ก์ค ๋๋ฉ์ธ ์์ฒญ ์ค๋ฅ๋ฅผ ๋ง๋๊ฒ ๋๋ค.
๊ฐ๋จํ ์ค๋ช ํ์๋ฉด, ๋ด ์นํ์ด์ง์ API์ ์๋ฒ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์๋ฃ๋ฅผ ์์ฒญํ ์ ์๋ค๋ ๊ฒ์ด๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค ์คํ์๋ ๋ค๋ฅธ ์ถ์ฒ(์๋ฒ)๋ก์ ์์ฒญ์ ํ์ฉํ์ง ์๋ ๋์ผ ์ถ์ฒ ์ ์ฑ Same-Origin Policy์ด ์๋๋ฐ, ์ด ์ ์ฑ ์ด API๋ฅผ ์ฌ์ฉํ๋ ๋ฐ ๋ถํธํจ์ ์ ๋ฐํ๋ค๋ณด๋ ํฌ๋ก์ค ๋๋ฉ์ธ์ ํ์ฉํ๋ CORS ์ ์ฑ ์ด ์ถ๊ฐ๋๋ค๊ณ ํ๋ค. ํ์ง๋ง ๊ทธ๋ผ์๋ ๊ณต๊ณต API ์๋ฃ๋ ์์ฒญํ ์ ์์๋ ๊ฑฐ๋ค.
์ด๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ผ๋ก API๋ฅผ ์ ๊ณตํ๋ ์๋ฒ ์ชฝ์์ ๋ชจ๋ ๋๋ฉ์ธ์ ํ์ฉํ๋๋ก '์๋ต ํค๋'๋ฅผ ์ถ๊ฐํ ์ ์์ง๋ง, ๊ณต๊ณต API์ ์๋ฒ๋ฅผ ์์ ํ ์๋ ์๊ธฐ์ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด ์๋์๋ค.
Ajax๋ฅผ ํตํ ์ฐํ ๋ฐฉ๋ฒ์ธ xdomainajax ๋ผ์ด๋ธ๋ฌ๋ฆฌ์, AJAX Cross Origin ํ๋ฌ๊ทธ์ธ๋ ์ฌ์ฉํด๋ดค์ง๋ง ์ฑ๊ณตํ์ง ๋ชปํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ณ์ํด์ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ ์ํด ๊ฒ์์ ํ๋ค๊ฐ ๊ณต๊ณต ๋ฐ์ดํฐ ํฌํธ์ ์ง๋ฌธ๊ธ์ ๋ณด๊ฒ๋์๋ค. https://www.data.go.kr/information/QNA_0000000000014129/qna.do
๊ด๋ฆฌ์ ๋ต๋ณ์ ์๋ฃ์ ๋ฐ๋ฅด๋ฉด ๋ฌธ์๊ฐ API ์๋ฒ์ ์ง์ ํต์ ์ ํ์ง๋ ๋ชปํ๊ณ , ๋์ผ ๋๋ฉ์ธ ๋ด ์๋ฒ๊ฐ API ์๋ฒ์ ํต์ ์ ํ๋ฉฐ ์๋ฃ๋ฅผ ๋ฌธ์์ ๋๊ฒจ ์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐํด์ผ ํ๋ค๋ ๋ด์ฉ์ด์๋ค.
๊ฒฐ๋ก
- ๊ณต๊ณต API๋ Ajax๋ jQuery๋ก ์ฐํํด์ ์ฌ์ฉ ๋ถ๊ฐ
- ๋์ผ ๋๋ฉ์ธ ๋ด ์๋ฒ๋ฅผ ํตํด API ์๋ฒ์ ํต์ ํ ์ ์์
- ์ฆ, ๊ณต๊ณต API๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์๋ฒ ์ฌ์ด๋ ์ธ์ด๋ฅผ ์์์ผ ํจ
- ๋ด ํ ์ดํ๋ก์ ํธ๋ ๊น๋ง๋ํ ์ค๋ ๊ฑธ๋ฆด ๊ฒ ๐
๊ฒฐ๊ตญ ๋๋ node.js๋ฅผ ๋ฐฐ์์ ์๋ฒ๋ฅผ ๋ง๋ ๋ค API๋ฅผ ์ด์ฉํ๊ธฐ๋ก ํ๋ค.
๋น์ฅ ์คํ์ ํด๋ณด๊ณ ์ถ์ด node.js๋ก ๊ณต๊ณต api ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๊ณต์ ํ ํฌ์คํ
์ ๋ณด๊ณ ๋ฐ๋ผ ํด๋ดค๋ค.
https://codevkr.tistory.com/34
โฌ๏ธ ๊ฒฝ๊ธฐ๋ ์ ๋ฅ์์กฐํ์๋น์ค API์์ ์ขํ๊ธฐ๋ฐ ๊ทผ์ ์ ๋ฅ์๋ฅผ ์กฐํํ ๊ฒฐ๊ณผ๋ค.
๋ ์ฝ์ด๋ณผ ๊ฑฐ๋ฆฌ & ์ฐธ๊ณ ๋ฌธ์
- localhost์์๋ CORS ์์ฒญ์ด ์๋ ์ ์๋จ ๋ด์ฉ ์ฐธ๊ณ
https://www.zerocho.com/category/NodeJS/post/5a6c347382ee09001b91fb6a- HTTP ์ ๊ทผ ์ ์ด (CORS)
https://developer.mozilla.org/ko/docs/Web/HTTP/Access_control_CORS- AJAX Cross Origin ์ฌ์ฉ ๋ฐฉ๋ฒ
https://infotake.tistory.com/88