2022. 3. 15. 00:20ใ๊ฐ๋ ์ ๋ฆฌ ์์ ์ค/๋ฌธ์ ์ ๋ฆฌ
โ ๏ธ ๋ฌธ์ ๋ฐ์!
๋ถ๋ช axio๋ ์ค์น ํ๊ณ , API๋ ๋ง๋ค์๊ณ , router ๊ธฐ๋ฅ๋ ๋ฃ์ด์คฌ๋๋ฐ, ์ Back End ์ Front End๋ ๋ง๋์ง ๋ชปํ๊ณ , ์ด๋ฌ๊ณ ์์๊น์?
๐ค ์์ธ ๋ถ์
๊ณฐ๊ณฐํ ์๊ฐ ํด๋ณด๋ ์ฃผ๋ํ๋์ ๋ ํ๋๋ฅผ ๋น ๋จ๋ฆฐ ๊ฒ์ด์์. ๋ฐ๋ก Vue์ URL ์ค์ ์ ํ์ง ์์ ๊ฒ์ด์์.
axios์ Back End URI๋ ์ค์ ํด ๋๊ณ , ์ ์ ์ ๋์ฌ๋ฅผ ๋นผ ๋จน์์ผ๋ ๋น์ฐํ Front End๋ '๊ทธ๋์ ์ด๋๋ก ๊ฐ๋ผ๋ ๊ฑฐ์ง?'๋ฅผ ํ๊ณ ์๋ ๊ฒ์ด์์.
์ผ๋จ ๊ทผ๋ณธ์ ์ธ ์์ธ์ ์ฐพ๊ธฐ ์ํด API ์ชฝ์ ํ๋์ฝ๋ฉ์ ํด๋ณด๊ธฐ๋ก ํ ๊ฒ์ด์์.
์ด๋ ๊ฒ ํด ์ฃผ๋ Front๊ฐ Back End๋ฅผ ๋ง๋๋ฌ ๊ฐ๊ธด ํ๋๋ฐ, Back End๊ฐ ๋งค๋ชฐ์ฐจ๊ฒ ๊ฑฐ์ ํ ๊ฒ ๊ฐ์ ๊ฒ์ด์์. ๋ฐ๋ก CORS Error๊ฐ ๋ฐ์ํ ๊ฒ์ด์์.
์ด๋ฒ์๋ vue.config.js๋ฅผ ์ข ์์ ํด ๋ณด๊ธฐ๋ก ํ ๊ฒ์ด์์.
ํ์ง๋ง ๋ฌธ์ ๊ฐ ๊ณ์ ๋ฐ์ ๋๊ณ ์๋ ๊ฒ์ด์์ ๐ฅฒ
๐ป ๋ฌธ์ ํด๊ฒฐ!
์์ ๋ฌธ์ ๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฌธ์ ๋๋ฌธ์ ๋ฐ์ํ ๊ฒ์ด์์.
๋จผ์ ์ฃผ๋ํ๋์ด ์ฝ๋ฉํ `devInquryList.vue`์์๋ axios๋ฅผ ํตํด Back End์๊ฒ Get์ผ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋๋ฐ,
Data() ์์ Back End์๊ฒ ๋ณด๋ผ ํ๋ผ๋ฏธํฐ ๋ณ์๋ค์ ์์ ๊ฐ์ด ๋ง๋ค์ด ์ฃผ๊ณ ,
searchList() ๋ผ๋ ๊ณณ์์ devInqrutyList์ ์์์ ์ค์ ํ ํ๋ผ๋ฏธํฐ๊ฐ๋ค์ ๋ฃ๊ณ , ํธ์ถ์ ํ๊ฒ ๋๋ฉด
axios๋ฅผ ์ค์ ํ๋ ๊ณณ์ ์์นํ ํด๋น Method์ ํ๋ผ๋ฏธํฐ๊ฐ์ด ์ ๋ฌ๋๋ฉด์ ๋์ํ๋ ๊ฒ์ด์์.
์ฃผ๋ํ๋์ ์์์ 'get'์ ํ๋๋ฐ, `data: params`๋ฅผ ํด์ฃผ๊ฒ ๋๋ฉด Request Body์ ๊ฐ์ ๋ฃ์ด ์์ฒญ์ ๋ณด๋ด๊ฒ ๋๋ ๊ฒ์ด์์.
Get Method๋ ์์ ๊ฐ์ด URL์ ํตํด์ ์์ฒญ์ ์ ๋ฌํ๋ Query String ๋ฑ์ ์ด์ฉํด์ผ ํ๋๋ฐ, Request Body์๋ค๊ฐ ๊ณ์ ๊ฐ์ ๋ฃ์ด์ ๋ณด๋ด๋ ค๊ณ ํ๋ ๊ฒ์ด์์.
๋ฌผ๋ก ์กฐํ๋ Get์ ํตํด์ ์์ฒญํ๋ ๊ฒ์ด ๋ง๊ณ , ํด๋น Losic์ Get์ ๋ง๊ฒ ์์ ํ๋ ๊ฒ์ด ๋ง์ง๋ง, ์ผ๋จ ์ด๋๋ก ์งํ์ ํด ๋ณด๋ ค๊ณ ํ๋ ๊ฒ์ด์์.
Back End์์๋ ์๋๋ Get ๋ฐฉ์์ผ๋ก ์ค์ ์ ํด ๋์๋๋ฐ, ์์ ๊ฐ์ด Pos๋ก ๋ณ๊ฒฝ์ ํด ์ค ๊ฒ์ด์์.
๋๋ฒ์งธ ๋ฌธ์ ๋ ๋ฐ๋ก CORS Error์ธ ๊ฒ์ด์์.
WebMvcConfigurer๋ฅผ ๊ตฌํํ Class๋ฅผ ํ๋ ๋ง๋ค๊ณ , addCorsMappings๋ผ๋ Method๋ฅผ Overrideํ์ฌ ์ํฉ์ ๋ง๊ฒ ์ค์ ์ ํด ์ฃผ๋ฉด ๋๋๋ฐ, addMapping์ ํตํด Pattern ํ์์ผ๋ก URL์ ์ค์ ํ์ฌ ํด๋น URL์ ๋ํด CORS๋ฅผ ์ ์ฉํ ์ ์์ผ๋ฉฐ,
addowedOrigins๋ฅผ ํตํด ์์ ๊ณต์ ๋ฅผ ํ๋ฝํ Origins๋ฅผ ํ์ฉํ ์ ์๋๋ฐ, ์ฝ๊ฒ ๋งํด Back End Server์ ์ ์์ ํ์ฉํ Client์ URL์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ ๊ฒ์ด์์.
๋ง์ง๋ง allowedMethod๋ Client์์ ์์ฒญ์์ ์ฌ์ฉํ HTTP Method ์ค์ ํ์ฉํ ๊ฒ๋ง ๊ณจ๋ผ์ ํ์ฉ์ ์์ผ์ค ์ ์๋ ๊ฒ์ด์์.
์ด๋ ๊ฒ ๋ชฉ๋ก์ด ์ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ ๊ฒ์ด์์!