CodeSquad Day 72 : Team Project 2
CodeSquad๐นDay 72
Team Project 2์ผ์ฐจ - Create React App & Styled Components
์ค๋์ ์ฝ๋์ค์ฟผ๋ ์ผํฐ๋ฅผ 2022๋ ๋ค์ด์ ์ฒ์์ผ๋ก ๊ฐ๋ฐฉํ๋ ๋ ์ด์๋ค. ํ๋ฉด์ผ๋ก๋ง ์ ํ๋ ์ฝ์ฟผ ๋ฉค๋ฒ๋ค ๊ทธ๋ฆฌ๊ณ ํฌ๋กฑ๊ณผ ํธ๋ ์ค, ๋งค๋์ ์ธ ํด๋ก์ด๋ฅผ ์ค๋ฌผ๋ก ๋ณด๋ ์ ๊ธฐํ๊ธฐ๋ ํ๊ณ ๋ฐ๊ฐ์ ๋ค. ๋น๋๋ฉด์ด ์๋์์ ์์ ์ ์ฝ๋์ค์ฟผ๋์๋ค๋ฉด ์ด ๊ณต๊ฐ์ ์์ฃผ ์๊ฒ ์ง?
์ค๋ฌผ๋ก ์ฒ์ ๋ง๋๋ฉด ์ด์ํ ๊น ๊ฑฑ์ ํ์ง๋ง ๋ค๋ค ๋ฐ๊ฐ๊ฒ ์ธ์ฌํ๊ณ ์ด์ผ๊ธฐ๋ฅผ ๋๋์์ด์ ๊ทธ๋ฐ ๊ฑฑ์ ์ ๊ธ์ ์ฌ๋ผ์ก๋ค. ํ๋๊ฐ ๊ฒ๋ํ์ด์ ์ ์ํด์ ์ ์ด๋ฏธ, ๋ํจ, ํฌํค์๊ฒ ์นด๋ฉ๋ผ๋ฅผ ์ผ๊ณ ์ผํฐ ํฌ์ด๋ ์์ผ์ฃผ์๋ค.
์ด๋ ๊ฒ ์ฆ๊ฑฐ์ด ์๊ฐ์ ๋ณด๋ด๋ค๊ฐ, 3์์ฏค๋ถํฐ๋ ๋ฐฑ์๋์ธ ๋๊ธฐ, ์ค๊ณผ ํจ๊ป ์๋ฆฌ์ ์์์ ์คํฌ๋ผ์ ํ๊ณ ๊ฐ๋ฐ์ ์งํํ๊ธฐ ์์ํ๋ค. ๋งค๋ฒ ์จ๋ผ์ธ์ผ๋ก๋ง ํ๋ ์คํฌ๋ผ์ด์๋๋ฐ ์ด๋ ๊ฒ ์คํ๋ผ์ธ์์ ์์ํ๊ฒ ํ๋ ๋๋์ด ์๋ฌ๋๋ค.
์คํฌ๋ผ ํ์๋ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ๋ก์ ํธ ์ ์ ์ ๋์ ํ๋ค. ํ๋์ ํจ๊ป ์์ฑํ๋ ํ๋ก์ ํธ ๋ชฉ๋ก๋ค์ ์ด์ ฏ๋ฐค์ ๋ด๊ฐ ์ด์๋ก ์ฎ๊ฒจ๋์๋๋ฐ ํ์คํ ์ด๋ฐ ์์ผ๋ก ํด์ผ ํ ์ผ๋ค์ด ๊ฐ์์ ์ผ๋ก ๋ณด์ด๋๊น ์ผ ์งํ์ด ์ฐฉ์ฐฉ ์ด๋ฃจ์ด์ ธ์ ์ข์๋ค. ์์ผ๋ก๋ ๋ฌด์จ ํ๋ก์ ํธ๋ฅผ ํ๋ ์ด๋ฐ ์์ผ๋ก ์ผ์ ๊ด๋ฆฌ๋ฅผ ํ๋ฉด ํ์ ํ ๋ ํนํ ๋น์ ๋ฐํ ๊ฒ ๊ฐ๋ค.
์ฐ์ ํ๋์ ์ปดํจํฐ๋ก npx create react app์ ํด์ boilerplate๋ฅผ ์์ฑํ๋ค. ํ์ ์๋ ํ์ผ, ์ฃผ์, ์ฝ๋ ๋ฑ์ ์ง์ ๋ค. ๋ prettierrc ํ์ผ๋ ๋ง๋ค์๋ค. lint ์ค์ ์ ํ ๊น ๊ณ ๋ฏผํ๋ค๊ฐ ๋๋ฌด ๋ณต์กํด์ง ๊ฒ ๊ฐ์์ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ์ ์ธํ๋ค. ์นธ์ด ์์ด๋น์๋น lint๋ฅผ ์ผ๋ค๊ฐ ๋๋ฌด ๋นก์ธ์ ๊ฐ๋ฐ์ ์ ์ ๋ป ํ๋ค๋ (ใ ใ ใ ) ์ด์ผ๊ธฐ๋ฅผ ๋ฃ๊ณ ์ด๊ฑด ๋ค์์ ๊ฑด๋๋ฆฌ๊ธฐ๋ก ํ๋ค.
๊ธฐ๋ณธ์ ์ธ ์ ์ ์ ๋ง์น ํ, ์ด์ Styled Components๋ฅผ ์ ์ฉํ๊ธฐ ์ํด์๋ ๊ณต๋ถ๊ฐ ์ข ํ์ํ๋ค. Sass๋ฅผ ์ ์ฉํ ์ง Module์ ์ ์ฉํ ์ง์ ๋ํ ๊ณ ๋ฏผ์ด ๋ง์๋๋ฐ ํฌ๋กฑ์ด Styled Components๋ฅผ ์ถ์ฒํด ์ฃผ์ ์ ์ด๊ฒ์ ํ๊ธฐ๋ก ํ๋ค. ๋๋ ์์ ์ ํ๋ก์ ํธ์์ ์ ์ฉํด ๋ณธ ์ ์ด ์์๋๋ฐ ์ ๋ง ์์ฃผ ๊ธฐ์ด์ ์ธ ์ฌ์ฉ๋ฒ๋ง ์๊ณ ์ผ๋ถ์ ๊ธฐ๋ฅ๋ง ์ด ๊ฒ์ด์ด์ ์ถ๊ฐ์ ์ธ ๊ณต๋ถ๊ฐ ํ์ํ๋ค. ์ ์ญ ์คํ์ผ๋ง์ ์ํด createGlobalStyle์ด๋ผ๋ ํจ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. Styled Components๋ฅผ ๋ฐฐ์ฐ๋ฉด์ Tagged Templates๋ผ๋ ๊ฒ๋ ํจ๊ป ์๊ฒ ๋์๋ค.
Template literals (Template strings) - JavaScript | MDN
Template literals are literals delimited with backtick (`) characters, allowing for multi-line strings, for string interpolation with embedded expressions, and for special constructs called tagged templates.
developer.mozilla.org
MDN์ ์ค๋ช ์ ๋ฐ๋ฅด๋ฉด Tagged Templates๋ Template literals์ ์ง๋ณด๋ ํํ๋ผ๊ณ ํ๋ค. ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ ํจ์๋ก template literal์ ๋ถ์ํ ์ ์๋ ๊ฒ์ด๋ค. ์ด๋ป๊ฒ ๋ถ์ํ ์ ์๋ค๋ ๊ฑธ๊น? ์ฒ์์๋ ์ค๋ช ๋ง ๋ฃ๊ณ ์ ์๋ฟ์ง ์์๋ค.
const name = 'Millie'
function greet() {
return 0;
}
greet`Hello, nice to meet you ${name}!`
์ผ๋ฐ์ ์ผ๋ก ํจ์๋ฅผ ์คํํ ๋ greet() ์ด๋ฐ ์์ผ๋ก ๊ดํธ๋ฅผ ๋ถ์ฌ์ ์คํํ์ง๋ง, ๊ดํธ ๋์ ์ ๋ฌธ์์ด์ ๋ถ์ฌ์ ์คํํ ์ ์๋ ๊ฒ์ด๋ค! ์ด๊ฒ์ด ๋ฐ๋ก Tagged Literal. ๋ฆฌํฐ๋ด์ ํ๊ทธ๋ฅผ ํด ์ฃผ๋ ๊ฒ์ด๋ค. ์์ ๊ฐ์ด ํจ์๋ฅผ ์คํํ ๊ฒฝ์ฐ greet ํจ์์ ๋ฆฌํด๊ฐ์ธ 0์ด ๋ฆฌํด์ด ๋๋ค.
์์ ๊ฐ์ด Tagged Literal ๋ฌธ๋ฒ์ ํ์ฉํ๋ฉด ๋ฌธ์์ด์ ๋ถ์ํด์ ๋จ์ด์ ์์๋ฅผ ๋ณ๊ฒฝํ๊ฑฐ๋, ๋จ์ด๋ฅผ ์ ๊ฑฐํ๊ฑฐ๋ ํน์ ๋ณ์์ ์์น๋ ์ฝ๊ฒ ์ฎ๊ธธ ์ ์๊ฒ ๋๋ค. Tagged Literal์ ์ฐ์ง ์๋๋ค๋ฉด ์ ๊ทํํ์์ด๋ ๋ค๋ฅธ ๋ฉ์๋๋ฅผ ํ์ฉํด์ผ ํ๋๋ฐ ES6์ ์ด ๋ฌธ๋ฒ์ด ๋ฑ์ฅํ์ฌ ๋ฌธ์์ด์ ๋ค๋ฃฐ ๋ ์ข ๋ ์์ํ๊ฒ ๋ ๊ฒ์ด๋ค.
ํจ์์ ์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ฌธ์์ด์ด ์๋ ค์ ๋ฐฐ์ด๋ก ๋ค์ด๊ฐ๊ณ , ๋ ๋ฒ์งธ ์ธ์๋ถํฐ๋ ๋ณ์์ด๋ค.