vanilla javascript๋ก ์๋ง์กด์ ์บ๋ฌ์ UI์ ๊ฒ์ ์๋์์ฑ UI ๊ตฌํํ๊ธฐ
์ฌ์ฉ ๊ธฐ์ : html, css, javascript, express, node.js
- ํ์ดํ ๋ฒํผ์ ํด๋ฆญ ์ 1์นธ์ฉ ์ปจํ ์ธ ๋ฅผ ์ด๋ํ ์ ์๋ค
- ํ์ด์ง๋ค์ด์ ์ ํด๋ฆญ ์ ํด๋น ์ปจํ ์ธ ๋ก ์ด๋ํ ์ ์๋ค
- infinite carousel ๊ตฌํ(์ต์ ์ผ๋ก on/off)
- ๊ฒ์์ด ์๋์์ฑ (์ง์ ํค์๋ : bicycle, javascript, iphone)
- ๊ฒ์์ด ์ ๋ ฅ ์ ์๋์์ฑ, ๋ฐฉํฅํค ๋๋ ๋ง์ฐ์ค๋ก ์ ํ ๊ฐ๋ฅ
- ์ต๊ทผ ๊ฒ์์ด ์ ์ฅ
- ์๋์์ฑ ๊ฒ์์ด๋ฅผ ์ ํ ํ ์ํฐํค ์ ๋ ฅ or ๋ง์ฐ์ค๋ก ํด๋ฆญ ์ ์ต๊ทผ๊ฒ์์ด๋ก ์ ์ฅ
- ์๋์์ฑ ์ง์ ํค์๋ ์ด์ธ์ ํค์๋๋ ๊ฒ์ ์ ์ต๊ทผ๊ฒ์์ด๋ก ์ ์ฅ
- ์ ๋ ฅ์ฐฝ ํฌ์ปค์ค ์ ์ต๊ทผ ๊ฒ์์ด ํ์
- ์ต๊ทผ ๊ฒ์์ด ๋ชฉ๋ก์์๋ ๋ฐฉํฅํค ๋ฐ ๋ง์ฐ์ค๋ก ํค์๋ ์ ํ ๋ฐ ๊ฒ์ ๊ฐ๋ฅ(์ต๊ทผ ๊ฒ์์ด ์์ ์ ๋ฐ์ดํธ)
- ํฌ๊ฒ ์บ๋ฌ์
๊ณผ ์๋์์ฑ 2๊ฐ์ ์ปดํฌ๋ํธ๋ก ๋๋๊ณ ๊ฐ๊ฐ ํ์ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ๋ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑํ์์ต๋๋ค.
- ์บ๋ฌ์ : StateManager, Carousel, Pagination
- ์๋์์ฑ : StateManager, SearchBarUI, SuggestionUI, RecentKeywordsUI
- ์๊ตฌ์ฌํญ(๊ธฐ๋ฅ)์ ๋ณํ์ ๋ฐ๋ผ ์ ์ ์์ ์ผ๋ก ๋ณํ์ ๋์ํ ์ ์๋๋ก ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ๋๋ฐ์ ์ด์ ์ ๋ง์ถ์์ต๋๋ค.
- ex) pagination๋ง ํ์ํ๋ค๊ฑฐ๋, suggestion์ ์๋ ๊ฒ์๋ฐ๊ฐ ํ์ํ๋ค๊ฑฐ๋ ๋ฑ
- pagination ๋ฐ carousel์ด stateManager๋ฅผ ์ฃผ์ ๋ฐ์์ ๊ตฌ๋ ํฉ๋๋ค.
- event trigger > setState > updateState > notify > render ์ ํ๋ฆ์ผ๋ก ๊ตฌํํ์ต๋๋ค.
- searchBarUI, suggestionUI, recentKeywordsUI๊ฐ stateManager๋ฅผ ์ฃผ์ ๋ฐ์์ ๊ตฌ๋ ํฉ๋๋ค.
- event trigger > setState > process__mode > updateState > notify > render์ ํ๋ฆ์ผ๋ก ๊ตฌํํ์ต๋๋ค.
- ์ฒ์์๋ Carousel ํด๋์ค 1๊ฐ๋ก๋ง ๊ตฌํํ์ผ๋, Pagination์ ์ฌ์ฌ์ฉ ํ ์ ์๊ฒ๋ ๋ถ๋ฆฌํ๊ณ ์ ํจ.
- ๋จ์ํ 2๊ฐ์ ํด๋์ค๋ก ๋ถ๋ฆฌํ๋๋ ์ํธ ํธ์ถ๋์ด์ ์ฌ์ฌ์ฉ๋ ๋ถ๊ฐ๋ฅํ๊ณ ๋ถ๋ฆฌํ ์๋ฏธ๊ฐ ์์.
- ๋ฐฉ๋ฒ์ด ์์๊น ๊ณ ๋ฏผํ๋ ์ค pagination๊ณผ carousel์ด ํ๋ ์ผ์ด '๋ช๋ฒ์งธ ์นด๋๋ฅผ ๋ณด์ฌ์ค ์ง'๋ฅผ ์ ํด์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์์ ๊นจ๋ฌ์.
- ๊ทธ๋ผ ์ด **๊ณตํต์ ์ญํ ์ ๋ถ๋ฆฌํ๋ฉด ๋ ๋ฆฝ์ ์ธ ํด๋์ค๊ฐ ๋์ง ์์๊น?**๋ผ๋ ์๊ฐ์ด ๋ฌ.
- ์ํ๋ฅผ ๊ด๋ฆฌํ๋ stateManager์ rendering์ ๋ด๋นํ๋ pagination๊ณผ carousel ํด๋์ค๋ก ๋ถ๋ฆฌํจ.
model๊ณผ view๋ฅผ ๋ถ๋ฆฌํจ์ผ๋ก์จ ๋ณ๊ฒฝ์ด ์๋๋ผ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ์ํฅ์ด ์๋ ๊ตฌ์กฐ๋ฅผ ๊ตฌํ.
- stateManager๋ก ์ํ๋ฅผ ๋ถ๋ฆฌํ๊ณ ๋๋ ์ด๋ฒคํธ ๋ฐ์ > ์ํ ๋ณ๊ฒฝ > ๋ ๋๋ง์ผ๋ก ์ด์ด์ง๋ ๋ฉ์์ง ํ๋ฆ์ ๊ตฌํํด์ผํ์.
- ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ ๋, ์ํ๊ฐ ๋ฐ๋๊ณ , ๋ ๋๋ง์ด ๋๋ ํ๋ฆ์ ๋ฆฌ์กํธ์ ๋ฎ์์๊ณ ,
- ์ํ์ ๋ณ๊ฒฝ์ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ์๋ฆฌ๋ ๋์์ MVVM๊ณผ ๋ฎ์์๋ค๋ ์๊ฐ์ด ๋ค์์.
MVVM์ ์ต์ ๋ฒํจํด(pubsubํจํด)์ ๊ณต๋ถํ๊ณ , ๋ฆฌ์กํธ์ ๋ฉ์์ง ์ ๋ฌ๋ฐฉ์์ ๋น์ทํ๊ฒ ๋ฐ๋ผํด๋ณด๊ธฐ๋ก ํจ.
- publisher ํด๋์ค๋ฅผ ๊ตฌํํด์ ์ํ๋ณ๊ฒฝ์ด ๋ฐ์ํ๋ฉด subscriber์ render๋ฉ์๋๋ฅผ ํธ์ถํ๊ฒ๋ ๊ตฌํ.
- subscriber๋ publisher๋ฅผ ๊ตฌ๋ ํ๊ณ , ์ด๋ฒคํธ ํธ๋ค๋ฌ์์ publisher.setState๋ฅผ ํธ์ถํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝ.
- subscriber๋ render๋ฉ์๋๋ฅผ ๊ตฌํํ๊ณ render๋ฉ์๋ ์์์ DOM์กฐ์.
handleBtnClick > setState > notify > render์ ํ๋ฆ ๊ตฌํ
- ์๋์์ฑ์ ๊ฒฝ์ฐ ๋ง์ ์ด๋ฒคํธ์ ๋ง์ ์ปดํฌ๋ํธ๋ก ์ธํด ๋ถ๊ธฐ๊ฐ ๋ง์์ง ๊ฒ์ผ๋ก ์์๋จ.
- ๋ฉ์์ง์ ํ๋ฆ์ ๊ฐ๊ฒฐํ๊ฒ ํ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํจ.
- ์ํ์ฝ๋ฉ ๋ฆฌ์กํธ ๊ฐ์์์ mode๋ฅผ ํตํด ๊ธฐ๋ฅ์ ๊ตฌ๋ถํ๋ ๊ฒ์ ์ฐฉ์ํด ๊ธฐ๋ฅ๋ณ๋ก mode๋ฅผ ๊ตฌ๋ถํ๊ธฐ๋ก ํจ.
- ์ด๋ฒคํธ ๋ฐ์ ์ ์ํํด์ผ ํ ๋์(๊ธฐ๋ฅ)์ recent, suggest, select, submit 4๊ฐ์ง mode๋ก ๊ตฌ๋ถํจ.
mode๋ก ๊ตฌ๋ถํ๋ '๋ถ๊ธฐ'๋ฅผ ๋ณด๋ค ๋ช ์์ ์ผ๋ก ์ธ์งํ ์ ์๊ณ ๋์ํ๋ฆ์ ํ์ ํ๊ธฐ ์์ํด์ง.
view๋ฅผ ๊ธฐ์ค์ผ๋ก ์ญํ ์ ๋ถ๋ฆฌํ๊ณ , ๊ทธ ์ญํ ์ ๋ด๋นํ ์ปดํฌ๋ํธ๋ฅผ ์ค๊ณํ๊ณ , ์ปดํฌ๋ํธ ์ฌ์ด์ ์์กด์ฑ์ ๋ฎ๊ฒ ๋ง๋๋ ๋ฒ์ ๊ณ ๋ฏผํ์์ต๋๋ค.
model๊ณผ view๋ฅผ ๋ถ๋ฆฌํ๊ณ , ์ต์ ๋ฒํจํด์ ํ์ฉํ๋ฉด ์์กด์ฑ์ด ๋ฎ์ ๊ตฌ์กฐ๋ฅผ ์ค๊ณํ ์ ์๋ค๋ ์ ์ ๋ฐฐ์ ์ต๋๋ค.
๊ฒ์ ์๋์์ฑ์ ๊ฒฝ์ฐ ์ด๋ฒคํธ ์ข ๋ฅ๊ฐ ๋ง๋ค๋ณด๋ ์ด๋ ํ๋ถ๋ถ์ ์์ ํ๋ฉด ํ ์คํธ๋ฅผ ํด์ผํ๋ ์๋๋ฆฌ์ค๋ ๋ง์์ต๋๋ค.
![]() |
|---|
| <submit ๊ธฐ๋ฅ์ ํ ์คํธ ์๋๋ฆฌ์ค> |
์ด๋ ๋ค๋ณด๋ ๋ฐ๋ณต์ ์ผ๋ก ํ ์คํธํ๋๊ฒ ๋ฒ๊ฑฐ๋ก์ด ์ผ์ด๋ผ๋ ์๊ฐ์ด ๋ค์๊ณ , ''์ด๋ด ๋ ํ ์คํธ์ฝ๋๊ฐ ์๋ค๋ฉด ํธํ๊ฒ ๊ตฌ๋!''๋ผ๋ ์๊ฐ์ด ์ ๋ก ๋ค์์ต๋๋ค.
์๋์์ฑ ๊ตฌํ์, ๋ฆฌ์กํธ ๋๋์ ์ด๋ฒคํธ ํ๋ฆ์ ๊ตฌํํ๊ณ ์ ํ์ผ๋, ๋น์์๋ Flux ์ํคํ
์ฒ๋ผ๋ ์ง uni-direction๊ฐ์ ๊ฐ๋
์ ์ ๋ชฐ๋์ ๋๋ผ ๋ณํ์ ๊ฐํ ๊ตฌ์กฐ๋ฅผ ์ ๋๋ก ๊ตฌํํ์ง ๋ชปํ ๊ฒ ๊ฐ์ต๋๋ค.
mode๋ฅผ ์ข ๋ ์ธ๋ถ์ ์ผ๋ก ๋๋ด์ผ๋ฉด ๋ ๋์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค(์ง๊ธ์ submit modeํ๋์๋ ๋ง์ ๊ฒฝ์ฐ์ ์๊ฐ ๋ฐ์ํจ). ๊ทธ๋๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๋ ๊ตฌ๊ฐ์ ๋น๊ต์ ์ฐพ๊ธฐ ์ฌ์ฐ๋ ์ ๋ฐ์ ์ฑ๊ณต?
์ถํ์ ๊ฐ์ ํ ๋ dispatcher์ reducer๋ฅผ ๊ตฌํํด์ ์ด๋ฒคํธ ํ๋ฆ ์ ์ด๋ฅผ ์๋ํด๋ณผ ์๊ฐ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋๋ฅผ ํฌํฌํ๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ฉด์ ์ฝ๋์ ์ฅ๋จ์ ์ ๋๊ปด๋ณผ ์๊ฐ์
๋๋ค.
์๋์์ฑ ์ปดํฌ๋ํธ ์ค, recentKeywords์ suggestions์ ๋๋๋ค๋ณด๋ ์ด๋ฒคํธํธ๋ค๋ฌ๋ฅผ ๋ฑ๋กํ๋ ์ฝ๋๊ฐ ์ค๋ณต๋์ด์ ํธ๋ค๋ฌ๋ฅผ searchBar์ ๋์์ต๋๋ค. ๊ทธ๋ฌ๋ค๋ณด๋ ๋ชจ๋ ์ปดํฌ๋ํธ๋ค์ด ์ฌ์ฌ์ฉ์ด ์ด๋ ค์ด ๊ตฌ์กฐ๊ฐ ๋์์ต๋๋ค. ์ง๊ธ๋ณด๋ ๊ณตํต๋ถ๋ถ์ ํ๋์ ์ปดํฌ๋ํธ๋ก ๋ฌถ๊ณ ๋ ์ปดํฌ๋ํธ์์ ์ฌ์ฉ๋๋ ์ด๋ฒคํธํธ๋ค๋ฌ๋ ์ด ์๋ก์ด ์ปดํฌ๋ํธ์ ์์ฑํ๋ ํ์์ผ๋ก ์์ ํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
ํจ์์ ํฌ๊ธฐ๋ฅผ ์๊ฒ ๋๋๋ ค๊ณ ํ์ผ๋ ๋์ํ๋๋ก ๊ตฌํํ๋๋ฐ์ ์ ๊ฒฝ์ฐ๋ค๋ณด๋ ํฌ๊ธฐ๊ฐ ํฐ ํจ์๊ฐ ๋ช๊ฐ ์๊ฒจ๋ฒ๋ ธ์ต๋๋ค.
ํ์คํ ํจ์์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ๊ฐ๋
์ฑ์ด ๋จ์ด์ง๊ฒ ๋๋ค๋ ๊ฒ์ ๋๊ผ์ต๋๋ค.
ํฌ๊ธฐ๊ฐ ํฐ ํจ์๋ ์ฝ๋์ ์๋๋ฅผ ์ ๋๋ก ๋ด์ง ๋ชปํ๋ค๋ ์ ์ ์๊ฒ ๋์์ต๋๋ค.










