๊ฐ์
๋ฏธ์ | ๊ธฐ๊ฐ | Repository | PR & Review | github page |
---|---|---|---|---|
ํ์ด์ ๋ก๋ 2๋จ๊ณ | 23-02-17 - 23-02-27 |
Repo | PR & Review | ๐ฑ ํ์ด์ ๋ก๋ |
๐ผ๏ธ ๋๋ฉ์ธ ๋ก์ง์ ๊ทธ๋๋ก, UI๋ ๋ณ๊ฒฝ
ํ๋ฆฌ์ฝ์ค์ ๋ฏธ์ ๋ถํฐ ์ง๊ธ๊น์ง์ ๋ฏธ์ ์ ์ฝ์์์ ํ๋ฉด์ ๋์ฐ๊ณ ์ฝ์์์ ์ ๋ ฅ๊ฐ๊ณผ ์ถ๋ ฅ๊ฐ์ ๋ค๋ฃจ๋ ๊ฒ์ด์๋ค. ์ด๋ฒ ํ์ด์ ๋ก๋ 2๋จ๊ณ์์ ์ฝ์์ด ์๋๋ผ ์น์ ์ง์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ๋ฏธ์ ์ด์๋ค.
๋จ, 1๋จ๊ณ์์ ์์ฑํ์๋ ๋๋ฉ์ธ ๋ก์ง์ ์ต๋ํ ์์ ํ์ง ์์ผ๋ฉด์ UI๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ก์ง์ ์ถ๊ฐํด์ผ ํ๋ค. ๋๋ฌธ์ ๋จผ์ ๋๋ฉ์ธ ๋ก์ง์ ์์ ๊ฑด๋ค์ง ์์ผ๋ฉด์ ๋ฏธ์ ์ ์ํํ์๋ค. ํด๋น ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ๋ก๋๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ์ฒด๊ฐ ๋ ํ์ํ๋ค๋ ๊ฒ์ ๋๋ผ๊ฒ ๋์๋ค.
// LottoWebGame.js
buyLottos(purchaseAmount) {
this.lottos = [];
new Array(purchaseAmount / LOTTO.price).fill().forEach(() => {
this.lottos.push(this.publishLotto());
});
}
publishLotto() {
return new Lotto(this.generateLottoNumbers());
}
generateLottoNumbers() {
const lottoNumbers = [];
while (lottoNumbers.length < LOTTO.numbersLength) {
const number = generateRandomNumber(LOTTO.minNumber, LOTTO.maxNumber);
if (!lottoNumbers.includes(number)) lottoNumbers.push(number);
}
return lottoNumbers.sort((a, b) => a - b);
}
์ ์ฝ๋๋ ๋ก๋๋ฅผ ์ฌ๋ ๊ณผ์ ์ด ๋ด๊ธด ์ฝ๋์ด๋ค. ์ด ์ญํ ์ ๋ด๋นํ๋ ๊ฐ์ฒด๊ฐ ์์๋ค๋ฉด LottoWebGame
๊ฐ์ฒด๋ ๋์ฑ ๊น๋ํ๊ฒ ๋๋ฉ์ธ๊ณผ UI๋ฅผ ์ฐ๊ฒฐํ๋ ์ญํ ๋ก๋ง ์กด์ฌํ ์ ์๋ค๊ณ ์๊ฐํ์๋ค. ๋๋ฌธ์ 2๋จ๊ณ์์๋ LottoMachine
๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ๋ก๋๋ฅผ ์ฌ๋ ์ญํ ๊ณผ ๋ก๋๋ค์ ๋ฒํธ, ์์๋ฅผ ๊ณ์ฐํ๊ณ ๋๊ธฐ๋ ์ญํ ์ ๋ถ์ฌํ๋ค. ์ด๋ก์จ LottoWebGame
๊ฐ์ฒด๋ ๋จ์ํ ๋๋ฉ์ธ์ ์ ๋ณด๋ฅผ UI์ ์ ๋ฌํ๋ ์ญํ ๊ณผ UI์์ ๋๊ฒจ๋ฐ์ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋๋ฉ์ธ ๋ก์ง์ด ์คํ๋ ์ ์๊ฒ ๋์๋ค.
๐ HTML ๋ค๋ฃจ๊ธฐ
ํ์ ๋์ ์ ์ข์ ์ต๊ด์ div
ํ๊ทธ๋ง ์ฌ์ฉํ๋ค๋ ๊ฒ์ด๋ค. ๋ฌผ๋ก ์
๋ ฅ์ด ํ์ํ ๋ถ๋ถ์ ๋น์ฐํ form
, input
ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ง๋ง ์ ์ฒด์ ์ผ๋ก div
ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ ๋น๋๊ฐ ๋๋ค. ์ด๊ฒ์ด ์ข์ง ์์ ์ต๊ด์ด๋ผ๋ ๊ฒ์ ์์ง๋ง ๋ด์ฉ์ ์๋ง์ ํ๊ทธ๋ฅผ ์ฐพ์ ์์ฑํ๋ ๊ฒ์ ๊ท์ฐฎ์์ ๋๊ปด ๋ค์ํ ํ๊ทธ๋ฅผ ํ์ฉํ์ง ์์๋ค. ์ด๋ฒ ๋ฏธ์
์๋ div
ํ๊ทธ ๋ฟ ์๋๋ผ ๋ค์ํ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด ๋ํ ๋ค๋ฅธ ํฌ๋ฃจ๋ค๋ณด๋ค ์ ๊ทน์ ์ผ๋ก ํ์ฉํ์ง ๋ชปํด ์์ฌ์์ด ๋ง์ด ๋จ๋๋ค.
์์ผ๋ก html ํ๊ทธ๋ฅผ ๋ค๋ฃจ๋ ์ผ์ด ๋ง์ด ์์ ํ ๋ฐ, ์๋งจํฑ ํ๊ทธ๋ฅผ ์ ๊ทน์ ์ผ๋ก ์ฌ์ฉํด ๋ณด์. ์๋งจํฑ ํ๊ทธ๋? ์๋ฏธ๊ฐ ์๋ ํ๊ทธ๋ฅผ ์๋ฏธํ๋๋ฐ, ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ๋์์ง๊ณ ์น ์ ๊ทผ์ฑ๋ ๋์์ง๋ฟ๋๋ฌ ๊ฒ์์์ง์ด html๋ด์ ํ๊ทธ๋ฅผ ๋ถ์ํ ์ ์๋ ์ฅ์ ์ด ์๋ค.
์๋งจํฑ ํ๊ทธ์ ์ข ๋ฅ์ ์ค๋ช
ํ๊ทธ | ์ค๋ช |
---|---|
<header> |
์ฌ์ดํธ์ ๋จธ๋ฆฌ๋ถ๋ถ์ ์ฌ์ฉ |
<main> |
๋ฉ์ธ ์ฝํ ์ธ ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉ |
<section> |
์ ๋ชฉ๋ณ๋ก ๋๋ ์ ์๋ ๋ฌธ์์ ์ฝํ ์ธ ์์ญ์ ๊ตฌ์ฑํ๋ ์์ |
<article> |
๊ฐ๋ณ ์ฝํ ์ธ ๋ฅผ ๋ํ๋ด๋ ์์ |
<aside> |
์ข์ฐ์ธก์ ์ฌ์ด๋ ์์ญ |
<footer> |
์ฌ์ดํธ์ ๋ฐ๋ฅ๋ถ๋ถ, ์ฃผ๋ก ์ฐ๋ฝ์ฒ๋ ์ ์์ ์ ๋ณด๋ฑ์ ๊ธฐ์ ํ๋ ๋ถ๋ถ |
<hgroup> |
์ ๋ชฉ๊ณผ ๋ถ์ ๋ชฉ์ ๋ฌถ์ด์ ๋ํ๋ด๋ ์์ |
<nav> |
์น ํ์ด์ง ๋ฉ๋ด๋ฅผ ๋ง๋ค ๋ ์ฌ์ฉ |
๐จ CSS ๋ค๋ฃจ๊ธฐ
css๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํด์ html์ ์์๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ค. ์ฌ๊ธฐ์ ๋ณดํต id
๋๋ class
๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ๋จ, ์ด๋ ํ ์์์์ ์ ๊ทผํ ์ ์๋ ๊ฒ์ด๋ผ๋ฉด ๊ตณ์ด id
๋ class
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ ๊ทผํ๋ค.
#purchase-lotto ul {
display: flex;
flex-direction: column;
justify-content: flex-start;
}
#purchase-lotto li {
display: flex;
margin: 2px 0px;
align-items: center;
}
์์ ์์์์ ul
๊ณผ li
๋ id
๊ฐ purchase-lotto์ธ ํ๊ทธ ๋ด์ ์กด์ฌํ๊ธฐ ๋๋ฌธ์ #purchase-lotto ul
, #purchase-lotto li
๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ์ ์๋ค. ํ์์ ์ด๋ฐ ์ ๊ทผ์ ๋ง์ด ์ ํธํ๋ค. id
์ class
๋ฅผ ๋ฌด๋ถ๋ณํ๊ฒ ๋ถ์ฌํ๋ ๊ฒ ๋ณด๋ค ๋ ๊น๋ํ๊ณ ๋ช
๋ฃํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค. js์์ ๋
ธ๋๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ ๋ง์ฐฌ๊ฐ์ง์ด๋ค.
์ต์ํ์ id
์ class
๋ง ์ฌ์ฉํ์ฌ html์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ด ๊ด์ฐฎ์ ๊ฒ์ธ์ง๋ ์์ง ํ์คํ ์ ๋ต์ ๋ด๋ฆฌ์ง ๋ชปํ ์ํ์ด๋ค. ์์ผ๋ก ๊ณ์ ๊ณ ๋ฏผํด์ผ ํ๋ ๋ถ๋ถ์ด๊ณ ๋์ ๊ธฐ์ค์ ์ ๋ฆฝํ๋ ๊ณผ์ ์ด ํ์ํ๋ค๊ณ ์๊ฐํ๋ค. ๋ค๋ฅธ ํฌ๋ฃจ๋ค์ ์๊ฒฌ์ ์ด๋ค์ง ๊ถ๊ธํ๋ค.
๋ฐฉ๊ธ ๋๋ฐฅ์ ํตํด css ์คํ์ผ์ ์ํด id ์ ํ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ข์ง ์์ ์ด์ ์ ๋ํด ์ค๋ช ์ ๋ค์๋ค!ใ ใ ์ ์์ํ ๋๋:) ์กฐ๋ง๊ฐ ํด๋น ๋ด์ฉ์ ์ ๋ฆฌํด ๋ณด์.
๐ฟ ํ๊ทธ์ ๊ธฐ๋ณธ ์์ฑ์ด ์ ๊ฑฐ๋๋ ๋ฌธ์ !
๋ฐ๋ก ์์์ ๋ชจ๋ html ํ๊ทธ์ id
, class
๋ฅผ ๋ถ์ฌํ์ง ์์ผ๋ฉด์ ํ๊ทธ์ ์ ๊ทผ์ ํ์๋ค๊ณ ํ๋ค. ์ด๋ฐ ์ด์ ๋ก ์ธํด ๋ฐฐํฌํ๋ ๊ณผ์ ์์ ๋ฌธ์ ๊ฐ ์๊ฒผ๋ค. ๋ฐฐํฌํ๋ ๊ณผ์ ์์ ์นํฉ์ผ๋ก ์ธํด ํ๊ทธ์ ๊ธฐ๋ณธ ์์ฑ์ด ์ญ์ ๋์๊ธฐ ๋๋ฌธ์ ๋ช๋ช css์ js์์ ์์ฑํ ๋์์ด ์คํ๋์ง ์์๋ ๊ฒ์ด์๋ค.
์๋ฅผ ๋ค์ด, ์๋์ ๊ฐ์ css ์ฝ๋๊ฐ ์๋ค๊ณ ์๊ฐํด ๋ณด์.
#purchase-lotto input[type='text'] {
color: white;
font-size: 20px;
}
์์ css๋ pruchase-lotto
๋ผ๋ id๋ฅผ ๊ฐ์ง ํ๊ทธ ๋ด์ input
์ ํ์
์ด text
์ธ ์์๋ฅผ ๊ฐ์ ธ์ ์์
์ ํ๋ค. ํ์ง๋ง ๋ฐฐํฌ๋ฅผ ํ๊ณ ๋๋ type="text"
๋ input
์ ๊ธฐ๋ณธ๊ฐ์ด์๊ธฐ ๋๋ฌธ์ ์ญ์ ๊ฐ ๋์ด ์์ css์์ฑ์ด ์ ์ฉ์ด ๋์ง ์์๋ค.
์ด๋ฌํ ์ ๋๋ฌธ์, ํ๊ทธ์ ์์ฑ๊ฐ์ ๋ฐํ์ผ๋ก ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๊ฒ์ธ์ง์ ์๋ฌธ์ ํ๊ฒ ๋์๋ค. html์ด ์กฐ๊ธ์ ๋ณต์กํด์ง๋๋ผ๋ html ํ๊ทธ์ id
, class
๊ฐ ์์ผ๋ฉด ํ์คํ ์์ ์ ํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ css, js์์๋ ๋ณด๋ค ์์ํ๊ฒ ๊ฐ์ ธ์ฌ ์ ์๊ณ ๊ฐ๋
์ฑ๋ ๋ฐ์ด๋ ์ ์๋ค๋ ์๊ฐ์ ํ๊ฒ ๋์๋ค.
ํด๊ฒฐ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ์ด ๋ ๊ฐ์ง๊ฐ ์๋ค.
- ์นํฉ ์ค์ ๋ณ๊ฒฝ
id
,class
๋ฅผ ์ฌ์ฉํ์ฌ css์ js์์ ํด๋น ์์์ ์ ๊ทผ
์ด ์ค ๋ด๊ฐ ์ ํํ ๋ฐฉ๋ฒ์ ์นํฉ์ ์ค์ ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด์๋ค.
plugins: [
new CleanWebpackPlugin(),
new HtmlWebpackPlugin({
template: './index.html',
minify: {
removeRedundantAttributes: false,
},
}),
],
์นํฉ์ ํ๋ก๊ทธ์ธ ์ค HtmlWebpackPlugin
์ minfy
์์ removeRedundantAttributes
๋ฅผ false๋ก ๋ฐ๊พธ์๋ค. ์์ง ์นํฉ์ ์ ๋ค๋ฃจ์ง ๋ชปํ์ฌ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ก์คํ์ ๋์์ ๋ฐ์๋ค. ์ ๋ต์ ๋ฐ๋ก ์๋ ค์ฃผ๋ ๊ฒ์ด ์๋๋ผ ํจ๊ป ํด๋ต์ ์ฐพ์๊ฐ๋ ๊ณผ์ ์ด์๊ธฐ ๋๋ฌธ์ ๋์๊ฒ ํฐ ๋์์ด ๋์๋ค.
1์ฐจ ๋ฆฌํฉํฐ๋ง์ ๋ฐ์ ํ, id
๋ฅผ ์ฌ์ฉํ์ฌ ์์์ ์ ๊ทผ์ ํ ์ ์๋๋ก ์์ ํ์๋ค. ์๋ฌด๋ฆฌ ๋ด๋ ์นํฉ์ ์์ ๋ณด๋ค๋ id
, class
๋ฅผ ์ ๊ทน ์ฌ์ฉํ๋ ๊ฒ์ด ์ณ๋ค๊ณ ์๊ฐํ๋ค. ํ์ํ ์ํฉ์ ๋ฐ๋ฅธ ํ๋ช
ํ ์ ํ์ ๋ด๋ฆฌ๋๋ก ํ์.
๐ ์ํ ์
- ๋๋ฉ์ธ ๋ก์ง ๋ณ๊ฒฝ์ ์ต์ํํ๊ธฐ ์ํด ๋ ธ๋ ฅํ์๋ค.
- html ๋๋๋ง์ ๋ํด ๊ณ ๋ฏผํ์๋ค.(์ฝ๋ ๋ฆฌ๋ทฐ์ ์ด์ ๋ํ ์์ธํ ๋ด์ฉ์ด ์์)
๐ ์์ฌ์ด ์
- ์ํ๋ ๋งํผ ๋ฆฌํฉํฐ๋ง์ ํ์ง ๋ชปํ๋ค.
- css ์ ํ์ ๋ํด์ ๊ธฐ์ค์ด ํ์ค์น ์๋ค.
- id์ class ์ฌ์ฉ์ ๋ํด ๋จธ๋ฆฟ์์ด ํผ์กํ๋ค.
- ๊ธ์ ์ด๋ป๊ฒ ์จ์ผ ํ๋์ง ์์ง ์ ๋ชจ๋ฅด๊ฒ ๋ค.
- ๊ธ์ด ์ค๊ตฌ๋๋ฐฉ์ธ ๋๋์ด ๋ ๋ค.
- ์ ์ ์ด์กฐํจ์ ๋๋๋ค.
๐ ์์ผ๋ก์ ๊ฐ์ค
- ์ด์กฐํจ์ ๋๋ผ์ง ๋ง์.
- ๋ด ํ ๊ฒ์ ์ ํ๊ณ ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ๋ ธ๋ ฅํ์.
- ์์ด ์ค์ํ์ง ์๋ค.
'๐ ์ฐ์ํํ ํฌ์ฝ์ค > Level1' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ๋ฒจ1 ์ ์ฌ ๋ญ ๋จน์ง - step2 (0) | 2023.04.14 |
---|---|
๋ ๋ฒจ1 ์ ์ฌ ๋ญ ๋จน์ง - step1 (0) | 2023.04.14 |
๋ ๋ฒจ1 ํ์ด์ ๋ก๋ - step1 (0) | 2023.04.13 |
๋ ๋ฒจ1 ์๋์ฐจ ๊ฒฝ์ฃผ - step2 (0) | 2023.04.10 |
๋ ๋ฒจ1 ์๋์ฐจ ๊ฒฝ์ฃผ - step1 (0) | 2023.04.10 |