(๋ฉํ )์์ฐ์ฃผ-(๋ฉํฐ)๊น์์ฐ, ์์์ HTML,CSS,React ๊ณต๋ถ ์์ํฉ๋๋ค!
Github์ ์ฌ๋ฌ ๊ธฐ๋ฅ(PR, Issue, ์นธ๋ฐ๋ณด๋, Action, ์นํธ์คํ ๋ฑ...)๊ณผ ๊ทธ ํ์ฉ์ ๋ํด ์์๋ณด๊ณ github ์ฌ์ฉ์ ํธ๋ฆฌํ๊ฒ ํด์ฃผ๋ ํด์ ์๊ฐํ์ต๋๋ค.HTML, CSS, React๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๊ณ ์ํ ๋ฏน ๋์์ธ๊ณผ css-in-js์ ๊ดํด ์์๋ณด๊ณ ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ (Create React App๊ณผ Emotion)์ ๋ง์ณค์ต๋๋ค. ์ดํ ๋ค์ ์๊ฐ๋ถํฐ ์งํ๋ ์ค์ต์ ๊ดํด ๊ฐ๋ตํ๊ฒ ์์๋ณด์์ต๋๋ค.
์ค๋์ ๊นํ๋ธ ์ฐ๋ ๋ฐฉ๋ฒ, html.css,.js.react๊ฐ ๋ฌด์์ธ์ง ๋ฐฐ์ ๋ค. html์ ๋ผ๋. css๋ ๊ฒ๋ชจ์ต, js๋ ๋๋ผ๊ณ ํ๋ค. html์ด๋ css๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๊ฐ ์๋๋ผ๊ณ ํ๋ค. ๋ชฐ๋๋ค. ์ํ ๋ฏน ๋์์ธ์ ๋ํด์ ๋ฐฐ์ ๋ค. ์น์ฌ์ดํธ๊ฐ ๊ทธ๋ฅ ํ ํ์ด์ง๋ก ์ด๋ฃจ์ด์ง๋ ์ค ์์๋๋ฐ, ์ฌ๋ฌ๊ฐ์ง ์์๋ก ์ด๋ฃจ์ด์ ธ์๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค. ๊ทธ๋ฆฌ๊ณ ๋๊ฐ์ ๋์์ธ์ ๋ณต๋ถํ๋ ๊ฒ์ ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ์ด ์ข์ง ์๋ค๊ณ ํ๋ค. ๋ด๊ฐ ๊ฐ์งํ๋ ์ด๋ ๊ฒ ํ๋๋ฐ,,, ์ฝ๊ฐ ๊ฐ์งํ์์ ๋ฐฐ์ด ๋ด์ฉ์ด๋ ๋น์ทํ ๋ด์ฉ์ด๋ผ๊ณ ๋๊ผ๋ค ์ด๋ฒ์๋ ์ค์ต์ ๋ง์ด ํด๋ณด๋ฉด์ ์ฐ์ต์ ๋ง์ด ํด์ผ๊ฒ ๋ค. ๊ฐ์งํ๋ ์ค์ต์ ์ถฉ๋ถํ ์ํ๋๋ ์ค๋ ฅ์ด ์ ์๋์๋ ๊ฒ์ ๊ตํ์ผ์์ ์ด์ฌํ ์ค์ตํ๊ฒ ๋ค. ์์ผ๋ก ๊ฐ์ผํ ๊ธธ์ด ๋ง๋ค๊ณ ๋๊ผ๋ค. ์ด์ฌํ ํด์ผ๊ฒ ๋ค.!!
์คํ๋ผ์ธ์ผ๋ก ๋ง๋ ํ์ตํ๋์ ์งํํ์ต๋๋ค. HTML Tag์ semanticํ ํ๊ทธ ์์ฑ์ ์ค์์ฑ์ ๋ํด์ ์ธ๊ธํ๊ณ React Component์ ๊ทธ ์ค์์๋ ํจ์ํ Component ์ฌ์ฉ์ ๋ํด ๋ฐฐ์ ์ต๋๋ค. ํ์ํ extension์ ์๊ฐํ ๋ค ํฌ๋งํ๋ ์ธ์คํ๊ทธ๋จ ํ์ด์ง๋ฅผ ํด๋ก ์ฝ๋ฉํ๋ ์ค์ต์ ์์ํ์์ต๋๋ค.
์ค๋์ ์ง์ ์ธ์คํ ๊ฒ์๋ฌผ ํ๋ฉด์ ๋ง๋ค์ด ๋ณด์๋ค. ํฐ ํ๋ฉด์์ ๊ฐ์ด ์ฝ๋ฉํ๋ฉด์ ์๋ฌ๊ฐ ์๊ธฐ๋ฉด ๋ฐ๋ก๋ฐ๋ก ๋ฌผ์ด๋ณด๊ณ ๊ณ ๋ฏผํ ์ ์๋ค๋ ์ ์ด ์คํ๋ผ์ธ ์์ ์ ํฐ ์ฅ์ ์ธ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์นํ ์ฌ๋๊ณผ ํ๋ ๋ฌผ์ด๋ณด๊ธฐ๋ ์ฝ๊ณ ์ง๋ฌธํ๊ธฐ๋ ์ฌ์์ ๋ถ๋ด๊ฐ์ด ์์ด ์ข์๋ค! ์ธ์คํ ๊ฒ์๋ฌผ ํ๋ฉด์ ์ํ ๋ฏนํ๊ฒ ์น์ ๋ณ๋ก ๋๋ ๋ณด๊ณ semanticํ ๊ฒ์ด ์ด๋ค ๊ฒ์ธ์ง์ ๋ํด ๋ฐฐ์ ๋ค. ๋ ์ฐ์ฃผ์ธ๋๊ฐ ์ฝ๋ฉํ ๋ ์ฌ์ฉํ๊ธฐ ์ ์ฉํ ํ์ฅํ๋ก๊ทธ๋จ๋ค์ ์ฌ๋ฌ๊ฐ ์๋ ค์ค์ prettier, bracket,, indent rainbow๋ฅผ ์ค์นํ๋ค. ๋ฐฑ์คํ๋๋ ๊ทธ๋ฅ ์๋ฌ์ ๋๋ค๋ง ๋์์ ์ฝ๊ฐ ์ฌ๋ฏธ๊ฐ ์์๋๋ฐ, ๋ฆฌ์กํธ๋ ๋ด๊ฐ ์ด ์ฝ๋๋ฅผ ๋ฐ๋ก ํ์ธํ ์ ์์ด์ ์ฌ๋ฐ์๋ค. ํ๊ต์ ๋ฆฌ์กํธ ์์ ์ ์๋๊ณ ๋ฌผ์ด๋ดค๋๋ฐ ์์ฝ๊ฒ ์๋ค๊ณ ํ๋ค ใ ใ ์ธ๋ ์๊ฐ๋ ๋ ๋ง๋ค ์กธ๋ผ์ ๊ฐ์ด ์์ ํ๋ ๊ฒ์ฒ๋ผ ์ด์ฌํ ๋ฐฐ์์ผ๊ฒ ๋ค ใ ใ
์ด์ ๋ณด๋ค ์ธ์คํ๊ทธ๋จ์ด๋ ๋ ๋ฎ์๊ฐ๊ณ ์์ด์ ๋ฟ๋ฏํ๋ค. ์ค๋์ ์ธ๋๊ฐ ๊ณ ๊ธ๊ธฐ๋ฅ์ด๋ผ๊ณ ํด๋ฆญ๊ธฐ๋ฅ์ ๊ฐ๋ฅด์ณ์คฌ๋ค. ๊ทธ๋ฆฌ๊ณ ํด์ฌํ๊ทธ๋ ํ๋กํ์ ํด๋ฆญํ๋ฉด ์ค์ ํด๋์ ๋งํฌ๋ก ๋์ด๊ฐ ์ ์๋๋ก href๋ฅผ ์ฌ์ฉํ๋ค. ์ง๊ธ์ ํ๋์ ํ์ด์ง๋ง์ ๋ง๋๋ ๊ฒ์ด๋ผ์ ์ผ์ผ์ด url์ ์ ๋ ฅํด์ฃผ์ง๋ง, ๋ง์ฝ ์ ๋ง๋ก ์๋น์ค๋ฅผ ์ด์ํ ๋๋ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ํตํด ์๋์ผ๋ก ๋์ด๊ฐ ์ ์๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒ์๊ธฐ๋ฅ๋ ํ๋ก ํธ์๋์ ์ผ์ด๋ผ๊ณ ํ๋๋ฐ, ์๊ฐ๋ณด๋ค ํ๋ก ํธ์๋๋ ํ ์ผ์ด ๋ง์ ๊ฒ ๊ฐ๋ค. ๋ด๊ฐ ์๊ฐํ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ ๊ฑฐ์ ์น๋์์ด๋ ์ ๋์๋ค.... ์ธ์คํ๊ทธ๋จ ์นํ๋ฉด์์ 1์ผ์ด๋ผ๊ณ ์ ํ์๋ ๋ถ๋ถ์ ํด๋ฆญํ๋ฉด day๋ณ์๊ฐ ํ๋์ฉ ์ฌ๋ผ๊ฐ์ 1์ผ 2์ผ 3์ผ.. ์ด๋ ๊ฒ ์ฆ๊ฐํ๋ ๊ธฐ๋ฅ์ธ๋ฐ ์ ๋ง ๋๋ฌด๋๋ฌด ์ ๊ธฐํ๋ค. ์ด ๊ธฐ๋ฅ์ ์ข์์๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋ ์ฐ๋ ๊ฒ์ด๋ผ๊ณ ํ๋ค. ์ด๊ฑธ ๋ณด๋ <๊ฑฐ์งํค์ฐ๊ธฐ>๊ฒ์์ด ์๊ฐ๋ฌ๋ค. ๊ฑฐ์งํค์ฐ๊ธฐ๋ ๊ทธ๋ฅ ํด๋ฆญ์ ํ๋ฉด ๋์ด ์์ด๋ ๊ฑด๋ฐ, ์ด๋ ๊ฒ ํด๋ฆญํ๋ ๊ฑธ๋ก ์นํ์ด์ง์์ ๊ฒ์์ ๋ง๋ค ์ ์์ ๊ฒ ๊ฐ์๋ค. ๋ค์์ ํ ๋ฒ ํด๋ด์ผ๊ฒ ๋ค. ํ์์ ํ๋ก ํธ์๋์ ๋ณ ๊ด์ฌ์ด ์์๋๋ฐ, ์ฝ๋ฉํ ๊ฒฐ๊ณผ๋ฅผ ๋์ผ๋ก ๋ฐ๋ก ํ์ธํ ์ ์๋ ์ ์ด ๋๋ฌด ๋งค๋ ฅ์ ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ๋ณด๋ค ๊ฒฐ๊ณผ๋ฌผ์ด ๋์์ง ๊ฒ ๋๋ฌด ๋ฟ๋ฏํ๋ค! ์ญ์ ๊พธ์คํ ํ๋ ๊ฒ ์ ์ผ ์ค์ํ ๊ฒ ๊ฐ๋ค.
์ค๋ ์ฒ์์ terminal๋ก react๋ฅผ ์ผฐ๋๋ฐ, ์ง๋ ๋ฒ์ ๋ง๋ค์๋ ๊ฑด ์๊ณ , ๊ทธ ์ ์ ํ๋ ํ์ผ์ด ์๊พธ ์ด๋ ค์ ์ ๊ทธ๋ฌ๋์ง ์์๋ด๋๋ผ๊ณ ์๊ฐ์ ๋ง์ด ์ผ๋ค. ์๊ณ ๋ณด๋ ๋ด๊ฐ ๋ง๋ค์ด๋์ react_study ๋๋ ํ ๋ฆฌ ๋ด์ srcํด๋ ์์ post.jsํ์ผ์ด ์์ด์ผ ํ๋๋ฐ, ๋ด๊ฐ srcํด๋ ์์๋ ๊ตฌ๋ฒ์ ํ์ผ์ ์ฌ๋ ค๋๊ณ , ์ง์ง ํ์ผ์ ์๋ชป๋ ์์น์ ๋ฌ์ ๊ทธ๋ฌ๋ ๊ฒ์ด๋ค. ํ์ผ ์์น ๊ด๋ฆฌ๋ฅผ ๋๋ฐ๋ก ํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ ํ๋ค. ์๋ ์ธ์คํ๊ทธ๋จ ํ๋ฉด์ ๋ณด๋ฉด ํ๋กํ์ด ๋๊ธ์์๋ ๋ฐ๋ณต๋๋ค. ๊ทธ๋์ ๊ทธ ๋ถ๋ถ์ ๋ณต๋ถ์ผ๋ก ์ฌ๋ฌ ๊ฐ ๋ง๋ค์๋ค. ์ค๋์ ๋๊ธ ๋ถ๋ถ์ ๋ง๋ค์๋ค. ์์ง display:flex
์ธ ์ํ์ฌ์ ๋๊ธ์ฐฝ์ด ๋ด๋ ค์ค์ง ์๊ณ ๊ฒ์๊ธ์ ์ด ์ ์ ์ธก๋ฉด์ ์์นํ ์ํ์ด๋ค. ์ง์ง ์ธ์คํ๊ทธ๋จ ํ๋ฉด์ฒ๋ผ ๋ณด์ด๊ณ ์ถ์ผ๋ฉด display : flex-column
์ ์ฌ์ฉํด์ค์ผ ํ๋ค. column์ '์ด'์ด๋ผ๋ ๋ป์ด๋ผ์ flex์ํ์์๋ ๊ฒ์๊ธ ๋ฐ์ผ๋ก ๋๊ธ์ด ๋ด๋ ค์ฌ ์ ์๋ค. display๊ฐ ๋ ๊ตฌ์ฒดํ๋์๋ค๊ณ ๋ณด๋ฉด ๋๋ค. ์ฐ์ฃผ์ธ๋ํํ
๊ตณ์ด <div></div>
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ , display : flex-column
๋ฅผ ์ฐ๋ ์ด์ ๋ฅผ ๋ฌผ์ด๋ดค๋๋, ๊ฐ์ด๋ฐ ์ ๋ ฌ์ ๋น๋กฏํ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ถ๊ฐ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค. html/css์ ์ธ๊ณ๋ ์ ๋ง ๋ฌด๊ถ๋ฌด์งํ ๊ฒ ๊ฐ๋ค. ๐
์ฝ๋๋ ๊ฐ์๋ฐ, ์ yeonjuice์ ํ๋กํ์ฌ์ง์ ์ฐ๊ทธ๋ฌ์ง์ง ์๊ณ youlakk๋ง ์ฐ๊ทธ๋ฌ์ง๋์ง ๊ณ ๋ฏผํ๊ณ ์์๋๋ฐ ์ธ๋๊ฐ ์์ ํ๋กํ์ ์ ์ด์ ์ฐ๊ทธ๋ฌ์ง๋งํผ ๊ณต๊ฐ์ด ๋ชจ์๋ผ์ง ์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ํ๋ค. ํด์๋๋ ๋ชจ๋ํฐํ๋ฉด์ ๋ฐ๋ผ ์๋์ ์ผ๋ก ui๊ฐ์ ๊ฒ์ ์กฐ์ ํด์ฃผ๋ ๊ฑด ์ ๋ง ํธํ ๊ธฐ๋ฅ์ด์ง๋ง, ์ด๋ด๋์๋ ์ข ๋๊ฐํ๋ค. ์ผ๋จ <div></div>
๋ก ์ฐ๊ทธ๋ฌ์ง์ง ์๊ฒ ๋ง๋ค๊ธด ํ๋๋ฐ, ๋๋จธ์ง๋ ๋ด์ผ ์ธ๋ํํ
๋ค์ ๋ฌผ์ด๋ด์ผ์ง ใ
ใ
+++ ๊ทธ๋ฆฌ๊ณ ์ธ๋ํํ
Git convention์ด๋ gitmoji๋ผ๋ extension์ ๋ํด์ ๋ฐฐ์ ๋ค. ๋์ ํ๊ธฐ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ๋๋ฌด ์ปค๋ฐ๋ฉ์์ง๊ฐ ์ ์ ์ด ์์ด์ ์ปค๋ฐ์ปจ๋ฒค์
์ ์ฒ์ ์ ํ๊ฒ ๋์๋๋ฐ, ์ด๊ฑธ ์ด๋ชจ์ง๋ก ํ ์ ์๋ค๋ ๊ฒ ์์ผ ๋๋ผ์ฐ๋ฉด์๋ ๋ง๊ทธ๋๋ก convention
์ธ๋ฐ ์ด๋ชจ์ง๋ผ๊ณ ์๋ ๊ฒ ๋ญ๋.? ์ด๋ผ๋ ์๊ฐ์ด ๋์์ ๋ค์๋ค. ์ปค๋ฐํ์คํ ๋ฆฌ๊ฐ ์๋ป์ ธ์ ์์ฃผ ๊นํ ๋ค์ด์ฌ ๋ง์ด ๋๋ค ใ
ใ
ใ
ใ
๋ณธ๊ฒฉ์ ์ผ๋ก ์ธ์คํ ๊ฒ์๊ธ๊ณผ ๋น์ทํด์ง๊ณ ์๋ค. ์์ํ margin
๋ ๋ฃ์ด์ฃผ๋ฉด์ ์ต๋ํ ๋น์ทํ๊ฒ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ ์ค์ด๋ค. ํด๋ก ์ฝ๋ฉ์ ํ๋ฉด์ ์กฐ๊ธ ์ ๊ธฐํ๋ ๊ฒ์ px๋ค์ด 5๋จ์๋ก ๊น๋ํ๊ฒ ๋์ค๋ ๊ฒ ์๋๊ณ , ๊ทธ๋ฅ white๋ผ๊ณ ์๊ฐํ๋ ์์๋ ์์์ฝ๋๋ฅผ ๋ณด๋ฉด ์์ ํ ํฐ์์ ์๋๋ผ๋ ๊ฒ, ์๊ฐ๋ณด๋ค ์์ ํ black,white๋ ์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ด๋ค. ์ค๋์ margin
๊ณผ padding
์ ์ฐจ์ด์ ์ ๋ํด ๋ฐฐ์ ๋ค. ์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์ค๋ค๋ ์ ์ ๊ณตํต์ ์ผ๋ก ๊ฐ์ง๊ณ ์์ง๋ง, ์ด๋ป๊ฒ(HOW)๊ฐ๊ฒฉ์ ์ฃผ๋๋ ์ ์์ ๋ค๋ฅด๋ค๋ ๊ฒ์ ๋ฐฐ์ ๋ค. margin์ ๊ฐ๊ฒฉ์ ์ปดํฌ๋ํธ ๋ฐ์ผ๋ก ์ฃผ๊ณ , padding์ ์์ผ๋ก ์ฃผ๋ ๊ฒ์ด ์ฐจ์ด์ ์ด๋ค. ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ณด๋ฉด ๋ ์ดํด๊ฐ ์ฝ๋ค!
์๋ ์ธ์คํ๊ทธ๋จ์ ์ด๋ฐ ์์ด ์๋์ง๋ง, ๊ตฌ์ญ์ ์ง๊ด์ ์ผ๋ก ํ์ธํ๊ธฐ ์ํด์ ์์ ์
ํ๋ค. ์ค๋ ์์
์์ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ <์ด๋๊น์ง๋ฅผ ํ ๋ฉ์ด๋ฆฌ๋ก ๋ณผ ๊ฒ์ด๋?>๋ผ๊ณ ์๊ฐํ๋ค. ์๋ฅผ ๋ค๋ฉด, ์๋ ๊ฒ์๋ฌผ์์ ๊ฒ์๊ธ์ ์ด ์ฌ๋์ ์ ๋ณด๊ฐ ๋์์๋ ๋ถ๋ถ์ ๋ณด๋ฉด ํ๋กํ์ฌ์ง+์ ์ ๋ช
์๋์ ์๋ ์์น
์๋์ ๊ณตํต์ ์ผ๋ก ์ฌ๋ฐฑ์ ์คฌ๋ค. ๋ง์ฝ ์ด ๋์ ํ ๋ฉ์ด๋ฆฌ๋ก <div>
๋ฅผ ํตํด ๋ฌถ์ด์ฃผ์ง ์๋๋ค๋ฉด, ํ๋กํ ์ฌ์ง ์๋์๋ ์ฌ๋ฐฑ(1) ๊ทธ๋ฆฌ๊ณ ์์น์ ๋ณด ์๋์๋ ์ฌ๋ฐฑ(2)์ ๋ฃ์ด์ค์ผํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ๊ฒ ์ฝ๋๊ฐ ๊ธธ์ด์ง๊ณ ์ง์์๊ฐ ์์ข์์ง๋ค. ๋ค์ผ๋ก ์ ์ง/๋ณด์ํ๊ธฐ๋ ์ด๋ ค์์ง๋ค. ์๋ํ๋ฉด ๊ฐ๊ฒฉ์ ์์ ํ๊ธฐ ์ํด ๋๋ฌด ๋ง์ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์์ ํด์ค์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์๋๋ MOZILLA๋ผ๋ ์ฌ์ดํธ์ด๋ค. ์ถ๊ฐ์ ์ผ๋ก HTML,CSSํ๊ทธ์ ์ ๋ณด์ ๋ํด ์๊ณ ์ถ์ ๋ ํ์ฉํ๊ธฐ ์ข์ ์ฌ์ดํธ์ด๋ค.
https://developer.mozilla.org/ko/docs/Web/HTML/Element/span
๊ทธ๋ฆฌ๊ณ ์ ๋ฒ์ ๋ณ์๋ช
์ semanticํด์ผ ํ๋ค๊ณ ํ๋๋ฐ, ๋ด๊ฐ ๊ทธ๊ฑธ ๊น๋จน๊ณ ๋์ถฉ ๋ณ์๋ช
์ hihi๋ก ์ค์ ํ๋๋ ์ธ๋๊ฐ semanticํ๊ฒ ์ด๋ฆ์ ์ค์ ํ๋ผ๊ณ ํ๋ค !!
-> ์ฐธ๊ณ ๋ก semantic
ํ๋ค๋ ๊ฒ์ ์๋ฏธ๋ก ์ ์ด๋ผ๋ ๋ป์ด๋ค. ์๋ฅผ ๋ค์ด, ๊ฒ์๋ฌผ์ ๊ฐ์ธ๋ ์คํ์ผํ๊ทธ๋ฅผ ์์ฑํ ๋ ๊ทธ ํ๊ทธ๋ช
์ ์๋ฌด๋ ๊ฒ๋ ์ง์ผ๋ฉด ์๋๊ณ <StyledPost>
์ฒ๋ผ ์๋ฏธ๋ฅผ ๋ด์์ ์ง๋ ๊ฒ์ ๊ถ์ฅํ๋ค๋ ๊ฒ์ด๋ค.
- ์ธ์คํ๊ทธ๋จ ์นํ์ด์ง ์์์ฝ๋ ์์์ค๊ธฐ
- ํํฐ์ ๋ผ์ด๋ธ ์ฝ๋ฉ๊ณผ ๋ฉํฐ๋ค๋ผ๋ฆฌ ์ ๊ทน์ ์ผ๋ก ์๋ก๋ฅผ ์๋ ค์ฃผ๋ ๋ฐฉ์์ผ๋ก ํํฐ๋ง์ด ์งํ๋์์ผ๋ฉฐ, ๋๊ธ ์ปดํฌ๋ํธ ๊ตฌ์ฑ์ ์์ฑํ๊ณ ํด๋น ์ปดํฌ๋ํธ๋ฅผ ๋ถ๋ฆฌํ์ฌ ์ฌ์ฉํ๋ ๋ฒ์ ์ตํ์ต๋๋ค. ๋ํ ํํฐ์ ์ง๋ฌธ์์ ์ด๋ฐ๋์ด react ๊ฐ๋ ์ ๋ชฉ์ฐจ๋ฅผ ๊ผผ๊ผผํ ์ดํด๋ณด๊ณ ๊ฐ๋ ์ ์ ์ฒด์ ์ผ๋ก ํ์ด๋ณด๋ ์๊ฐ์ ๊ฐ์ก์ต๋๋ค.
- ๋ ์ง ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ
- react์์ ์ ๊ณตํ๋ ๋ผ์ฐํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค. ๋ผ์ฐํ ์ด๋ผ๋ ์ฉ์ด๋ฅผ ์นํธ์คํ ํ ๋ ๋ค์ด๋ณธ ์ ์ด ์์ด์ ์ต์ํ๊ธด ํ๋๋ฐ ์ ํํ๊ฒ ์ด๋ค ์ฉ์ด์ธ์ง๋ ์์ง ๋ชปํ์๋ค. ์ด๋ฒ ๊ธฐํ์ ์ง์ ํด๋ณด๋ฉด์ ๋ฐฐ์ธ ์ ์์ด์ ์ฌ๋ฏธ์์๋ค.
- ๋ผ์ฐํ
(์์ด: routing)์ ์ด๋ค ๋คํธ์ํฌ ์์์ ํต์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ต์ ์ ๊ฒฝ๋ก๋ฅผ ์ ํํ๋ ๊ณผ์ ์ด๋ค.
๋ผ์ฐํ
์ ์ ํ ํต์ ๋ง, ์ ์ ์ ๋ณด ํต์ ๋ง, ๊ทธ๋ฆฌ๊ณ ๊ตํต๋ง ๋ฑ ์ฌ๋ฌ ์ข
๋ฅ์ ๋คํธ์ํฌ์์ ์ฌ์ฉ๋๋ค.(์ถ์ฒ : https://ko.wikipedia.org/wiki/%EB%9D%BC%EC%9A%B0%ED%8C%85) ๋ฆฌ์กํธ์์ ์ ๊ณตํ๋ ๋ผ์ฐํ
๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ธฐ ์ํด ํฐ๋ฏธ๋์ฅ์
npm install react-router-dom
๋ช ๋ น์ด๋ฅผ ํตํดreact-router-domํจํค์ง
๋ฅผ ๋ค์ด๋ก๋ ํ๋ค. ํํฐ๋ง์ด ๋๋๊ณ ํด๋น ํจํค์ง์ ๋ํด ๋ ๊ณต๋ถํด๋ณด๋ SPA์ฑ์ ๋ง๋ค ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค๊ณ ํ๋ค. ๊ทธ๋ ๋ค๋ฉดSPA
๋ ๋ฌด์์ผ๊น?- SPA : Single Page Application (์ฑ๊ธ ํ์ด์ง ์ดํ๋ฆฌ์ผ์ด์ ) ์ ์ฝ์์ด๋ค. ๋ง ๊ทธ๋๋ก, ํ์ด์ง(page)๊ฐ 1๊ฐ(single)์ธ ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ ๋ป์ ๋๋ค. ์ ํต์ ์ธ ์น์ดํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋, ์ฌ๋ฌ ํ์ด์ง๋ก ๊ตฌ์ฑ๋์ด์์ต๋๋ค. ์ ์ ๊ฐ ์์ฒญ ํ ๋ ๋ง๋ค ํ์ด์ง๊ฐ ์๋ก๊ณ ์นจ๋๋ฉฐ, ํ์ด์ง๋ฅผ ๋ก๋ฉ ํ ๋ ๋ง๋ค ์๋ฒ๋ก๋ถํฐ ๋ฆฌ์์ค๋ฅผ ์ ๋ฌ๋ฐ์ ํด์ ํ ๋ ๋๋ง์ ํฉ๋๋ค. ์ ํต์ ์ธ ์น์ดํ๋ฆฌ์ผ์ด์ ์ ์์๊ฐ ์ ํํ ์ด๋ค ๊ฒ์ ๋งํ๋์ง ๋ชจ๋ฅด๊ฒ ์ผ๋, ๊ณ์ํด์ ์๋ก๊ณ ์นจ์ ํด์ผ ์ ๋ณด๊ฐ ์ ๋ฐ์ดํธ๊ฐ ๋๊ณ ์ฌ์ฉ์๊ฐ 1ํ์ด์ง, 2ํ์ด์ง .. ์ด๋ฐ ๋ฐฉ์์ผ๋ก ๋๊ฒจ๊ฐ๋ฉฐ ์ฌ์ฉํ๋ ๋ฐฉ์์ธ๊ฐ๋ณด๋ค. ๋ด๊ฐ ์๊ณ ์๋ ๊ทธ๋ฐ ํ์ด์ง ์ค์๋ ์๋ฐ๋ชฌํ์ด์ง(https://www.albamon.com/recruit/area?rArea=,I000&sDutyWeek=30&rWDate=1)๊ฐ ๊ทธ๋ฐ ๊ฒ ๊ฐ์๋ฐ, ํ์คํ๊ฒ๋ ๋ชจ๋ฅด๊ฒ ๋ค.
- ํ์ง๋ง ์ฌ๊ธฐ์์ ์ฐฉ๊ฐํ๋ฉด ์๋๋ ์ ์ ์ฑ๊ธํ์ด์ง๋ผ๊ณ ํด์ ์ ๋ง ๋ง๋ค์ด์ง ํ์ด์ง๊ฐ 1๊ฐ๋ผ๋ ์๋ฏธ๊ฐ ์๋๋ค. ์๋ฅผ๋ค์ด ๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ ๋ค๋ฉด, ํ, ํฌ์คํธ ๋ชฉ๋ก, ํฌ์คํธ, ๊ธ์ฐ๊ธฐ ๋ฑ์ ํ๋ฉด(1๊ฐ์ ํ์ด์ง๊ฐ ์๋๋ค!)์ด ์๊ฒ ๊ณ , ๊ฐ ํ๋ฉด์ ๋ฐ๋ผ ์ฃผ์๋ฅผ ๋ง๋ค์ด์ค๋ค. ์ด ์ฃผ์๋ฅผ ํตํด ์ฌ์ฉ์๋ค์ด ํ์ด์ง์ ์ ์ ๋๊ธฐ๋ ํ๊ณ ๋ถ๋งํฌ๋ ๋ค๋ฅธ ์๋น์ค๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค. ์ฆ, ๊ฐ ์ฃผ์์ ๋ฐ๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๋ผ์ฐํ ์ด๋ผ๊ณ ํ๋ค.
- ๋ฆฌ์กํธ ์์ฒด์๋ ์ด ๊ธฐ๋ฅ์ด ๋ด์ฅ๋์ด์์ง ์๊ธฐ ๋๋ฌธ์, ์ฐ๋ฆฌ๊ฐ ์ง์ ๋ธ๋ผ์ฐ์ ์ API๋ฅผ ์ฌ์ฉํ๊ณ ์ํ๋ฅผ ์ค์ ํ์ฌ ๋ค๋ฅธ ๋ทฐ๋ฅผ ๋ณด์ฌ์ฃผ์ด์ผ ํ๋ค.
- ๋ผ์ฐํฐ(router)์๋ 3๊ฐ์ง ํ์
์ด ์๋ค. ๊ทธ ์ค ์ฐ๋ฆฌ๊ฐ ๋ง๋ค๊ณ ์๋ ๊ฒ์ ์น์ด๊ธฐ ๋๋ฌธ์
react-router-dom
์ ์ฌ์ฉํ๋ค. (์ถ์ฒ:https://velopert.com/3417)react-router-dom
: ์นreact-router
: ์น&์ฑreact-router-native
: ์ฑ
- ์๋์ ํ์ด์ง๋ ๋ฆฌ์กํธ ๋ผ์ฐํฐ์ ๊ณต์ ํ์ด์ง์ด๋ค. ์ธ๋๊ฐ ๋ ๊ณต๋ถํ๊ณ ์ถ์ผ๋ฉด ์ด ์ฌ์ดํธ๋ฅผ ํ์ฉํ๋ผ๊ณ ํ๋ค. -> https://reactrouter.com/web/guides/quick-start
- ์ค๋ฅธ์ชฝ์ ์ผ์ชฝ์ ์ค๋ช ์ ๋ํ ์ฝ๋๊น์ง ๊ฐ์ด ๋์์์ด์ ์ดํดํ๊ธฐ ๋ ์ฝ๊ณ ์ง๊ด์ ์ด์ด์ ์ข๋ค!
- ๋ณธ๊ฒฉ์ ์ผ๋ก ์๋ก์ด ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์์ํ๋ค!! ์ธ์คํ๊ทธ๋จ์์ ๋ด ํ๋กํ์ ํด๋ฆญํ๋ฉด ์์ ์ ํ๋กํํ์ด์ง๋ก ๋์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฒ์๊ธ์์ ๊ฒ์๊ธ ์์ฑ์์ ํ๋กํ์ ํด๋ฆญํ๋ฉด ๊ทธ ์ฌ๋์ ํ๋กํ๋ก ๋์ด๊ฐ๋ค. ์ด๋ฅผ
onClick
์ ์ฌ์ฉํด์ ์ฐ๊ฒฐํด์ฃผ๊ณ ์ ๋ฒ์ ๋ง๋ค์ด๋์๋ css๋ค์ ์ฌ์ฉํด์ ๋๊ทธ๋ ํ๋กํ์ ๋ง๋ค์ด์ฃผ์๋ค. ์ง๊ธ ๋ด ํ๋กํ์๋ ์๋๋ฐ, ํ๋กํ ํ๋จ์ ๋์ค๋ ์คํ ๋ฆฌ๋ ๊ฐ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ผ๊ณ ํ๋ค. ์์ง ์์ฑ์ ๋ชปํ์ง๋ง, ์ฌ๊ธฐ๊น์ง ํ๋ค๊ฐ ํํฐ๋ง์ด ๋๋ฌ๋ค. ๋ด์ผ ํํฐ๋ง๊ฐ์ ๋ง์ ๋ฐฐ์ฐ๊ณ ๋ง๋ค์ด์ผ๊ฒ ๋ค! - ๋ผ์ฐํฐ์ ๋์๋ฐฉ์ -> ๋ ๋๋ง ์์๋ฅผ ์ค์ฌ์ผ๋ก
- ๋ผ์ฐํฐ์๋
<BrowserRouter>
๊ฐ ๋ณดํต ๋ง์ด ์ฌ์ฉ๋๋ฉฐ<Link>
์<Route>
๋ฅผ ํตํด์ ๋ผ์ฐํ ์ ๊ตฌํํ๋ ๋ฐฉ์์ด๋ค. ์๋ฅผ ๋ค์ด, ํํ์ด์ง, ์ํํ์ด์ง, ๋ฆฌ๋ทฐํ์ด์ง๊ฐ ์๋ค๊ณ ํ์. ๊ฐ๊ฐ์ URL์/
,/movies
,/reviews
๋ผ๊ณ ํ์ ๋, ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํํ ์ ์๋ค. ๊ฐ๊ฐ์ ํ์ด์ง์๋ path ์์ฑ์ ํตํด์ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ๋ ๋๋ง ๋๋ URL์ด ์ ํด์ง๋ค. ํ์ง๋ง ์ฌ๊ธฐ์์ ์ ๊ฒฝ์จ์ผํ ๋ถ๋ถ์ด ์๋ค.
- ๋ผ์ฐํฐ์๋
import React from 'react';
import { BrowserRouter as Router, Route } from 'react-router-dom';
const Routes = () => {
return (
<Router>
<Route path="/" component={Home} />
<Route path="/movies" component={Movies} />
<Route path="/reviews" component={Reviews} />
</Router>
);
};
๊ทธ๋ฌ๋ ์ฌ๊ธฐ์์ ๋ฌธ์ ์ ์, ํํ์ด์ง์ ๋ค์ด๊ฐ์ ๋ /movies
์ /reviews
๋ํ /
๊ฐ ๋งค์นญ๋๊ธฐ ๋๋ฌธ์ 3๊ฐ์ ์ปดํฌ๋ํธ๊ฐ ๋ชจ๋ ๋ ๋๋ง๋๋ค๋ ๊ฒ์ด๋ค. /
๋ง ๋ ๋๋งํ๊ณ ์ถ์๋๋ฐ 3๊ฐ์ ํ์ด์ง ์ ๋ถ ๋ ๋๋งํ๊ฒ ๋๋ ์ผ์ด ๋ฐ์ํ๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ํฌ๊ฒ 2๊ฐ์ง๊ฐ ์๋ค.
exact
: ์ ํํ ๊ฒฝ๋ก์ ์ฌ์ฉ/
๊ฐ ํฌํจ๋๋ ๊ฒ์ด ์๋๋ผ, ์ ํํ๊ฒ/
์ด๋ผ๋ ์ฃผ์๋ฅผ ๊ฐ์ง๋ ๊ฒฝ์ฐ๋ง ๋ ๋๋งํ๋ ๊ฒ์ด๋ค. ์ฆ ๋ถ๋ถ์ ์ผ๋ก ์ผ์นํ๋ ๊ฒ์ด ์๋๋ผ ์ ํํ๊ฒ ์ผ์นํ๋ URL์ ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง์ํค๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค.
import React from 'react';
import { BrowserRouter as Router, Route } from 'react-router-dom';
const Routes = () => {
return (
<Router>
<Route exact path="/" component={Home} />
<Route path="/movies" component={Movies} />
<Route path="/reviews" component={Reviews} />
</Router>
);
};
<Switch>
: ์ฌ๋ฌ ๊ฒฝ๋ก ์ค ์ฒซ๋ฒ์งธ(up->down) ๊ฒฝ๋ก ์ ํ
<Switch>
๋ ์ฒซ๋ฒ์งธ๋ก ๋งค์นญ๋๋path
๋ฅผ ๊ฐ์ง ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋ง ์ํจ๋ค. ์ด๊ฒ์ดexact
path
์ ๋ค๋ฅธ ์ ์ ์ฒซ๋ฒ์งธ ๋งค์นญ๋ง ๋ณธ๋ค๋ ๊ฒ์ด๋ค.
import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
const Routes = () => {
return (
<Router>
<Switch>
<Route exact path="/" component={Home} />
<Route path="/movies" component={Movies} />
<Route path="/reviews" component={Reviews} />
</Switch>
</Router>
);
};
- ์๋ ์ฝ๋๋ ํํฐ๋ง์์ ์ธ์คํ๊ทธ๋จ ํ์ด์ง๋ฅผ ์ฐ๊ฒฐํ ๋ ์ฌ์ฉํ ์ฝ๋์ด๋ค.
const AppMain = () => {
return (
//routing
<Router>
<Switch>
<Route exact path="/">
<MyPage />
</Route>
<Route path="/post">
<Post />
</Route>
</Switch>
</Router>
);
};
export default AppMain;
-npm start
๋ก ํฐ๋ฏธ๋์์ ์ฒ์ ๋ฆฌ์กํธ๋ก ํ์ผ์ ์ด๋ฉด ์ง๋ ์๊ฐ๊น์ง ๋ง๋ค์๋ ๊ฒ์๊ธ ํ์ด์ง๊ฐ ๋์์๋ค. ์ด๋ ๊ทธ ํ์ด์ง๊ฐ ๋ฐ๋ก ๋จ๋๋ก ์ฒซ์๊ฐ(?..๊ธฐ์ต์ด ์ ์๋๋ค..)์ ์ค์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์์ผ ๊ฐ๋ฐ์ ์ธ๊ณ์์ <๊ทธ๋ฅ>์ด๋ผ๋ ๊ฒ์ ์๋ค๋ ๊ฒ์ ๋๊ผ๋ค... ์ธ๋๊ฐ ์ธ์คํ๊ทธ๋จ์ ์ฒ์ ์ ์ํ๋ฉด ๊ฒ์๊ธ ํ์ด์ง๊ฐ ๋จผ์ ๋์ค๋ ๊ฒ ๋ง๋์ง ํ๋กํ์ด ๋จผ์ ๋์ค๋ ๊ฒ ๋ง๋์ง ๋ฌผ์ด๋ดค๋ค. ํ๋กํ์ด ๋จผ์ ๋์ค๋ ๊ฒ ๋ง๋ค๊ณ ๋๋ตํ๋๋ฐ, ์ง๊ธ ์๊ฐํด๋ณด๋ ์๋ ๊ฒ ๊ฐ๋ค. ใ
ใ
ใ
๋ฌผ๋ก ์ฒ์์ ๋จ๋ ๊ฑด ํ์๋ผ์ธ ํ์์ด๋ผ์ ์ฐ๋ฆฌ๊ฐ ์ง๋ ์๊ฐ๊น์ง ๋ง๋ค์ด๋์๋ ํ์ด์ง๋ ์ด์ง ๋ค๋ฅด๊ธฐ๋ ํ์ง๋ง, ์ด์จ๋ ๊ฒ์๊ธ์ด ๋จผ์ ๋์ค๋ ๊ฒ ๋ง๋๋ฐ ์ธ๋๊ฐ ๊ทธ๋ด ์๋ ์์งํ๋ฉด์ ๋์ด๊ฐ๋ค. ์ญ์ ์ฐ์ฃผ์ธ๋๋ ์ต๊ณ ์ ํํฐ๋ค...๐
ReactDOM.render(
<React.StrictMode>
<AppMain />
</React.StrictMode>,
document.getElementById("root")
);
- ์ค๋ ํํฐ๋ง ๊ฑฐ์ ๋์๋ฝ์ ๋ฌธ๋ ์ธ์คํ๊ทธ๋จ๊ณผ ๊ฐ์ ๋ํ์๋น์ค๋ฅผ ๋ง๋๋ ค๋ฉด ๋ช ๋ช ์ ๊ฐ๋ฐ์๊ฐ ์ผ๋ง์ ์๊ฐ์ด ๊ฑธ๋ ค์ ๋ง๋๋ ๊ฒ์ธ์ง ๊ถ๊ธํด์ ์ธ๋ํํ ๋ฌผ์ด๋ดค๋ค. ์ธ๋๊ฐ ๋ฌผ๋ก ๋ด๋ถ์ฌ์ ์ ๋ชจ๋ฅด๋ ๊ฒ์ด๊ธด ํ์ง๋ง ์ต๊ทผ์๋ ์ ์์ผ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด ๋ง์ด ์ฐ์ด๊ธฐ ๋๋ฌธ์ ๋ด๋ถ์์๋ ํจ์ฌ ๋นจ๋ฆฌ ๋ง๋ค๊ณ ์์ฐจ๋ก์ ํผ๋๋ฐฑ์ ๊ฑฐ์ณ์ ์์ฑ๋์์ ์๋ ์๋ค๊ณ ํ๋ค.
- ์ ์์ผ(agile a.์ ์ํ,๋ฏผ์ฒฉํ) ๋ฐฉ๋ฒ๋ก : ์ ์์ผ์ ์ ์ํ ๋ฐ๋ณต ์์ ์ ํตํด ์ค์ ์๋ ๊ฐ๋ฅํ ์ํํธ์จ์ด๋ฅผ ๊ฐ๋ฐํ์ฌ ์ง์์ ์ผ๋ก ์ ๊ณตํ๊ธฐ ์ํ ์ํํธ์จ์ด ๊ฐ๋ฐ ๋ฐฉ์
2์ฃผ์ ๋ ํํฐ๋ง ๋๋๊ณ ๋ฐ๋ก ๋ด์ฉ์ ๋ฆฌ๋ฅผ ๋ชปํด์ ๋ฉฐ์น ์ง๋์ ํ๋ ค๊ณ ํ๋ ๋ด์ฉ์ด ๊ธฐ์ต์ด ์๋์ ์ ๋ฅผ ๋จน์๋ค.. ๋ฏธ๋ฆฌ๋ฏธ๋ฆฌ ๋ณต์ตํ๊ณ ํํฐ๋ง ๋ณต์ต github์ ์ ๋ก๋ํ๊ธฐ!! ์๋ก์ด ํ์ด์ง๋ฅผ ๋ง๋๋ ๊ฒ๋ ์ฌ๋ฏธ์๊ณ ์ฒ์์๋ ๋ฏ์ค๊ฒ ๋๊ปด์ก๋ reactํจ์ํํ๋ ์ต์ํด์ง ๊ฒ ๊ฐ์์ ๋ฟ๋ฏํ๋ค. 2์ฃผ์น ๋ณต์ต๋ ๋นจ๋ฆฌ ํด์ผ์ง๐ฅ๐ฅ๐