๊ฐ์
๋ฏธ์ | ๊ธฐ๊ฐ | Repository | PR & Review | github page | storybook |
---|---|---|---|---|---|
ํ์ด๋จผ์ธ ๋ฏธ์ 1๋จ๊ณ | 23-04-18 - 23-04-23 | Repo | PR & Review | ๐ณ ํ์ด๋จผ์ธ | ๐์คํ ๋ฆฌ๋ถ |
๋ฏธ์ ํ๊ณ
๋ฆฌ์กํธ ์จ๋ณด๋ฉ ๋ฏธ์ ์ด ๋๋๊ณ ๋ ๋ฒ์งธ ๋ฏธ์ ์ธ ํ์ด๋จผ์ธ ๋ฏธ์ ์ด ์์๋์๋ค. ํ์ด๋จผ์ธ ๋ฏธ์ ์ ์ด 3๋จ๊ณ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ์ง๊ธ๊น์ง๋ 2๋จ๊ณ๊ฐ ๋ง์ง๋ง์ด์๋๋ฐ, 3๋จ๊ณ๊น์ง ์๋ ๊ฒ์ ๋ณด๋ ํ๋์ ์๋น์ค์ ๋ํด์ ๋ ๋ง์ ๊ณ ๋ฏผ์ ํ ์ ์๊ฒ ๋ ๊ฒ ๊ฐ๋ค.
ํ์ด๋จผ์ธ ๋ฏธ์ ์ ํ์ ์๊ตฌ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. Storybook์ผ๋ก UI ์ปดํฌ๋ํธ ๋ ๋๋ง
2. REQUIREMENTS.md์ ์๊ตฌ ์ฌํญ ๋์ถ
3. ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ Component ์์ฑ
๐ Storybook
์๋ก์ด ํค์๋๊ฐ ๋ฑ์ฅํ๋ค. ๋ฐ๋ก Storybook์ด๋ค. Storybook์ UI ์ปดํฌ๋ํธ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ธ๋ถ์์ ๋ณผ ์ ์๋๋ก ๋์์ฃผ๋ ํ ์คํธ ๋๊ตฌ์ด๋ค. ์ด๋ ์ ํ์ํ ๊น? ๋ช ๊ฐ์ง ์ ๋ฆฌ๋ฅผ ํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ปดํฌ๋ํธ ์ฃผ๋ ๊ฐ๋ฐ(CDD)์ ํ ๋ ์ ์ฉํ๋ค.
2. ๋ง๋ ์ปดํฌ๋ํธ๊ฐ ์ ์์ ์ผ๋ก ๋์ํ๋์ง ๋น ๋ฅด๊ฒ ํ์ธํ ์ ์๋ค.
3. ๋ฐฐํฌ๋ฅผ ํ ์ ์์ด ๊ธฐํ์, ๋์๋์ด์ ์ํตํ ์ ์๋ค.
์ด๋ฌํ ์ฅ์ ์ ๋๋ผ๊ณ ์ 1๋จ๊ณ ๋ฏธ์ ์ Storybook๋ฅผ ํ์ฉํ CDD๋ก ์งํํ์๋ค. ์ด๊ธฐ ์ค์ ์์ ๋ฒ๋ฒ ๊ฑฐ๋ฆผ์ ๋๋ผ๊ณ ๋ฐฐํฌํ๋ ๊ณผ์ ๋ ์ฝ์ง ์์์ง๋ง ์ฌ๋ฐ๋ ๊ฒฝํ์ ํ์๋ค. ๋ฐฐํฌ๋ ์คํ ๋ฆฌ๋ถ์ ๋ณด๋ฉด ๋ค์ํ ์ํฉ์ ์ปดํฌ๋ํธ๋ฅผ ํ์ธํ ์ ์๋ค. ํ์คํ ๊ท๋ชจ๊ฐ ํฐ ํ๋ก์ ํธ์ธ ๊ฒฝ์ฐ ๋์ฑ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ๊ฒ ๊ฐ๋ค๋ ๋๋์ ๋ฐ์๋ค.
์ฌ๊ธฐ์ story๋ Jest์์ test์ ๊ฐ์ ๊ฐ๋ ์ผ๋ก ์๊ฐํ๋ฉด ๋๋ค. ์ปดํฌ๋ํธ๋ค์ด ๊ฐ์ง๊ณ ์๋ ๊ฐ๊ฐ์ Story! ์ด๋ค props๋ฅผ ์ ๋ฌ๋ฐ๋๋์ ๋ฐ๋ผ ๋ค์ํ ํํ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋ค. ์ฆ, ๋ค์ํ ์ด์ผ๊ธฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ปดํฌ๋ํธ๋ผ๊ณ ์ดํดํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. ์ด๋ฌํ ์ปดํฌ๋ํธ๋ค์ ๋จผ์ ๋ง๋ค์ด ํ์ธํจ์ผ๋ก์จ CDD๋ฅผ ์ค์ฒํ ์ ์๋ค.
๐งช CDD from TDD
CDD(Component Driven Development)๋ ํ๋ก ํธ์๋ ์ง์์ ๊ฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ์ปดํฌ๋ํธ ํํ๋ก ๊ฐ๋ฐํ๋ ํ๋ก์ธ์ค๋ฅผ ์งํฅํ๊ณ ์๊ณ , ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ณต์กํด์ง์ ๋ฐ๋ผ ๋ฑ์ฅํ ๊ฐ๋ฐ ๋ฐฉ๋ฒ๋ก ์ด๋ค. ์ปดํฌ๋ํธ๋ค์ ๋ ๋ฆฝ์ ์ผ๋ก ์๊ฐํ๊ณ ํ๋์ ๋์ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋๋ ๊ฒ์ ์์์ผ๋ก CDD๋ฅผ ์ ์ฉํ ์ ์๋ค.
์ง๋ ๊ณผ๊ฑฐ๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ฆฌ์กํธ๋ฅผ ์ด์ฉํด ํ์ด์ง๋ฅผ ๋ง๋ค ๋, ์ ์ฒด์ ์ธ ํ์ด์ง์ ๋ชจ์ต์ ๊ตฌ์ํ๋ ๊ฒ๋ถํฐ ์์ํ์๋ค. ์ด๋ป๊ฒ ๋ณด๋ฉด Top-Down ํ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.
ํ์ง๋ง ์์ผ๋ก๋ ๋ค์๊ณผ ๊ฐ์ด ์๊ฐํ๊ณ ์ ํ๋ค. ์ด๋ CDD๋ฅผ ํ๊ธฐ ์ํด TDD์ ์ ์ฉํ ๊ฒ์ด๋ค.
1. ๋ด๊ฐ ๋ฌด์์ ๋ง๋ค๋ ค๊ณ ํ๋๊ฐ? - ํฐ ๋ฉ์ด๋ฆฌ ์๊ฐํ๊ธฐ
2. ์ด๋ฅผ ์ํด ์ด๋ค ๊ณผ์ ์ ๊ฑฐ์ณ์ผ ํ๋๊ฐ? - ์์ธ ์ํฉ์ ํฌํจํ์ฌ ์์ ๋ฉ์ด๋ฆฌ๋ก ์ชผ๊ฐ๊ธฐ
3. ๊ทธ๊ณณ์์ ๊ฐ์ฅ ์ค์ํ ํต์ฌ์ ๋ฌด์์ธ๊ฐ? - ๊ฐ์ฅ ํต์ฌ์ด ๋๋ ์ปดํฌ๋ํธ, ์ฌ์ฌ์ฉ์ด ์ฉ์ดํ ์ปดํฌ๋ํธ ์๊ฐํ๊ธฐ
4. ์์์ ์๊ฐํ ์ปดํฌ๋ํธ๊ฐ ์ค์ ๋ก ์ด๋ค๊ฐ? - ์ค์ ์ฌ์ฉ๋๋ ์ํฉ(์ฃ์ง ์ผ์ด์ค ํฌํจ) ์๊ฐํ๊ธฐ
5. ๋์ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ UI ํ ์คํธ ์งํํ๊ธฐ - ํ ์คํธ์์ฑ/์ปดํฌ๋ํธ๊ตฌํ
6. ๋ฆฌํฉํฐ๋ง ์งํํ๊ธฐ - ์์์ ์์ฑํ ํ ์คํธ๊ฐ ํต๊ณผํ๋์ง ํ์ธํ๊ธฐ
7. 1๋ฒ ๋๋ 2๋ฒ์ผ๋ก ๋์๊ฐ๊ธฐ
๊ฐ์ฅ ๊น๋ค๋ก์ฐ๋ฉด์ ๋ํดํ ๋ถ๋ถ์ด 4๋ฒ ๊ณผ์ ์ด๋ผ๊ณ ์๊ฐํ๋ค. ์์ ์ปดํฌ๋ํธ๊ฐ ์ค์ ์๋น์ค์์ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง๋ฅผ ํ์ ํ๋ ๊ฒ์ด ๊ทธ๋ค์์ผ๋ก ํด์ผ ํ UI ํ ์คํธ์ ๋ง์ ์ํฅ์ ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค. ๋น์ฐํ ์๋น์ค๊ฐ ํ์ฅ๋๊ณ ์๊ตฌ์ฌํญ์ด ๋ณํ ์ ์๋ ์ํฉ์ ๊ณ ๋ คํ๋ค๋ฉด ์ธ์ ๋ ์ง ์ปดํฌ๋ํธ์ ๊ธฐ๋ฅ์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์ง ๊ฒฝ์ฐ๋ ์กด์ฌํ๋ค. ํ์ง๋ง ํ์ฌ ๊ณ ๋ คํ ์ ์๋ ์ํฉ์ ์ผ๋ง๋ ์๊ฐํ๋ ๊ฒ์ด ์ค๋ ฅ ์๋ ๊ฐ๋ฐ์๋ฅผ ๊ตฌ๋ณํ๋ ๊ฒ์ด์ง ์์๊น? ์๊ฐํ๋ค.
๊ทธ๋์ ์ฅ์ ์...?
CDD๋ฅผ ์ ์ฉํจ์ผ๋ก์จ ์ป์ ์ ์๋ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ์ฌ์ฌ์ฉ์ฑ - ๋ง์ ๊ณณ์์ ์ฌ์ฉํ๋ ์ปดํฌ๋ํธ๋ฅผ ๋จผ์ ์๊ฐํ์ฌ ๊ฐ๋ฐํจ์ผ๋ก์จ ์ฌ์ฌ์ฉ์ฑ์ ๋์ผ ์ ์๋ค.
2. ์ ์ง๋ณด์ - ์์ ์์ ๋จ์์ ์ปดํฌ๋ํธ๋ฅผ ๋จผ์ ์๊ฐํจ์ผ๋ก์จ ์์กด์ฑ์ด ๋ฎ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
3. ํ ์คํธ - ๋ด๊ฐ ์ํ๋ UI ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์๋์ง ๋น ๋ฅด๊ฒ ํ ์คํธํ๊ณ ํผ๋๋ฐฑ์ ๋ฐ์ ์ ์๋ค.
4. ํ์ ํจ์จ์ฑ - ๊ธฐํ์, ๋์์ด๋์๊ฒ ์ปดํฌ๋ํธ์ ๋ํ ํผ๋๋ฐฑ์ ์์ฃผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ค.(Storybook์ ํ์ฉํ๋ค๋ฉด ๋์ฑ)
dance of swtiching contexts
์ปดํฌ๋ํธ๋ค์ด ์ถค์ ์ถ๋ค.
CDD๋ฅผ ์ ์ฉํ๋ฉด ์์ ๋จ์์ ์ปดํฌ๋๋ค์ด ์ค์ ์๋น์ค์์ ์ด๋ป๊ฒ ์์ง์ด๋์ง ์์ฃผ ๋ง์ด ํ์ธํ๋ค. ์ด๋ ๊ฒ ํผ๋๋ฐฑ์ ์์ฃผ ํจ์ผ๋ก์จ ์ปดํฌ๋ํธ๋ค์ ์ถค์ ์ถ๊ฒ ๋๋ค๊ณ ํ๋ค. ์ฆ, ์ปดํฌ๋ํธ๋ค์ด ๋ ๋ฐ๋(?) ์ํฉ์ด ๋๋ค๋ฉด ๋น๋ก์ CDD๋ก ์ปดํฌ๋ํธ๋ฅผ ์ ๊ฐ๋ฐํ๊ณ ์๋ค๋ ์ฆ๊ฑฐ์ด๋ค. ์ถค์ ์ถ๋ค๋ ํํ์ด ์ ์ ํ๋ค๊ณ ํ๋๋ฐ ์์ง ๋๋ผ๊ธฐ์๋ ๋ง์ด ๋ถ์กฑํ๊ฐ ๋ณด๋ค.
๋ด ์ปดํฌ๋ํธ๋ค์ ์ธ์ ์ฏค ์ถค์ ์ถ๊น?
์ด๋ฒ ํ์ด๋จผ์ธ ๋ฏธ์ ์์๋...
์ด๋ฒ ํ์ด๋จผ์ธ ๋ฏธ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ ๊ฐ์ง ์ปดํฌ๋ํธ์ ๋ํด์ CDD๋ฅผ ์งํํ์๋ค.
1. CreditCard - ์๋น์ค์์ ํต์ฌ์ด ๋๋ ์ปดํฌ๋ํธ, ์์ผ๋ก ๋ง์ ํ์ด์ง์์๋ ์ฌ์ฌ์ฉ๋๋ ์ปดํฌ๋ํธ
2. Input - ๋ฑ๋กํ๋ ๊ธฐ๋ฅ์ ํต์ฌ์ด ๋๋ ์ปดํฌ๋ํธ, ๋ฐ๋ณต๋๋ ์ปดํฌ๋ํธ
ํ๊ณ ๋ฅผ ์์ฑํ๋ ํ์ฌ ์์ ์์ ์ถ๊ฐํ์ผ๋ฉด ํ๋ ์ปดํฌ๋ํธ๋ Button ์ปดํฌ๋ํธ๊ฐ ๋ ๊ฒ์ด๋ค. 2๋จ๊ณ์์๋ ์กฐ๊ธ ๋ ์์ ๋จ์๋ก ์๊ฐํ ์ ์๋๋ก ์ฐ์ตํ์.
๐บ๏ธ CRA์์์ Paths alias
๊ทธ๋ฅ paths alias๊ฐ ์๋๋ผ CRA์์์ paths alias์ด๋ค. ์ด๋ 1๋จ๊ณ์์ ๊ฐ์ฅ ๋ง์ ์๊ฐ์ ์ด ๋ถ๋ถ์ด๋ค. ์๊ฐํด ๋ณด๋ฉด ํ์ ์๊ตฌ ์ฌํญ๋ ์๋๊ณ ๋น์ฅ์ ์ฌ๋ ์๊ฒ ๋ค๋ฃจ์ง ์์๋ ๋๋ ๋ถ๋ถ์ด๊ธด ํ์ง๋ง ์๋ฌ๋ฅผ ๋ฐ๊ฒฌํ ๋๋ก์ ... ๊ทธ๋ฅ ๋์ด๊ฐ๊ธฐ ์ซ์๋ค.
paths alias๋ฅผ ์ ์ฉํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ CRA์์ paths alias๋ฅผ ์ ์ฉํ ๋, ํ์ํ ์ถ๊ฐ ์ค์ ์ ๋ฐ๋ก ์ ๋ฆฌ๋ฅผ ํด๋๋ ค ํ๋ค. ์ด์ฐ๋๋ ์ด์ ๋ค์์ฒ๋ผ ์ ๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ import๋ฅผ ํ ์ ์๋ค. deps๊ฐ ๋ง์์ง๊ณ ํด๋๊ฐ ๋ง์์ง์๋ก ๋์ฑ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์์ ๊ฒ ๊ฐ๋ค.
๐ฅธ ๊ฐ์ง input ๋ณด์ด๊ธฐ์ ์ง์ง input ์จ๊ธฐ๊ธฐ
์ ์ฉ์นด๋ ๋ฒํธ 16์๋ฅผ ์ ๋ ฅํ๋ฉด ๋ค 8์๋ ์จ๊ฒจ์ผ ํ๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด 4๊ฐ์ input๋ฅผ ๋ง๋ค๊ณ ์ ๋๊ฐ๋ number ๋๋ string ํ์ ์ผ๋ก ํ๊ณ ๋๋จธ์ง ๋๊ฐ๋ password ํ์ ์ผ๋ก ํ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ค. ํ์ง๋ง ๋์ ํ์ด์ธ ๊ฐ๋ธ๋ฆฌ์์ ํ๋์ input์ผ๋ก ๋ง๋ค๊ณ ์ถ์๋ค. ๋น์์๋ ์ด๋ฏธ ๋ค 8 ์๋ฆฌ๋ฅผ ์จ๊ธฐ๋ ๊ธฐ๋ฅ์ ๊ตฌํ์ด ๋์ด์์๋ค. ๋๋ฌธ์ ํ๋ฉด์ ๋ณด์ด๋ ๊ฒ์ ํฐ ๋ฌด๋ฆฌ๊ฐ ์์๋ค.
๋ฌธ์ ๋ ๊ฐ์ ์ ์ฅํ ๋ ๋ฐ์ํ๋ค. 8์๋ฆฌ ์ดํ input์ ์๋ก์ด ๊ฐ์ด ์ถ๊ฐ๋ ๋ ๋ค์๊ณผ ๊ฐ์ ์์๋ก ์งํ๋๋ค.
1. input์์ ํ์ฌ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
2. ํ์ฌ ๊ฐ ์ค 8์ ์ดํ์ ๊ฐ์ • ๋ก ๋ฐ๊พผ๋ค.
3. ์ ๊ณผ์ ์ ํตํด ๋ฐ๋ ๊ฐ์ input์ value๋ก ์ ๋ฌํ๋ค.
์ด๋ฌํ ๊ณผ์ ์ ํตํด 8์๋ฆฌ ์ดํ์ ๊ฐ์ ์ฌ๋ผ์ง๊ฒ ๋๋ค. ์ฆ, ์ ์ฅ์ ํ ๋ 1234123412341234๊ฐ ์๋๋ผ 1234••••••••๊ฐ ์ ์ฅ์ด ๋๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ์๋ณธ์ ๋ค๋ฅธ ๊ณณ์ ์ ์ฅ์ ํด์ผ ํ๋ค.
์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ณต์กํ์ง๋ง ํ๋์ input๋ง ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ํ ์ง, ํ์ดํ์ด ๊ฐ๋ฅํ์ง๋ง ํ๋ฉด์ ๋ณด์ฌ์ง์ง ์์ input(์ค์ ๊ฐ์ด ์ ์ฅ๋๋ input)๊ณผ ํ๋ฉด์ ๋ณด์ด๋ ์ฉ๋๋ก๋ง ์ฌ์ฉ๋๋ ๋ ๋ค๋ฅธ input์ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก ํ ์ง ๊ฐ๋ธ๋ฆฌ์๊ณผ ๊ณ ๋ฏผ์ ํ์๋ค.
๊ฐ์ธ์ ์ผ๋ก๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ๋์ ํ๊ณ ์ถ์์ง๋ง ์ฒซ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ ์ ์ด ๋ง์ด ์์๋ค. ์ค๊ฐ์ ๋ฒํธ๋ฅผ ์ถ๊ฐ ๋๋ ์ญ์ ํ๋ ๊ฒฝ์ฐ, ์ฌ๋ฌ๊ฐ์ ์ซ์๋ฅผ ํ ๋ฒ์ ์ถ๊ฐ ๋๋ ์ญ์ ํ๋ ๊ฒฝ์ฐ... ๋ฑ๋ฑ
๋๋ฌธ์ ์ผ๋จ์ ์์ฑ์ด ๋ชฉํ์ด๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ๋ ์ฝ๊ณ ์ง๊ด์ ์ธ ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ผ๋ก ๊ตฌํํ์๋ค.
์์ฌ์ด ์ ์ FakeInput์ ์ปค์๊ฐ ์๋ค๋ ์ ์ด๋ค. ์ฆ, ๋ด๊ฐ ํ์ฌ ํ์ดํ์ ํ ์ ์๋?๋ผ๋ ๊ฒ์ ์ฌ์ฉ์๊ฐ ๋ชจ๋ฅผ ์ ์๋ค๋ ๊ฒ์ด๋ค. ์ด๋ฅผ ์ผ๋จ์ css๋ก ๊ตฌํํ์์ง๋ง ์๋ฒฝํ์ง ์๋ค. ์ด ์ ์ด ์์ฌ์ด ๋ถ๋ถ์ด๋ค. ์์ผ๋ก step2, 3์ ์งํํ๋ฉด์ ๊ณ์ ๊ณ ๋ฏผ์ ํด๋ด์ผ๊ฒ ๋ค.
๐ฌ Custom Hook์ธ useInput
1๋จ๊ณ์์ useInput ํ ์ ๋ง๋ค์๋ค. useInput์ input์ ์ ํจ์ฑ ๊ฒ์ฌ๋ ํจ๊ป ํด์ฃผ๋ฉฐ ์ ํจ์ฑ ๊ฒ์ฌ์ ์คํจ๋ฅผ ํ๋ค๋ฉด ์๋ฌ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ ์ญํ ๋ ํ๋ค. ๋๋ฌธ์ input์ ์ ํจ์ฑ ๊ฒ์ฌ ํจ์๋ฅผ ๋ฐฐ์ด๋ก ๋๊ฒจ์ค์ผํ๋ค.
useInput์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
import { useEffect, useState } from 'react';
type ValidFn<T> = (value: T) => { ok: boolean; errorMessage?: string };
function useInput<T>(
initValue: T,
validFns: ValidFn<T>[],
): [T, React.Dispatch<React.SetStateAction<T>>, string | null] {
const [value, setValue] = useState(initValue);
const [errorMessage, setErrorMessage] = useState<null | string>(null);
useEffect(() => {
let newErrorMessage = null;
validFns.some((fn) => {
const result = fn(value);
if (!result.ok) {
newErrorMessage = result.errorMessage;
return true;
}
return false;
});
setErrorMessage(newErrorMessage);
}, [value]);
return [value, setValue, errorMessage];
}
export default useInput;
์๋ฌ ๋ฉ์์ง๊ฐ ์๋ค๋ฉด ๊ทธ๋ฅ useState๋ง ์ฌ์ฉํด๋ ๋ ๊ฒ์ด๋ค. ํ์ง๋ง ๋ชจ๋ input์๋ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์กด์ฌํ๊ณ ์คํจํ ๊ฒฝ์ฐ ์ด๋ค ๊ฒ ๋๋ฌธ์ ์คํจํ๋์ง๋ฅผ ์ฌ์ฉ์์๊ฒ ์๋ ค์ค์ผ ํ๋ค. ์ด๋ฅผ ํ๋์ ํ ์์ ๊ด๋ฆฌ๋ฅผ ํ๊ณ ์ถ์๋ค.
๐ฌ ํ์ดํ๋ก๊ทธ๋๋ฐ ์งํ ๊ณผ์
ํ์ด๋จผ์ธ ๋ฏธ์ ์ ํ์ด๋ ๊ฐ๋ธ๋ฆฌ์์ด๋ค. ์ง๋ ํ์ดํ๋ก๊ทธ๋๋ฐ์์๋ ํ์ด์ ํจ๊ป ๋ง์ ์ด์ผ๊ธฐ๋ฅผ ๋๋์๋๋ฐ, ์ด๋ฒ ํ์ดํ๋ก๊ทธ๋๋ฐ์์๋ ๋ ๋ง์ ์ด์ผ๊ธฐ๋ฅผ ๋๋์๋ค๊ณ ์๊ฐํ๋ค. ํ์ผ ๊ตฌ์กฐ, contextAPI, input, ์ปดํฌ๋ํธ ๋ฑ๋ฑ ๊ฐ์ ์๊ฒฌ์ ๊ฐ์ง๋ ๋ถ๋ถ๋ ์์์ง๋ง ์๋ก ์๋ฐ๋ ์๊ฒฌ๋ ์์๋ค. ์๋ก์ ์๊ฒฌ์ ๋งํ๊ณ ํ๋๋ก ํฉ์น๋ ๊ณผ์ ์ด ์ ์ด๋ฃจ์ด์ ธ ๋ง์กฑ์ค๋ฌ์ด ํ์ดํ๋ก๊ทธ๋๋ฐ์ด๋ผ๊ณ ์๊ฐํ๋ค.
์ฒซ์งธ ๋ ์ eslint์ storybook๋ฅผ ์ ์ฉํ๋๋ผ ๋ชจ๋ ์๊ฐ์ ์ฌ์ฉํ๋ค. ์ฐธ... eslint... ๋ ๊ดด๋กญํ๋ค. ๋ถ๋ช ๋ฌด์ธ๊ฐ๋ฅผ ๋์น๊ณ ์๋ ๊ฒ์ด ์์ ํ ๋ฐ ๋นจ๋ฆฌ ์ต์ํด์ก์ผ๋ฉด ํ๋ค.(eslint์ ๋ํด ์ ์์ง ๋ชปํ๋ ์ํ์์ ์ ์ฉ๋ง ํ๊ณ ์ถ์ ์์ฌ์ด ๋ ํฌ๊ธฐ ๋๋ฌธ์ด์ง ์์๊น?) ์๋ง ์ต์ํด์ก์ผ๋ฉด ์ฒซ๋ ์ ๋ ๋ง์ ๊ฒ์ ํ ์ ์์์ ๊ฒ์ด๋ค. storybook๋ ์ฒ์ ์ ์ฉํด ๋ณด์๋ค. ์ ๋์ํ๋์ง ๊ฐ๋จํ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ํ ์คํธ๋ ์งํํ์๋ค. ์ ์์ ์ผ๋ก ๋๋ ๊ฐ๋ธ๋ฆฌ์๊ณผ ํจ๊ป ์ฆ๊ฑฐ์ํ๋ค.
๋์งธ ๋ ์ ๊ธฐ๋ฅ ๊ตฌํ์ ์๋๋ฅผ ๋์ด๊ณ ์ ๋ ธ๋ ฅํ๋ค. CDD๋ฅผ ํตํด ๋จผ์ CreditCard, Input ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค๊ณ ํ์ด์ง๋ฅผ ๋ง๋ค๊ธฐ ์์ํ๋ค. ์ ์ฒด์ ์ธ ๋์์ธ, ๊ธฐ๋ฅ์ ์์กฐ๋กญ๊ฒ ์งํ๋์๋ค. ๋จ, ์์์๋ ์ธ๊ธํ ์ ์ฉ์นด๋ ๋ค 8์๋ฆฌ๋ฅผ ๊ฐ๋ฆฌ๋ ๋ถ๋ถ์์ ์๊ฒฌ์ด ์๊ฐ๋ ธ๊ณ ์ด๋ป๊ฒ ํ๋ฉด ์ข์์ง ์๋ก ๊ณ ๋ฏผ์ ํ๊ณ ๋ค์๋ ์ ํ๊ธฐ๋ก ํ๋ค.
์ ์งธ ๋ ์ ๋ฏธ์ ์ ์ถ์ผ์ด๊ธฐ ๋๋ฌธ์ ์์ฑ์ ๋ชฉํ๋ฅผ ๋๊ณ ํ์ดํ๋ก๊ทธ๋๋ฐ์ ์งํํ์๋ค. ์ ๋ ์ ์ฉ์นด๋ ๋ฒํธ์ ๋ํ ์๊ฒฌ์ ๊ฐ๋ธ๋ฆฌ์์ ์๊ฒฌ์ ๋ฐ๋ฅด๊ธฐ๋ก ํ์๊ณ UI ์ธก๋ฉด์์ ์์ฌ์ด ์ ์ ์์ง๋ง ์ด์จ๋ ์์ผ๋ก ๋ฆฌํฉํฐ๋ง์ ํตํด ๊ฐ์ ํ ์ ์์ผ๋ ์ผ๋จ์ ๊ฐ์ง input๋ฅผ ๋ง๋๋ ๋ฐฉํฅ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๋ฏธ์ ์ ์ถ 2์๊ฐ ์ , ํ์ด ํค์ด์ง๊ธฐ๋ฅผ ํ๊ณ ๊ฐ์ ๋ถ์กฑํ ๋ถ๋ถ์ ์ฑ์๋๊ฐ๋ค. CVC ์ค๋ช , ์ ํจ์ฑ ๊ฒ์ฌ ๋ถ๋ถ์ด ๋ฏธํกํ๊ธฐ ๋๋ฌธ์ ์ ์ถ ์๊ฐ ์ ๊น์ง ํด๋น ๋ถ๋ถ์ ๋ํ ์ฝ๋๋ฅผ ์์ฑํ์๊ณ ๋ฐฐํฌ๊น์ง ๋ง๋ฌด๋ฆฌํ์๋ค. PR๋ฉ์์ง๋ ๋ฏธ๋ฆฌ ์์ฑํด์ 6์ ์ ์ ๋ฌด์ฌํ ์๋ฃํ ์ ์์๋ค.
๐ ์ํ ์
1. CDD๋ฅผ ์ ์ฉํ๊ณ ์ ๋ ธ๋ ฅํ๋ค.
2. ์์ ๋จ์์ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ๊ณ ์ ๋ ธ๋ ฅํ๋ค.
3. ํ์ด์ ๋ํ๋ฅผ ์ ๋ง ๋ง์ด ๋๋์๋ค.
๐ ์์ฌ์ด ์
1. eslint ์ค์ ์ ๋ง์ ์๊ฐ์ ์ฌ์ฉํ๋ค.
2. ์๊ฐ ๋ด์ ๋ฏธ์ ์ ์๋ฃํ๊ณ ์ ํ๊ธฐ ๋๋ฌธ์ ๋ฏธํกํ ๋ถ๋ถ์ด ๋ง์ด ๋ณด์ธ๋ค.
๐ ์์ผ๋ก์ ๊ฐ์ค
1. eslint ์ค์ ์ ๋ํด ์ ๋๋ก ์์๋ณด์.
2. ํต์ฌ์ด ๋๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐพ๋ ์ฐ์ต์ ๊พธ์คํ ํ์.
'๐ ์ฐ์ํํ ํฌ์ฝ์ค > Level2' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ ๋ฒจ2 ์ฅ๋ฐ๊ตฌ๋ - Step1 (0) | 2023.05.27 |
---|---|
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step3 (0) | 2023.05.15 |
๋ ๋ฒจ2 ํ์ด๋จผ์ธ - Step2 (1) | 2023.05.09 |
๋ ๋ฒจ2 ๋ค์, ์ ์ฌ ๋ญ ๋จน์ง - Step 2 (11) | 2023.04.21 |
๋ ๋ฒจ2 ๋ค์, ์ ์ฌ ๋ญ ๋จน์ง - Step 1 (0) | 2023.04.14 |