๐ฌ์์๋ณด๊ธฐ: ํ
์ฌ๋ผ ์์
Wecode ํ
์ฌ๋ผ ํด๋ก ์ฝ๋ฉ ํ๋ก์ ํธ(Front-end)
ํ๋ก์ ํธ ์๊ฐ๐จ
- ์ ๊ธฐ์ฐจ ์ฐ์
์ ์ ๋์ฃผ์์ธ Tesla์ ํ์ด์ง๋ฅผ ํด๋ก ์ฝ๋ฉ
๊ฐ๋ฐ ๊ธฐ๊ฐ๐
- 2020/8/18 ~ 2020/8/28(2 Weeks)
๊ตฌ์ฑ์ ๐จโ๐ป
- ํ๋ก ํธ์๋ 3๋ช
- ๋ฐฑ์๋ 2๋ช
๊ฐ๋ฐ ๋ชฉ์ ๐
- CRA์ ํตํ ์ด๊ธฐ ํ๋ก์ ํธ ์ธํ
์ฐ์ต
- React.js๋ฅผ ํตํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ
- git์ ํตํ ํ๋ก ํธ์๋์ ๋ฐฑ์๋์ ํ์
๊ฒฝํ
์ฌ์ฉ ๊ธฐ์ & ๊ตฌํ ๊ธฐ๋ฅโ๏ธ
์ฌ์ฉ ๊ธฐ์
- React.js(classํ ์ปดํฌ๋ํธ)
- React Router
- RESTful API
- sass
- Git
์ฃผ์ ๊ตฌํ ๊ธฐ๋ฅ
์ง์ ๊ตฌํํ ๊ธฐ๋ฅ์ โ
, ํ์์ด ๊ตฌํํ ๊ธฐ๋ฅ์ โ ํ์
1) ๐ ํ์๊ฐ์
/ ๋ก๊ทธ์ธ ํ์ด์ง
- โ์ด๋ฉ์ผ ๋ฐ ํจ์ค์๋ ์์ ํ์ธ ๊ธฐ๋ฅ
- โํ์๊ฐ์
๊ธฐ๋ฅ(์ฝ๊ด ๋์ ๋ฐ ํน์ ์กฐ๊ฑด)
2) ๐ ๋ฉ์ธํ์ด์ง
- โํ์ด์ง ๋ก๋ฉ์ ์ด๋ฏธ์ง ์ค์ธ
- โ๋ฒํผ ํด๋ฆญ์ ์ด๋ฏธ์ง์ ํน์ ์์น ์ค์ธ
- โscroll์ ๋ฐ๋ฅธ ๋ค๋น๊ฒ์ด์
์ ํ
- โ
ํน์ scroll์ ๋ฐ๋ฅธ ๋ค๋น๊ฒ์ด์
์ ์ ํ
3) ๐ ์ฐจ๋ํ์ด์ง
- โ
svg์ ์ ๋๋ฉ์ด์
ํจ๊ณผ
- โํน์ ์์น๊น์ง์ ์ซ์๊ฐ ์ฆ๊ฐํ๋ ์ ๋๋ฉ์ด์
ํจ๊ณผ
- โ
scroll์์น์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์
๋์(์กฐ๊ฑด๋ถ ๋ ๋๋ง)
- โ
scroll๋์์ ๊ฐ์ง ํ ๋ถ๋๋ฌ์ด view์ ์ ํ
- โ
์ฌ์ด๋ ๋ค๋น๊ฒ์ด์
์ ํตํ ํน์ ํ์ด์ง ์์น ์ด๋
- โ
ํน์ scroll์ ๋ฐ๋ฅธ ๋ค๋น๊ฒ์ด์
์ ์ ํ
- โ
๋น๋์ค ์ด๋ฏธ์ง์ ์ฌ์
- โ
ํ์ด์ง์ ๋์ ๋ผ์ฐํ
4) ๐ ์ฃผ๋ฌธํ์ด์ง
- โํน์ ์์น๊น์ง์ ์ซ์๊ฐ ์ฆ๊ฐํ๋ ์ ๋๋ฉ์ด์
ํจ๊ณผ
- โํน์ ์ฐจ๋ ์ต์
์ ์ด๋ฏธ์ง ๋ถ๋ถ์ ์ฉ ๋ฐ ๊ฐ๊ฒฉ์ ๋ณด ์ ์ฉ
- โ์ต์
์ ์ฉ์ ๋ฐ๋ฅธ ์์ ๊ฐ๊ฒฉ์ ๋ณด ๋ชจ๋ฌํ์ด์ง ์์ฑ
- โ๋น๋์ค ์ด๋ฏธ์ง์ ์ฌ์
#code review๐
- โญ๏ธ ์กฐ๊ฑด๋ถ ๋ ๋๋ง
: React์์๋, ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ด์ ์ํ๋ ๋์์ ์บก์ํ ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋์, ์ดํ๋ฆฌ์ผ์ด์
์ ์ํ์ ๋ฐ๋ผ ์ปดํฌ๋ํธ์ ์ผ๋ถ๋ง ๋ ๋๋ง ํ ์ ์๋ค!
- ํ์์ ๊ฒฝ์ฐ ๊ตฌ๋ถํ๊ธฐ ํธํ๊ฒ ๊ฐ ์ปดํฌ๋ํธ๋ช
๊ณผ ๋์ผํ๊ฒ state๋ฅผ false๋ก ์ ์ธ ํ์๋ค.
- ์ ์ธํ state๋ค์ ๊ฐ ์์ ์ปดํฌ๋ํธ๋ค์๊ฒ props๋ก ๋๊ฒจ์ฃผ์๋ค.
- ํ์๋ ๊ฐ ์ปดํฌ๋ํธ๋ค์ด ํ์ด์ง์ ํ ๋ถ๋ถ์ ๋ด๋นํ๋ํํ๋ก ํ์ด์ง๋ฅผ ๊ตฌ์ฑํ์์ผ๋ฉฐ, ํ์ด์ง์ view๊ฐ ์ผ์ scroll์ ์์น๋ฅผ ๋์ด๊ฐ๋ฉด ๋ ๋๊ฐ ๋๋๋ก ํ๋ ์กฐ๊ฑด์ ๋ง๋ค์๋ค.
- ๋ถ๋ฆฌ์ธํํ์ ์กฐ๊ฑด์ ํตํด ๋ ๋๋ฅผ ํ๊ณ ์ํ๋ ์ปดํฌ๋ํธ์์ ํด๋น ์กฐ๊ฑด์ด true๊ฐ ๋์์ ๊ฒฝ์ฐ ๋ถ๋ถ์ ํน์ ์ง์ด์ ์กฐ๊ฑด๋ถ ๋ ๋๋ง์ ์์ฑํ ์ ์๋ค! ๐
- โญ๏ธ scroll event
:React์์๋, ํน์ ์์ญ๋งํผ scrollํ ๋, compononentDidMount์์ ์คํฌ๋กค ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ๊ณ , ๋ฉ์๋๋ฅผ ํ์ฉํด์ state๋ฅผ ์คํฌ๋กคํ ๋๋ง๋ค ์
๋ฐ์ดํธํ์ฌ ์ด๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ผ๋ก ํน์ ์ก์
์ ์คํ์ํค๋ ๋์์ ํ ์์๋ค.
- state์์ scroll์ ๋ถ๋ฆฌ์ธ์กฐ๊ฑด, ํ์ฌ scroll์ ๋ํ ๊ธฐ๋ณธ๊ฐ์ ์ ์ํ๋ค.
(์ปดํฌ๋ํธ๋ฅผ ์ฌํ์ฉํ๋ฏ ๊นจ์๊ฐ์ด ์คํฌ๋ฆฐ์ท๋ ์ฌํ์ฉํ๋ค)
- compononentDidMount์ ์ด๋ฒคํธ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ค
- ์์ชฝ๊ณผ ๊ฐ์ด scroll ์ด๋ฒคํธ๋ฅผ ์ ์ฉํ๋ ๊ฒ ๋ฟ๋ง ์๋๋ผ ์๋์ ๊ฐ์ด ๋ค๋ฅธ EventListener๋ฅผ ์ ์ํ์ฌ ํ์ฉ ํ ์์๋ค! ๐
- scroll์ ์ขํ๊ฐ์ ๋ฐ๋ผ ์ ์ฉํ๊ณ ์ ํ๋ ์ก์
์ ์ ์ํ๋ฉด ๋๋ค.
(์์ ์ฝ๋์์๋ scrollY์ ์ขํ๊ฐ์ ํตํด ์ก์
์ ์ ์ํ์๋ค)
- if ๋ฌธ์ ํตํด ์คํฌ๋กค์ด ์์ง์ด๋ฉด(ํด๋น ์ฝ๋์์๋ keyCode๋ฅผ ์กฐ๊ฑด์ผ๋ก ํ์๋ค)
- false์๋ scroll์ true๋ก ๋ณํ, ๊ธฐ์กด์ CurrentPosY state๋ฅผ ์์ง์ผ ์คํฌ๋กค๋งํผ - ํน์ + ๋ก ๋ณ๊ฒฝ
- ํด๋น ์กฐ๊ฑด์์ scrollTo ๋ฉ์๋์ ์คํ์ CurrentPosY ๋งํผ ์ด๋ ํ๋๋ก ํจ์ ์คํ์ ์์๋ก ์งํํ๋๋ก ํ์๋ค
- ๐จ ๋จ์ง ์์ ์กฐ๊ฑด๋ง ์ ์ํ๋ค๋ฉด ์์ง์ด๋ ๋งค ์๊ฐ ํจ์๊ฐ ํธ์ถ๋๊ธฐ ๋๋ฌธ์ ์๋ก setState ๋ CurrentPosY์ ์ขํ๋งํผ ํ์ฌ์ scroll์ด ๋๋ฌํ์ง ๋ชปํ๋ค๋ฉด scroll state๋ฅผ false๋กํ๋ ์กฐ๊ฑด์ ํตํด ํจ์๊ฐ ์ค๋ณต์คํ๋์ด ์ด๋ฒคํธ๋ฅผ ๋ฒ์ด๋๋ ํ์์ ๋ฐฉ์งํ์๋ค. ๐
๐จ ์์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ํธ๋ํจ๋์ ๋งค์ง๋ง์ฐ์ค์์๋ ํจ์๊ฐ ๋๋ฒ์ฉ ์คํ์ด ๋๋ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋์๋ค..๐ญ(keyCode๋ฅผ ํตํ ํจ์์คํ์ ๋นํ์ธ๋...)
๊ฒฐ๊ตญ ์ ๊ทธ๋ฐ ํ์์ด ๋ฐ๊ฒฌ๋์ง๋ ์ฐพ์ง ๋ชปํ๋ค...
- โญ๏ธ ๋์ ๋ผ์ฐํ
- Route ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํด ๋ผ์ฐํธ์ ๊ฒฝ๋ก์ ํน์ ๊ฐ์ ๋ฃ์ด ํด๋น ํ์ด์ง๋ก ์ด๋ํ ์ ์๊ฒ ํ๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค!
- ๊ทธ ์ค ์๋์์๋ URL parameters๋ฅผ ํตํ ๋์ ๋ผ์ฐํ
์ ๋ํด ์์๋ณด์
- ์์ ๊ฐ์ด Routes.js ์์ path์์ :id๋ฅผ ํตํ path๋ฅผ ์ง์ ํ๋ค.
- ์ง์ ํ ๊ฒฝ์ฐ, CarModel,Order ์ปดํฌ๋ํธ์์ this.props.match.params.model๋ฅผ ํตํด ํด๋น ๊ฐ์ ๊ฐ์ง๊ณ ์ฌ ์ ์์ต๋๋ค.
- CarModel์ render์์ ์์ ๊ฐ์ด ์ฝ์์ ์ฐ์ด๋ณธ๋ค๋ฉด
- ์ด๋ ๊ฒ this.props.match.params๊ฐ ๋ํ๋๋ค!(๋๋๋ฅ์ฅ!๐)
- state์ this.props.match.params.path์ ์ง์ ํ id๋ฅผ ์ง์ ํ ๋ค
- ์์์ปดํฌ๋ํธ๋ค์๊ฒ ๊ตฌ์กฐ ๋ถํด ํ ๋น ํ props๋ก ๋๊ฒจ์ฃผ์๋ค.
- ์์์ปดํฌ๋ํธ์ componentDidMount์์ fetchํจ์๋ฅผ ์คํํ๋ค
- ํด๋น fetch์ url์ id ๋ถ๋ถ์ {this.props.model}๋ก ์ง์ ํด์ค๋ค.
(์์ ์ฝ๋์์๋ mock data๊ฒฝ๋ก๋ก ์ค์ ๋์ด ์์ต๋๋ค)
- fetch๋ฅผ ํตํด ๋ฐ์ ์ ๋ณด๋ฅผ setState๋ฅผ ํตํด state์ ๋ด์ ์ค๋ค.
- ์์ ํจ์์์๋ ๋ด๋ ค๋ฐ์ ๋ฐ์ดํฐ ์ค exterior.img์ ์๋ ๋ฐ์ดํฐ๋ฅผ background ์ด๋ฏธ์ง url์ ์ ๋ณด๋ก ํ์ฉํ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ ๋์ ์ธ ๋ฐฐ๊ฒฝํ๋ฉด์ ๊ตฌํํ์๋ค.
- ์ธ๋ผ์ธ ํํ๋ก ๋ง๋ค์ด์ค ํจ์๋ฅผ ์ํ๋ ๋ถ๋ถ์ inline style์ ํํ๋ก ์คํ์ํค๋๋ก ๊ตฌ์ฑํ์๋ค.
- โญ๏ธ keyFrames & Common.scss
: ๋ง์ ์ ๋๋ฉ์ด์
์ด ์ ์ฉ๋๋ ํ์ด์ง๋ฅผ ์์
ํ๋ ๋งํผ common.scss์ keyFrames์ ์ ์ธ ํ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ํตํด ์ฝ๋ ๊ฐ์ํ์ ์ฑ๊ณตํ์๋ค. ๐
- common.scss์ ๊ฐ์ข
keyFrames์ ๊ตฌ์ฑํ๋ค.
(๋ณธ ํ๋ก์ ํธ์์๋ https://animista.net/ ์ ์ ๋๋ฉ์ด์
์ ์ฐธ๊ณ ํ์๋ค.)
- ์ํ๋ ์ปดํฌ๋ํธ์ scssํ์ผ์์ ํด๋น keyFrames์ animation ์์ฑ์ ํตํด ์ ์ฉํด์ฃผ๋ฉด ๋!๐
#Total reivew๐
์ํต, ์ํต, ๋ ์ํต..!
ํ๋ก์ ํธ ์์ ํ ๊ฐ์์ ์ญํ ์ ๋งก๊ณ , ํ์ด์ง ๋ ์ด์์์ ๋ง๋ค์ด ๋๋ค.
ํ์ด์ง ๋ ์ด์์์ด ๋๋ ํ ๋ฐฑ์๋์ ๋ฐ์ดํฐ๋ฅผ ๋งค์นญํ๊ธฐ ์ํด ์ด์ผ๊ธฐ๋ฅผ ๋๋๊ธฐ ์์ํ ๋, ์ํต์ด ์ ๋๋ก ์ด๋ค์ง์ง์์ ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๋ฅผ 4๋ฒ์ด๋ ๋ฐ๊พธ๋ ๋์ฐธ์ฌ๊ฐ ๋ฒ์ด์ก๋ค..๐ญ(๊ต์ฅํ ์ฃ์ก์ค๋ฌ์ด ๊ธฐ๋ถ์ด ๋ค์ด๋ฒ๋ฆผ..)
๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋ก์ง์ ๊ตฌํํ๊ธฐ์ ์ ๊ผญ ์ถฉ๋ถํ ์ํต์ ํตํด ์์คํ ์๊ฐ์ ๋ญ๋นํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋ผ๋ ์ด ๋ง์์ด ์ ์ง๋๊ธฐ๋ฅผ ํฌ๋งํ๋ค..
trello๋ฅผ ์ข ๋ ์ ์ฌ์ฉํ๋๋ผ๋ฉด..
์ด๋ฒ ํ๋ก์ ํธ์์๋ trello๋ผ๋ ํ์
ํด์ ํตํด ํ๋ก์ ํธ๋ฅผ ๊ด๋ฆฌํ์๋ค.
to do list์ ์นด๋๋ฅผ ์์ฑ ํ ํ ์ผ์ ์ ๊ฑฐํด ๋๊ฐ๋ฉฐ, ์ผ์ ์ ๊ด๋ฆฌํ๋ ๋ถ๋ถ์์๋ ๋ฌด๋ฆฌ๊ฐ ์์์ง๋ง ํญ์ ์ผ์ ์ ์ซ๊ธฐ๋ ๋ฏํ ๊ธฐ๋ถ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉฐ ์ ๋๋ก trello๋ฅผ ํ์ฉํ์ง ๋ชปํ ๋๋์ด ๋ค์๋ค.
์๋ง ์์์ ๋งํ ์ํต์ ๋ถ์ฌ๊ฐ ์ด ๋ถ๋ถ์์๋ถํฐ ์์์ด ๋ ๊ฒ์ด ์๋๊น๋ผ๋ ์๊ฐ์ด ๋ค๊ธฐ๋ ํ๋ค.
๋ค์ ํ๋ก์ ํธ์์๋ ์กฐ๊ธ ๋ ์ํต๊ณผ ํ์
ํด์ ์ฌ์ฉ์ ๋ํด ์ ๊ฒฝ์ ์จ์ผ๊ฒ ๋ค๋ ๋ค์ง์ ํด๋ณด๋ฉฐ ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌด๋ฆฌ ํ๋ค...๐