ํ์ฌ ์งํ์ฒ ์ฑ์ ํ๋ก ํธ์๋๋ Vuejs ๊ธฐ๋ฐ์
๋๋ค.
๊ทธ๋ฐ๋ฐ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๊ฐ ๊ธ์ฒด๋ฅผ ํ์ฌ ์ฌ๋ฌ๋ถ์ด ๋น ๋ฅด๊ฒ api๋ฅผ ์ถ๊ฐํ๊ณ , ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํฉ๋๋ค. ๐ฑ
๋คํํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์๊ฒ ๋ฌธ์ํด๋ณธ ๊ฒฐ๊ณผ, Vuejs๋ฅผ ์์ง ๋ชปํ๋๋ผ๋ ์ถฉ๋ถํ ๊ตฌํํ ์ ์๋ค๊ณ ํฉ๋๋ค. ๐ค
cd frontend
npm install
npm start
- frontend ๋๋ ํ ๋ฆฌ์์ ์ํํด์ผ ํฉ๋๋ค.
- localhost:8081 ๋ก ์ ๊ทผ ๊ฐ๋ฅํฉ๋๋ค.
- 1. ๋ฐฑ์๋ ์๊ธ ์กฐํ api๋ฅผ ํ๋ก ํธ์๋์์ ์ฌ์ฉํ ์ ์๊ฒ ์ฐ๋
- 2. ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ด์ฉํด ํ์ฌ ์๊ฐ์ ์ฌ์ฉ์๊ฐ ๋ณด๊ธฐ ํธํ ํ์์ผ๋ก ๋ฌธ์์ด ๋ ๋๋ง
- 3. validator๋ฅผ ๊ตฌํํด, form์ ์ ํจ์ฑ์ ๊ฒ์ฌ
- 4. ๊ธธ์ฐพ๊ธฐ๋ฅผ ์ํด ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ ์ด์ฉํด ๊ฒ์๊ฒฐ๊ณผ๋ฅผ ๋ถ๋ฌ์ค๋ ํธ๋ค๋ฌ๋ฅผ ๊ตฌํ
๋ฐฑ์๋์์ ์ถ๊ฐ๋ก ๊ตฌํํ๋ ์๊ธ์กฐํ์ api๋ฅผ ์ง์ ํ๋ก ํธ์๋์ ์ฐ๋ํด์ผ ํฉ๋๋ค.
-
frontend/src/api/modules/path.js
์ ๋ฐฑ์๋์์ ๊ตฌํํ path ๊ฒ์ api์ endpoint๋ฅผ ์ถ๊ฐํฉ๋๋ค.
const PathService = {
get() {
return ApiService.get(``)
}
}
- ์ apiService๋ฅผ ์ฌ์ฉํ๋ ๊ณณ์
frontend/src/store/modules/path.js
์ ๋๋ค. - ์ฌ๋ฌ๋ถ์ด api๋ฅผ ์ถ๊ฐํ๊ณ , ํจ๊ป ์
๋ฐ์ดํธ ํ ๋ถ๋ถ์
actions
์PathService.get()
๋ถ๋ถ์ ํ๋ผ๋ฏธํฐ์ ๋๋ค.
const actions = {
async searchPath({ commit }, {}) {
return PathService.get().then(({ data }) => {
commit('setPath', data)
})
}
}
- api ์์ฒญ์ด ์ฑ๊ณตํ๋ฉด, ํ๋ก ํธ์๋์์ ์๋์ผ๋ก ๋ณ๊ฒฝ๋ ๊ฐ์ ํ์ธํ๊ณ , ๋ ๋๋ง์ด ๋ฐ์๋ฉ๋๋ค.
frontend/src/store/modules/path.js
์ ๊ตฌํ๋ ๊ฐ์ฒด๋ค์ ์ญํ ์ ์๋์ ๊ฐ์ต๋๋ค.- actions - api ๋น๋๊ธฐ ์์ฒญ
- mutations - ์ ์ญ์ผ๋ก ๊ด๋ฆฌํ ์ํ ๋ฐ์ดํฐ ๋ณ๊ฒฝ
- getters - ์ปดํฌ๋ํธ๋ค์์ ํน์ ์ํ๊ฐ์ ์กฐํํ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ getter
- path์ departureTime form์ validation์ ๊ตฌํํ๊ธฐ
- ๊ณตํต์ ์ผ๋ก๋ ๋น ๊ฐ์ด ์๋์ง ํ์ธํ๋ ๋ก์ง์ด ํ์ํฉ๋๋ค.
- path form์์ ํ์ํ ์ ํจ์ฑ ๊ฒ์ฌ
- source: ์ ํจํ Id ๊ฐ์ธ์ง ๊ฒ์ฌ (์๋ฅผ ๋ค๋ฉด, ์์ ์ ์, ์์ฐ์ ๋ฑ)
- target: ์ ํจํ Id ๊ฐ์ธ์ง ๊ฒ์ฌ (์๋ฅผ ๋ค๋ฉด, ์์ ์ ์, ์์ฐ์ ๋ฑ)
- departureTime form์์ ํ์ํ ๊ฒ์ฌ
- dayTime: '์ค์ ' or '์คํ'์ธ์ง ๊ฒ์ฌ
- hour: ์ซ์ ํ์ , 1~12 ์ฌ์ด์ ์ ์์ธ์ง ๊ฒ์ฌ
- minute: ์ซ์ ํ์ , 0~60 ์ฌ์ด์ ์ ์์ธ์ง ๊ฒ์ฌ
- ํ์ฌ ๋ค๋ฅธ ํ์ด์ง form๋ค์ validation์ด
frontend/src/utils/validator.js
๊ตฌํ๋์ด์์ต๋๋ค. - path ๊ฒ์์ ์ํ form๊ณผ, departureTime form์ validation์ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
- validation์ Array์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ์ value๋ฅผ checkํ ํจ์๋ฅผ ์๋์ ๊ฐ์ด ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค.
stationName: [(v) => !!v || '์ด๋ฆ ์
๋ ฅ์ด ํ์ํฉ๋๋ค.', (v) => v.length > 0 || '์ด๋ฆ์ 1๊ธ์ ์ด์ ์
๋ ฅํด์ผ ํฉ๋๋ค.'],
path
,departureTime
form ๋ชจ๋ validator๋ง ๊ตฌํํ๋ฉด ์๋์ผ๋ก ์ ์ฉ๋๊ฒ๋ ์ค์ ๋์ด์์ต๋๋ค. ๋ฐ๋ผ์ validator๋ง ๊ตฌํํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
const validator = {
path: {
source: [],
target: []
},
departureTime: {
dayTime: [],
hour: [],
minute: []
}
}
- ํ์ฌ์๊ฐ์ ์๋ format์ฒ๋ผ ๋ณด์ด๋๋ก,
frontend/src/views/path/pathPage.vue
์ 208line์ ์๋getCurrentTime
์ ๊ตฌํํฉ๋๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ์ฌ ์๊ฐ์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์ธ์.
- ์ฌ์ฉ์์
getCurrentTime() {
//ํ์ฌ ์๊ฐ์ ๊ฐ์ ธ์, ์๋์ ๊ฐ์ ํํ์ ๋ฌธ์์ด๋ก ๋ง๋ค ์ ์๋๋ก ํด์ฃผ์ธ์.
return '์คํ 17:08'
}
- ์๊ธ์กฐํ๋ฅผ ์ํด ๊ฒ์ ๋ฒํผ์ ๋๋ ์ ๋ ์คํ๋๋ ์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ๊ตฌํํฉ๋๋ค.
frontend/src/views/path/PathPage.vue
์์onSearchResult()
๋ฅผ ๊ตฌํํฉ๋๋ค.onSearchResult()
๋ ์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ ๋ฐ์ ๊ฐ์ ์ด์ฉํด ์๋ฒ์ ์์ฒญํ๊ณ , response๋ฅผ ๋ฐ์์ค๋ ๋ฉ์๋์ ๋๋ค.- try ~ catch ๋ฌธ์์ try ๋ถ๋ถ์ ๊ตฌํํฉ๋๋ค.
- api ์์ฒญํ๋ ๋ฉ์๋๋
this.searchPath()
์ ๋๋ค. - ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์ถ๋ฐ์ญ, ๋์ฐฉ์ญ์ ๊ฐ์ ์๋์ผ๋ก
this.path
์ ์ ์ฅ๋ฉ๋๋ค.
// this.path๋ ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
path: {
source: sourceId,
target: targetId,
type: PATH_TYPE
}
// this.PATH_TYPE์ ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
PATH_TYPE: {
DISTANCE: 'DISTANCE',
DURATION: 'DURATION',
ARRIVAL_TIME: 'ARRIVAL_TIME'
}
- ์ฌ์ฉ์์ ์
๋ ฅ์ ๋ฐ์ ์๊ฐ์ ๋ํ ๊ฐ์
this.departureTimeView
์ ์ ์ฅ๋ฉ๋๋ค.
- ๋น ๋ฅธ ๋์ฐฉ์๊ฐ์ ๊ตฌํ๋ ๊ฒฝ์ฐ
YYYYMMDDHHmm
ํํ๋ก time์ ํ๋ผ๋ฏธํฐ๋ก ๋ณด๋ด์ฃผ์ธ์. - ์ฌ์ฉ์์
const hour = this.departureTimeView.hour
const minute = this.departureTimeView.minute
const time = YYYYMMDDHHmm
//์ต๋จ ๊ฑฐ๋ฆฌ ๋๋ ์ต์ ์๊ฐ์ ๊ตฌํ๋ ๊ฒฝ์ฐ
this.searchPath({ ...this.path })
// ๋น ๋ฅธ ๋์ฐฉ์ ๊ตฌํ๋ ๊ฒฝ์ฐ
this.searchPath({ ...this.path, time })
...
์ผ๋ก ์์ฑํ๋ ๊ธฐ๋ฒ์ Spread Operator๋ผ๋ ๊ธฐ๋ฒ์ ๋๋ค.