VueJS์์ axios๋ฅผ ํ์ฉํ์ฌ get๋ฐฉ์์ผ๋ก api๋ฅผ ๋ฐ์์ค๋ ค๊ณ ์๋ํ๋๋ฐ ์๋์ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.
// console
Access to XMLHttpRequest at 'http://open.ev.or.kr:8080/openapi/services/EvCharger/getChargerInfo?serviceKey=0ZgyPnMBptn91BSdo5JXU4jvYNYB7puUnQzkXKP81T9PY67NeKiuOgIn%2baQmDk8zPmd9yhslatMa%2b7OGZFsEaw%3d%3d' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Api.vue?379d:22
Error: Network Error
at createError (createError.js?2d83:16)
at XMLHttpRequest.handleError (xhr.js?b50d:84)
xhr.js?b50d:177
GET http://open.ev.or.kr:8080/openapi/services/EvCharger/getChargerInfo?serviceKey=0ZgyPnMBptn91BSdo5JXU4jvYNYB7puUnQzkXKP81T9PY67NeKiuOgIn%2baQmDk8zPmd9yhslatMa%2b7OGZFsEaw%3d%3d net::ERR_FAILED
์ฝ๋๋ ์๋์ ๊ฐ๋ค.
๐ง ์ผ๋จ ์ด ๋ฌธ์ ๊ฐ ์ ๋ฐ์ํ๋์ง๋ถํฐ ์์๋ณด๊ธฐ์ํด CORS๊ฐ ๋ฌด์์ธ์ง๋ถํฐ ๋ณด์๋ฉด,,
CORS(Cross Origin Resource Sharing)๋ ๋๋ฉ์ธ๊ณผ ํฌํธ๊ฐ ๋ค๋ฅธ ์๋ฒ๋ก client๊ฐ ์์ฒญํ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ๋ณด์์ ์ด์ ๋ก API๋ฅผ ์ฐจ๋จํ๋ ๋ฌธ์ ์ด๋ค.
์๋ฅผ๋ค์ด client๋ 8080ํฌํธ๋ก, server๋ 9000ํฌํธ์ผ๋, ๋๋ ๋ก์ปฌ์์ ๋ค๋ฅธ์๋ฒ๋ก ํธ์ถํ ๋ ๋ฐ์ํ๋ค. (๋์ ๊ฒฝ์ฐ๋ ํ์์ ๊ฒฝ์ฐ๋ก ์์๋๋ค)
์ฆ, ๊ฐ๋จํ๊ฒ ๋์ผ์ถ์ฒ ์ ์ฑ ์ผ๋ก ๊ฐ์ ๋๋ฉ์ธ์ด ์๋๋ฉด ๋ฐ๋ server์์ ๋ชจ๋ client ์์ฒญ์ ๋ํ cross-origin HTTP๋ฅผ ํ๊ฐํด์ฃผ์ง ์๋๋ค๋ฉด ๋ธ๋ผ์ฐ์ ๋จ์์ ์์ ๊ฐ์ cors์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
ํ์ฌ, ๋ด๊ฐ ์์ฒญ๋ฐ๋ server๋ฅผ ์ปจํธ๋กคํ ์๋ ์๊ณ ๋ฐฑ๋จ์์ด ํ๋ก ํธ๋จ(Vuejs)๋ง ์ฌ์ฉํ๊ณ ์๋ค.
๊ทธ๋ ๊ธฐ๋๋ฌธ์ ์์ฒญ๋ฐ๋ server์์ ๋ชจ๋ ์์ฒญ์ ํ๊ฐํ๋ค๋์ง ๋ฐฑ๋จ์์ cors ํจํค์ง๋ฅผ ์ค์นํด์ ๋ฏธ๋ค์จ์ด๋ก ์ฒ๋ฆฌ๋ฅผ ํ๋ค๋์ง์ ๋ฐฉ๋ฒ์ผ๋ก๋ ํด๊ฒฐํ ์๊ฐ ์๋ค.
๐ ํ์ฐธ ๊ฒ์ํ๋ค๊ฐ ์๋์ ๋ธ๋ก๊ทธ๋ค์ ํตํด ํด๊ฒฐ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์๋ค.
https://genie247.tistory.com/116
https://b1tblog.com/2019/11/03/vue-axios/ (์ผ์ด ๋ฒ์ญ ํ์)
์ ๋๊ฐ์ ๋ธ๋ก๊ทธ๋ฅผ ๋ณด๋ฉด, ๊ณตํต์ ์ผ๋ก ํ๋ก์๋ฅผ ์ฌ์ฉํ์ฌ ํด๊ฒฐ๋ฒ์ ์ ์ํด์ฃผ๊ณ ์๋ค.
vue.config.js
๋ผ๋ ํ์ผ์ ๋ง๋ค๊ณ ๊ทธ ์์ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค. (๋ฃจํธ ๋๋ฉ์ธ๋ง ์ ๋๋ค)module.exports = {
devServer: {
proxy: 'http://open.ev.or.kr:8080'
}
};
this.$axios.get(`/openapi/services/EvCharger/getChargerInfo?serviceKey=${DECODE_KEY}`)
์ดํ ๋ค์ ์คํํ๋ฉด ์๋์ ๊ฐ์ด ๊ฒฐ๊ณผ๊ฐ์ ์ ๋ฐ์์ค๋๊ฒ์ ํ์ธํ ์ ์๋ค.