2์ฐจ ์คํ๋ฆฐํธ ๊ธฐ๋ฅ์ ์ฐ์ ํ๊ณ ๋ถ๋ฐฐํ๋ ๋ ! ์ด๋ฒ์ ๋ถ๋ฐฐ๋ฐ์ ๊ธฐ๋ฅ์ ํ์๊ฐ์
, ๋ด ์ ๋ณด ์์
์ด๋ค. ํ๋ก ํธ์๋ ํ์๋ค์ด ๊ฑฐ์ ๋งค์ผ ๊ฐ์ด ์๋ฒฝ์ ์๋ฉด์ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ ์๋ค. ํ์ฅ์ผ๋ก ํด์ผํ ์ผ์ด ๋ฌด์์ด ์์๊น๋ผ๋ ๊ณ ๋ฏผ์ ๊ฐ์ง๊ณ ์๋ค. ์๋ง ์ด๋ ๊ฒ 3์ฐจ, 4์ฐจ ์คํ๋ฆฐํธ๋ฅผ ๊ฑฐ์น๊ฒ ๋๋ค๋ฉด ์ง์ณ๋ฒ๋ฆฌ์ง ์์๊น๋ผ๋ ๊ฑฑ์ ์ด ์๊ธด๋ค. ์ด๋ฒ ์คํ๋ฆฐํธ์์๋ ๊ธฐ๋ฅ์ ์ต๋ํ ๋นจ๋ฆฌ ๋๋ด๊ณ ํ์๋ค ์ผ์ ์ค์ผ ์ ์๋ ๊ฒ๋ค์ ์ฐพ์๋ด์ผํ ๊ฒ ๊ฐ๋ค!
1์ฐจ ์คํ๋ฆฐํธ์์ ๊ฐ์ฅ ๋ถํธํ๋ ๋ถ๋ถ์ ์ง๋ผ๋ก ์ด์๊ด๋ฆฌ๋ฅผ ํ๊ณ ์ต์ข
ํ๋ก์ ํธ์ ์ฐจ๊ณก์ฐจ๊ณก ์์์ฌ๋ ค๋ QA๋ฅผ ํ ์ ์์๋ค๋ ์ ์ด์๋ค. QA๋ฅผ ํ๊ธฐ ์ํด์ ๊ผญ ํ๋ก ํธ์๋ํ์ด ๋ฐฑ์๋ํ๊ณผ ํ๋ฉด๊ณต์ ๋ก ๋ชจ๋ ์ผ์ด์ค๋ฅผ ๋ค๊ฐ์ด๋ด์ผํ๊ณ ์ด์๋ํ ๋ฆฌ์์ค ๋ญ๋น๊ฐ ํฌ๋ค๊ณ ์๊ฐํ๋ค. ๊ฒฐ๊ตญ, ํ๋ก ํธ์๋ํ๋ ๋ฐฐํฌ๋ฅผ ์ฐ์ ์ ์ผ๋ก ํด์ผ๊ฒ ๋ค!๋ผ๋ ์๊ฐ์ ํ๊ฒ ๋์๊ณ ๋ฐฐํฌ๋ฅผ ์งํํ๋ค. ๊ธฐ์กด github pages, netlify๋ก ๋ฐฐํฌ๋ฅผ ์งํํด๋ณด์์ง๋ง ํ๋ก์ ํธ ๊ท๋ชจ๊ฐ ๊ธฐ์กด๋ณด๋จ ํฌ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ์ ๊ฑฑ์ ๋๋ ๋ง์์ผ๋ก ์งํํ๋ค. ๋ฐฐํฌ๋ ๋ฌด์ฌํ ์ ๋์์ง๋ง SPA์ธ ์ฐ๋ฆฌ ํ๋ก์ ํธ๊ฐ netlify์์์ url๋ก ์ ๊ทผ ์ 404 ์ค๋ฅ๊ฐ ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ๊ฒฐ๊ตญ ํด๋น url์ ๋ํ html ํ์ผ์ด ์์ด ๋ฐ์ํ๋ ๋ฌธ์ ๋ค. (SPA๋ ํ์ผ์ด html์ด 1๊ฐ) ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ url๋ก ์ ๊ทผํ ๋ ๋ง๋ค index.html๋ก ๋ฆฌ๋ค์ด๋ ํธํ๊ฒ๋ /* /index.html 200
์ฝ๋๋ฅผ ์์ฑํ๊ณ , ํด๊ฒฐํ๋ค!
ํ์๊ฐ์ ๊ธฐ๋ฅ์ ์์ฑํ๋ค. api ์ฐ๋๊น์ง ๋ฌด๋ฆฌ์์ด ์งํ๋์ด ๋ด ์ ๋ณด ์์ ๋ ๋ฌด๋ํ๊ฒ ๊ตฌํ๋์ด๊ฐ๊ณ ์๋ ๋์ค, ๋ฌธ์ ๊ฐ ํ๋ ๋ฐ์ํ๋ค. ๋ฐ๋ก CORS ์ค๋ฅ! ์น ๊ฐ๋ฐ์๋ผ๋ฉด ํ๋ฒ์ฏค์ ๋ง๋์ผํ๋ CORS๋ฅผ ๋๋ฒ์งธ ์คํ๋ฆฐํธ์์ ๋ง๋๊ฒ ๋์๋ค. CORS ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๋ถ๋ถ์ ๋ด ํ๋ก์ง ์ด๋ฏธ์ง์ ๋ด ์ ๋ณด๋ฅผ GET ํด์จ ์ํฉ์์ ์ ๋ณด๋ฅผ ์์ ํ๊ณ , ์์ ๋ฒํผ์ ๋๋ ์ ๋ ๋ฐ์ํ๋ PATCH์์ ๋ฐ์ํ๋ค. ์ฐ์ , ๋ฐฑ์๋ํ์์ api ์์ ๋ถ๋ถ์ด ์๋ค๋ ๋ฉ์ธ์ง๋ฅผ ๋ฐ๊ณ ํ์ผ์ ๋ค๋ฃจ๋ FileReader ๊ฐ์ฒด์ ๋ํด ๊ณต๋ถํ๊ธฐ๋ก ๊ฒฐ์ !
CORS ์ด์๊ฐ ๋ค๋ฅธ ํ๋ก ํธ์๋ ํ์ api ํธ์ถ ์์๋ ๋ฐ์ํ๊ธฐ ์์ํ๋ค. ์ด๋ฒ์ PUT์์ ๋ฐ์ํ๊ณ ์์๊ณ , ๋ง์นจ ํ๋ก๊ทธ๋๋จธ์ค ๊ฐ์์ฅ์ผ๋ก ๊ฐ์ด ๋ชจ์ด๋ ๋ ์ด์๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๋ชจ์ฌ ๊ฐ์ด ํด๊ฒฐํด๋ณด๊ธฐ๋ก ํ๋ค.
ํ๋ก ํธ์๋ ๋ฐฐํฌ ํ ์๋ก์ด ๋ฌธ์ ์ ๋ด์ฐฉํ๋ค. ์ด๋ฒ์ ํฌ๋กฌ์์ ๋ฐ์ํ๋ http ์ด์์๋ค. ์ด๋ https์์ ๋ฐฐํฌ๋ ํ๋ก ํธ์๋์์ http๋ก ๋์ด์๋ ๋ฐฑ์๋๋ฅผ ํธ์ถํ๊ธฐ ๋๋ฌธ์ ๋ณด์์ ํฌ๋กฌ์์ ๋ง์์ ๋ฐ์ํ๋ ์ด์์๋ค. (๊ฒฐ๊ตญ CORS) ์ด ๋๊ฐ์ง ์ด์๋ก ์ธํด ํ๋ก ํธ์๋, ๋ฐฑ์๋ ๋๋ค ์ง๋ ๋๊ฐ๋๊ฒ์ ์ค๋จํด์ผํ๋ค.
ํ๋ฃจ์ข
์ผ CORS ์ค๋ฅ๋ก ์จ๋ฆํ๋ค...! ํ์ง๋ง ์ด๋ฅผ ํตํด CORS๋ฅผ ์๊ฒ ๋์์ผ๋ ์ถฉ๋ถํ ๊ฐ์น์์๋ค๊ณ ์๊ฐํ๋ค. ์ฐ์ ๋ฐฑ์๋ํ๊ณผ ์ค๋ฅ์ ๋ํด ํ์ธํ๋ฉด์ ์๋ฌธ์ ์ด ๋ช๊ฐ์ง ์์๋ค.
(1) ์ PATCH, PUT์ ํ๋๋ฐ OPTIONS ๋ฉ์๋๊ฐ ์์ฒญ์ด ์ค๋์?
ํ๋ก ํธ์๋ํ๊ณผ ๋ฐฑ์๋ํ ๋๋ค OPTIONS ๋ฉ์๋์ ๋ํด ์ฒ์ ์๊ฒ ๋์๋ค. http ํ๋กํ ์ฝ์ ์์ฒญ์ ๋ณด๋ด๋ ์ ํ์ simple request์ multi request๊ฐ ์๋ค. ์ด ์ค ์ฐ๋ฆฌ๊ฐ authorization ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ฌ์ฉ์ ํ ํฐ์ ํค๋์ ๋ฃ์ด ๋ณด๋ด๋ ๊ฒ์ multi request๋ค. multi request๋ฅผ ๋ณด๋ผ ๋ ์ด ์์ฒญ์ ๋ณด๋ด๋ ๋๋? ๋ผ๋ ์๋ฏธ๋ก OPTIONS ์์ฒญ์ ๋จผ์ ๋ณด๋ด๊ฒ ๋๋ค. ์ด์ ๋ํด์ ์๋ฒ ์ธก์์ ์ ์ ํ ์๋ต์ ํด์ฃผ๋ฉด PATCH, PUT, POST ๋ญ ๋ฑ๋ฑ์ multi request ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ค!
(2) ๋ชจ๋ ์์ฒญ์ ๋ํด ๋ฐ์ ์ ์๊ฒ๋ ์ค์ ํด๋์๋ค! ํ์ง๋ง ์ค๋ฅ๊ฐ ๋๋ค!
์ด ๋ด์ฉ์ ๋ฐฑ์๋ํ์์ ๊ณต์ ๋ฐ์๋ค. ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก๋ถํฐ ์ค๋ ๋ชจ๋ ์์ฒญ์ ๋ฐ์ง ์๊ฒ ์ค์ ํ๋ค. ํ์ง๋ง OPTIONS๋ฅผ ์ํด ์ฌ์ค์ ์ ํ์ง๋ง ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ์์๋ค. ์ด๋ ๊ฒฐ๊ตญ ์์ฒญ์ ๋ฐ๋ ๋ณด์์ชฝ?์์๋ ์ด๋ฅผ ์ฌ์ค์ ํ์ด์ผํ์ง๋ง, ์ฌ์ค์ ์ด ๋์ง ์์ ๋ฐ์ํ๋ ์ค๋ฅ์๋ค. ๊ฒฐ๊ตญ ์ฌ์ค์ ํ ํ๋ก์ ํธ๋ ๋ฌด์ฌํ ๋ค์ ์ง๋๋ฅผ ๋๊ฐ๊ฒ ๋์๋ค.
(3) ๊ทธ๋์ ํด๊ฒฐ๋ฒ์ด ๋ญ๋ฐ?
์ฐ์ , ํ๋ก ํธ์๋ ์ธก์์ ํ ์ ์๋ ๊ฒ์ ํ๋ก์๋ฏธ๋ค์จ์ด๋ฅผ ์ด์ฉํด ์์ ํ๊ฒ ์ฐํํด ์์ฒญํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋ฌธ์ ์ ๋ํ ํํผ์ธ๊ฒ ๋ฟ์ด๊ณ ์ด๋ฅผ ํด๊ฒฐํ๋ ๊ทผ๋ณธ์ ์ธ ๋ฐฉ๋ฒ์ CORS ์ ์ฑ
์ ์ฌ๋ฐ๋ฅด๊ฒ http๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ณ ๋์ค์ ์์์ง๋ง, ์ด๋ฒ CORS ์ด์๋ PATCH, PUT์ ์ ์ฑ
์ ๋ง๊ฒ ์ฌ์ฉํ์ง ์์์ ๋ฐ์ํ๋ค๋ ์ ์ด๋ค. http ํ๋กํ ์ฝ์ ๋ํด ์ ๋ชฐ๋๋ ํ๋ก ํธ์๋์ ๋ฐฑ์๋ ๋ชจ๋ ๊ณต๋ถ๊ฐ ํ์ํ ๋ถ๋ถ์ด๋ค.