๊ฐ์
๋ฏธ์ | ๊ธฐ๊ฐ | Repository | PR & Review | github page |
---|---|---|---|---|
์ ์ฌ ๋ญ ๋จน์ง ๋ฏธ์ 1๋จ๊ณ | 23-04-11 - 23-04-13 | Repo | PR & Review | ๐ ์ ์ฌ ๋ญ ๋จน์ง |
๐ ๋ฏธ์ ํ๊ณ
๋ ๋ฒจ 2์ ์ฒซ ๋ฒ์งธ ๋ฏธ์ ์ ๋ ๋ฒจ 1์์ ์ด๋ฏธ ํ์๋ ์ ์ฌ ๋ญ ๋จน์ง ๋ฏธ์ ์ด๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ์ ํ๋ ๋ ๋ฒจ 1์ ์ ์ฌ ๋ญ ๋จน์ง ๋ฏธ์ ์ ์ด๋ฒ์๋ ๋ฆฌ์กํธ๋ก ๊ตฌํ์ ํด์ผ ํ๋ค. ์ ์ฌ ๋ญ ๋จน์ง ๋ฏธ์ ์ ๋ค์๊ณผ ๊ฐ์ ๋ ๋จ๊ณ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- Class Component๋ก ๊ตฌํ
- Function Component๋ก ๊ตฌํ
์ด์ค Class Component๋ก ์ ์ฌ ๋ญ ๋จน์ง์ 1๋จ๊ณ๋ฅผ ์งํํ์๋ค. React๋ฅผ ๋ช ๋ฒ ๋ค๋ฃจ์ด๋ณธ ์ ์ด ์์ง๋ง Class Component๋ฅผ ์ง์ ๋ค๋ฃจ์๋ ์ ์ ์์๊ธฐ ๋๋ฌธ์ ๊ธฐ๋๋ฐ ๊ฑฑ์ ๋ฐ์ ๊ฐ์ ์ ๊ฐ์ง๋ฉฐ ๋ฏธ์ ์ ์์ํ๋ค.
๋ฏธ์ ์ ํ์ ์๊ตฌ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ ๋ฒจ 1์ ์ฐธ๊ณ ํ์ฌ REQUIREMENTS.md์ ์๊ตฌ ์ฌํญ์ ๋์ถํ๋ค.
- Class Component๋ฅผ ์ฌ์ฉํ๋ค.
- ์ด๊ธฐ ๋ก๋ฉ ์ ์ด์ ๊ฐ์ด Local Storage์ ์กด์ฌํ๋ค๋ฉด ์ด๊ธฐ ๊ฐ์ผ๋ก ์ ์ฉํ๋ค.
- mockData.json์ ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ์ฌ, ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์ ํ ํ๋ค.
- ์ต์ ๊ฐ ์นดํ ๊ณ ๋ฆฌ ๋ณ๋ก 3๊ฐ ์ด์์ ์์์ ์ mockData์ ๋ฑ๋กํ๋ค.
- ์นดํ ๊ณ ๋ฆฌ๋ณ๋ก ์ ๋ ฌํ๊ฑฐ๋ ์ด๋ฆ์, ๊ฑฐ๋ฆฌ์์ผ๋ก ์ ๋ ฌํ ์ ์๊ฒ ๋ ๋๋ง ํ๋ค.
๋ ๋ฒจ 1์์ ๋ค๋ฃจ์๋ ์์์ ์ถ๊ฐ, ์ญ์ , ์์ฃผ ๊ฐ๋ ์์์ ๋ฑ๋ก ๊ธฐ๋ฅ์ ์๋ค. ๋ณด๋ค ๋ฆฌ์กํธ๋ฅผ ์ฒดํํ๋ฉฐ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ์ต๋ํ๋ ๊ฒ์ ์ง์ค์ ํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๋ค. ํ์ง๋ง ์คํ์ผ ์ปดํฌ๋ํธ, ํ์ ์คํฌ๋ฆฝํธ์ ๋ง์ ์๊ฐ์ ์์๋ค. ํ์ ์คํฌ๋ฆฝํธ๋ ์ค์ํ ๊ฐ๋ ์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ์ ๋ง์ด ์๋ ๊ฒ์ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๋ค. ํ์ง๋ง ์คํ์ผ ์ปดํฌ๋ํธ ๊ฐ์ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ง์ฐฉ์ ํ ์ ์ด ์์ฝ๊ฒ ๋๊ปด์ก๋ค. ์คํ์ผ ์ปดํฌ๋ํธ๋ ์ดํ์ ๋ง์ด ๋ค๋ฃฐ ์ ์์ผ๋ ํ์ฌ๋ ๋ฆฌ์กํธ์ ๊ตฌ์กฐ, ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ์ ๋์ฑ ์ง์ค์ ํ์.
eslint ์ค์ ์์๋ ์ด๋ ค์์ ๊ฒช์๋ค. react์ ๊ด๋ จ๋ eslint๋ฅผ ์ค์นํ๊ณ ์ค์ ์ ์งํํ์๋ค. ์์กฐ๋กญ์ง ์์์ง๋ง ์ค์ ์ด ์์ฑ๋์๋ค๊ณ ์๊ฐํ๋ ์๊ฐ, ๋ฆฌ์กํธ ์ปดํฌ๋ํธ๊ฐ Function Component๊ฐ ์๋๋ผ๋ eslint error๋ฅผ ๋ง์ฃผํ๊ฒ ๋์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๋ ๊ฒ๋ ํ๋์ ๋ฐฉ๋ฒ์ด์ง๋ง ๋ ์ด์ eslint์ ์๊ฐ์ ์์ง ์๊ธฐ๋ก ํ๋ค. ๋๋ฌธ์ eslint๋ฅผ ๊ฑท์ด๋ด๊ณ ๋ฏธ์ ์ ๊ธฐ๋ฅ ๊ตฌํ์ ์์ํ๋ค. 2๋จ๊ณ์์๋ ๋ค์ eslint๋ฅผ ์ค์ ํ ์๊ฐ์ด๋ค.
๋ชจ๋ฌ ์ปดํฌ๋ํธ์ ๊ตฌ์กฐ์ ๋ํ ์์ฌ์์ด ๋จ์์๋ค. ๋จ์ง ๋ ์คํ ๋์ ์ ๋ณด๋ฅผ ์ํ ๋ชจ๋ฌ ์ปดํฌ๋ํธ์ด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ ๋ณด๋ฅผ ๋ด๋ ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ก์์ ์ญํ ์ ํ์ง ๋ชปํ๋ค. ์ฌ์ฌ์ฉ์ด ํธํ๊ฒ ์ด๋ฅผ 2๋จ๊ณ์์ ๊ฐ์ ํด ๋ณผ ์๊ฐ์ด๋ค.
๐ ํด๋ ๊ตฌ์กฐ
์์ผ๋ก ๊ณ์ ๊ณ ๋ฏผํด๋ด์ผ ํ ๋ถ๋ถ ์ค ํ๋๊ฐ ํด๋ ๊ตฌ์กฐ๋ผ๊ณ ์๊ฐํ๋ค. ํ๋ก์ ํธ๊ฐ ์ปค์ง๋ฉด ์ปค์ง์๋ก ์ด๋ค ํด๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋๋์ ๋ฐ๋ผ ๊ด๋ฆฌํ๊ธฐ ์์ํด์ง ์ ์๊ณ ์ด๋ ค์์ง ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ค์ ๋ก ํฐ์ฒ์บ ํด๋ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด๋ฉด ์๋ง ๊ทธ ์์ฒด๋ผ ํ ์ ์๋ค. ๋๋ฌธ์ ์ด๋ฒ ๊ธฐํ์ ์ข์ ํด๋ ๊ตฌ์กฐ์ ๋ํด ์๊ฐํ๊ณ ์ด๋ฅผ ์ค์ ํฐ์ฒ์บ์๋ ์ ์ฉํด ๋ณผ ์๊ฐ์ด๋ค.
components ํด๋์ common ํด๋๋ ๋ชจ๋ ์ปดํฌ๋ํธ์์ ๊ณตํต์ผ๋ก ํ์ํ ์ปดํฌ๋ํธ๋ฅผ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ components ํด๋์๋ common ํด๋๋ฟ ์๋๋ผ restaurant ํด๋๊ฐ ์๋๋ฐ ์ด๋ page๋ง๋ค ํ๋์ฉ ๊ฐ์ง๋ ํด๋๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. ํ์ฌ ๋ฏธ์ ์ ๋จ์ผ ํ์ด์ง๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ ๋๋ฌธ์ `/`๊ฐ home์ด๋ค. ๊ทธ๋์ home์ผ๋ก ํด๋ ์ด๋ฆ์ ์ ํ ์๋ ์์์ง๋ง ์กฐ๊ธ ๋ ์๋ฏธ๋ฅผ ๋ถ์ฌํ๊ธฐ ์ํด restaurant์ผ๋ก ํ์๋ค.
ํ์ฌ ๋ชจ๋ ์ปดํฌ๋ํธ์์ styled-components๋ฅผ ์ฌ์ฉํ๊ณ ์๋๋ค. styled-components๋ฅผ ๋ฐ๋ก ๋ถ๋ฆฌ๋ฅผ ํด๋ณด๋ ๊ฒ์ 2๋จ๊ณ์์ ์๋ํด๋ณด๊ณ ์ ํ๋ค.
constants, domain, style, utils๋ ์ญํ ์ ๋งก๊ฒ ๋๋๊ธฐ ์ํด ํ์ด์ ํจ๊ป ๊ณ ๋ฏผ์ ํ๋ค.
๐ช ์์๋ฅผ ํ์ ์ผ๋ก ๋ง๋ค๊ธฐ
์์์ ์ ์นดํ ๊ณ ๋ฆฌ๋ "์ ์ฒด, ํ์, ์ค์, ์ผ์, ์์, ์์์, ๊ธฐํ"์ด๋ค. ์ด๋ ์ธ๋ถ ๊ฐ์ ์ํด ๋ณ๊ฒฝ๋์ง ์๋ ๊ฐ์ด๋ค. ๋๋ฌธ์ ์์๋ก ๊ด๋ฆฌ๋ฅผ ํด์ผ ํ๋ค. ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ํ๋ฅผ ํ์๋ค.
export const CATEGORIES = {
ALL: '์ ์ฒด',
KOREAN: 'ํ์',
CHINESE: '์ค์',
JAPANESE: '์ผ์',
WESTERN: '์์',
ASIAN: '์์์',
ETC: '๊ธฐํ',
} as const;
์ด๋ ๊ฒ ๋ง๋ ์์ CATEGORIES๋ฅผ ํตํด ์นดํ ๊ณ ๋ฆฌ์ ํ์ ์ ๋ง๋ค์ด ์ฌ์ฉํ๋ค. ์ฆ, ์นดํ ๊ณ ๋ฆฌ๋ฅผ ์ํ ํ์ ์ ๋ฐ๋ก ๋ง๋๋ ๊ฒ์ด ์๋๋ผ ์ด๋ฏธ ๋ง๋ค์ด์ง ์์๋ฅผ ํ์ฉํ์ฌ ํ์ ์ ๋ง๋ค์๋ค.
// Bad
type Categories = "์ ์ฒด" | "ํ์" | "์ค์" | "์ผ์" | "์์" | "์์์" | "๊ธฐํ"
// Good
type Categories = (typeof CATEGORIES)[keyof typeof CATEGORIES];
์ด์ ๊ฐ์ ์ฌ์ฉ์ ์ฅ์ ์ด๋ผ๋ฉด ์นดํ ๊ณ ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ค ํ๋๋ผ๋ ํ์ ์ ์์ ํ์ง ์์๋ ๋๋ค๋ ๊ฒ์ด๋ค.
๐ ํ์ ์ขํ๊ธฐ
์๋์ ๋ด์ฉ์ ๋ฏธ์ ์ ์ ์ถํ๊ณ ๋ฆฌํฉํฐ๋งํ ๊ฒ์ด๋ค.
SelectBox๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ์ด๋ค. SelectBox ์ปดํฌ๋ํธ๋ options์ด๋ผ๋ props๋ฅผ ๋ฐ๋๋ค. ๋๋ฌธ์ options์ ํ์ ์ ์ ํด์ค์ผ ํ๋ ์ํฉ์ด ์๊ธด๋ค. ์ฒ์์๋ string[]์ผ๋ก ํด์ฃผ์๋ค. ํ์ง๋ง ํ์ ์ ๋ ์ขํ๊ณ ์ถ์๋ค.
type Props = {
options: string[]
}
์นดํ ๊ณ ๋ฆฌ์ options์๋ ์ ์ฒด, ํ์, ์ค์... ์ด ์๊ณ ์ ๋ ฌ์ options์๋ ์ด๋ฆ์, ๊ฑฐ๋ฆฌ์์ด ์๋ค. ์ด๋ฌํ options๋ฅผ ์ ๋์จ์ ๋ง๋ค์๋ค. ์ด๋ ํ options์ด ๋์ด์ฌ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ค.
type Props<T> = {
options: T[];
};
class SelectBox<T extends string> extends Component<Props<T>> {
// ...
}
options๋ string์ด์ด์ผ ํ๊ธฐ ๋๋ฌธ์ extends string์ด ํ์ํ๋ค.
๐ฌ ํ์ดํ๋ก๊ทธ๋๋ฐ ์งํ ๊ณผ์
๋ ๋ฒจ 2์ ์ฒซ ๋ฒ์งธ ํ์ด๋ ํ์ธ์ด๋ค. ํ์ธ๊ณผ ํจ๊ป ํด๋ ๊ตฌ์กฐ๋ฅผ ์๊ฐํ๊ณ ์ด๋ป๊ฒ ์ปดํฌ๋ํธ๋ฅผ ๋๋์ด์ผ ํ ์ง ์ด์ผ๊ธฐ๋ฅผ ํ์๋ค. ์ด์ ์ ๋์ ๋์ ์ต๊ด์ด๋ผ๊ณ ํ๋ฉด ์ด์ผ๊ธฐ ์์ด ๋ฐ๋ก ์ฝ๋๋ถํฐ ์์ฑํ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ์ด๋ฒ์๋ ๊ทธ๋ฌ์ง ์์๋ค. ๋จผ์ ๊ทธ๋ฆผ์ ํตํด ๋ด๊ฐ ์๊ฐํ๋ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๊ณ ํ์ธ์ ์๊ฒฌ์ ๋ค์ผ๋ฉฐ ์๋ก์ ์๊ฐ์ ๋ง์ถฐ๋๊ฐ๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถํ๋ฉด์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ์ฐ๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๊ณ์ ๋จธ๋ฆฟ์์ ๋งด๋๊ณ ์๋ ์ํ์ด๋ค. ์์ง ํ์ ์ ๋ํด ์ต์ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ ์ ๋ํ ๋์ ์๊ฐ์ ํ์ธ์๊ฒ ์ ๋ฌํ๋ ๊ฒ์ด ํ๋ค์๋ค. ๋ด๊ฐ ์ ๋๋ก ์ค๋ช ์ ํ์ง ๋ชปํ๋ ํ์ธ๋ ๋ง์ ํผ๋์ ๊ฐ์ก์ ๊ฒ์ด๋ค. ์ด๋ฌํ ์ ์ด ์ด๋ฒ ํ์ดํ๋ก๊ทธ๋๋ฐ์์ ์์ฌ์ด ์ ์ด๋ค.
๋ชฉ์์ผ ์ ์ถ๋ ์ด ๋๊ณ , ํ์ธ์ด ๋ชจ๋ฌ ์ปดํฌ๋ํธ์ ๋ํ ์์ฌ์์ ๋งํ๋ค. ์ฌ์ฌ์ฉ์ ํ ์ ์๋ ๋ชจ๋ฌ ์ปดํฌ๋ํธ์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ๊ฐ์ ํ๊ณ ์ถ๋ค๋ ๊ฒ์ด์๋ค. ๋๋ ๋์๋ฅผ ํ์ง๋ง ๊ณง ์ ์ถ ์๊ฐ์ด ๋ค๊ฐ์ค๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๋ฐฐํฌ๋ฅผ ํด์ผ ํ๊ณ PR, ํผ๋๋ฐฑ์ ์์ฑํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ 2๋จ๊ณ์์ ํ๊ธฐ๋ก ํ๋ค. ์คํ์ผ ์ปดํฌ๋ํธ์ ThemeProvider์ ์๊ฐ์ ํ ์ ํ์ง ์์๋๋ผ๋ฉด ์ถฉ๋ถํ ํ ์ ์๋ ์๊ฐ์ด ์์์ ๊ฒ์ด๋ค. ThemeProvider๋ ๋ด๊ฐ ํ์๊ณ ํด์ ํ์ง๋ง ๊ฒฐ๊ตญ์ ํ์ง ์์ ๊ธฐ๋ฅ์ด๋ค. ๋ด ์์ฌ์ด ๋๋ฌด ์ปธ๋ ํ์ดํ๋ก๊ทธ๋๋ฐ์ด์๋ค. ํ์ต ๋ชฉํ์ ๊ด๋ จ ์๋ ๊ฒ์ ์์ฌ์ ๊ฐ์ง์ง ๋ง์. ํ์ดํ๋ก๊ทธ๋๋ฐ ์์ฒด์ ์ง์คํด ๋ณด์.
๐ ์ํ ์
1. ํ์ ์ ์ฌ์ฌ์ฉ์ ๋ํด ๋ง์ ๊ณ ๋ฏผ์ ํ๋ค.
2. ํด๋ ๊ตฌ์กฐ, ์ปดํฌ๋ํธ ๊ตฌ์กฐ์ ๋ํด ํ์ด์ ์๊ฐ์ ๋ง์ถฐ๋๊ฐ๋ค.
๐ ์์ฌ์ด ์
1. eslint ์ค์ ์ ์ค๊ฐ์ ํฌ๊ธฐํ๋ค.
2. ๋ชจ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๋ค.
3. ํ์ต ๋ชฉํ์ ๋ฒ์ด๋ ๊ฒ์ ์ง์ค์ ํ์ฌ ์๊ฐ์ ๋ญ๋นํ๋ค.
'๐ ์ฐ์ํํ ํฌ์ฝ์ค > Level2' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ - Step1 (0) | 2023.05.27 |
---|---|
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step3 (0) | 2023.05.15 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step2 (1) | 2023.05.09 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step1 (4) | 2023.04.24 |
๋ ๋ฒจ2 ๋ค์, ์ ์ฌ ๋ญ ๋จน์ง - Step 2 (11) | 2023.04.21 |