์๋ก ๐
์ํฐํจํด(anti-pattern)์ ๋ช
๋ฐฑํ ๋ฒ๊ทธ๊ฐ ์๋์๋ ์ฒ์์ ๋ฌธ์ ์์ด ๋์ํฉ๋๋ค.
ํ์ง๋ง ๊ธฐ๋ฅ์ด ๋์๋ก, ์ด๋ฌํ ์ฝ๋ ๊ตฌ์กฐ๋ ์ ์ฐจ ๋ณต์ก์ฑยท์ ์ง๋ณด์์ฑ์ ํจ์ ์ ๋๋ฌ๋
๋๋ค.
๐ก โ์ฝ๋์ โ๊ธฐ๋ฅโ์ด๋ ์ด๋ค ๋จ์๋ฅผ ๋งํ ๊น?
์ฐ๋ฆฌ๊ฐ ์ง์ง ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ๋ โ๋ถ์์ ํ ์ฝ๋โ ์์ฒด๊ฐ ์๋๋ผ, ํ์ฅ ยท ๋ณ๊ฒฝ ๊ณผ์ ์์ ๋ฒ์ด์ง๋ ์จ์ ๋น์ฉ์ ๋๋ค.โ
์ด ์ฑ
(ใํจํด์ผ๋ก ์ตํ๊ณ ์ค๊ณ๋ก ์์ฑํ๋ ๋ฆฌ์กํธใ)์ ์์ผ๋ก ์ค๋ฅ๋ก ์ด์ด์ง๊ธฐ ์ฌ์ด ์๋ชป๋ ์์ ๋ฅผ ์ดํด๋ณด๊ณ ,
๊ฒ์ฆ๋ ํจํด๊ณผ ์์น์ผ๋ก ์ด๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ๊ฐ์ ํ๋ ๊ณผ์ ์ ๋ณด์ฌ์ค๋๋ค.
์ด๋ฒ ์ฅ์์๋ ๋ณต์กํ ์ํ ๊ด๋ฆฌ์ ๋น๋๊ธฐ ์์
์ด ๊ฐ๋
์ฑ์ ๋ฏธ์น๋ ์ํฅ,
๊ทธ๋ฆฌ๊ณ ๊ณ ๊ธ ๋ฆฌ์กํธ ์ฑ์์ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ๊ตฐ์ ํ๋์ ์กฐ๋งํฉ๋๋ค.
- UI ๊ตฌ์ถ์ ์ด๋ ค์
- ์ํ ๊ด๋ฆฌ์ ๋ณต์ก์ฑ
- ์์ธ ํ๋ฆ
- ๋ํ์ ์ธ ๋ฆฌ์กํธ ์ํฐํจํด
1.1 UI ๊ตฌ์ถ์ ์ด๋ ค์
HTML ๋ง์ผ๋ก๋ ํ๋์ ยท๋์ ์ธ ์น UI๋ฅผ ๊ตฌํํ๊ธฐ ์ด๋ ต์ต๋๋ค.
- ์น ์ธ์ด์ ํ๊ณ
๋จ์ ๋ฌธ์๊ฐ ์๋ ํฐ์ผ ์๋งค, ํ๋ก์ ํธ ๊ด๋ฆฌ ๋๊ตฌ, ์ด๋ฏธ์ง ๊ฐค๋ฌ๋ฆฌ ๋ฑ ๋ณต์กํ UI๋
HTML ยท CSS๋ก๋ ๋ณธ์ง์ ์ผ๋ก ๋ถ์กฑํฉ๋๋ค. - ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ์ปค์คํ
์์ ํ์
์์ฝ๋์ธ, ๋ฐ์ดํฐ ๊ทธ๋ฆฌ๋, ๋๋กญ๋ค์ด ๋ฑ์ ๋ธ๋ผ์ฐ์ ๊ธฐ๋ณธ ์์๊ฐ ์๋๊ธฐ์
๊ฐ๋ฐ์๊ฐ ์ถ๊ฐ ๋งํฌ์ ยท์คํ์ผยท๋ก์ง์ ๊พธ์คํ ์์ฑํด์ผ ํฉ๋๋ค. - ์๊ฐ์ ํด ๋ถ์ฌ
Figma์ฒ๋ผ ๋๋๊ทธ-์ค-๋๋กญ์ผ๋ก UI๋ฅผ ๋ฐฐ์นํ ์ ์์ผ๋ฏ๋ก,
์์ยทํจ๋ฉยทํฐํธ๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ๊ณ , ์์ด์ฝยท๋ ์ด๋ธ์ ์ง์ ์กฐ๋ฆฝํด์ผ ํฉ๋๋ค.
๐ UI ๊ฐ๋ฐ ์ธ์ด์ ๋ถ์ผ์น๋ โ์ํฐํจํดโ ๊ทธ ์์ฒด๋ผ๊ธฐ๋ณด๋ค,
ํจํด / ์ปดํฌ๋ํธ ์ถ์ํ๊ฐ ์ ํ์ํ์ง ๋ณด์ฌ์ฃผ๋ ๊ทผ๋ณธ ๋ฐฐ๊ฒฝ์ ๋๋ค.
1.2 ์ํ ๊ด๋ฆฌ์ ์ดํด
ํ๋ก ํธ์๋ ์ํ๋ ์๊ฒฉ(์๋ฒ) ยท ๋ก์ปฌ ยท ํ์ ์ํ๊ฐ ๋ค์์ด๋ฉฐ ๋น ๋ฅด๊ฒ ๋ณต์กํด์ง๋๋ค.
์๊ฒฉ ์ํ์ ๋ณต์ก์ฑ
- ๋น๋๊ธฐ: ์ฌ๋ฌ API๋ฅผ ๋๊ธฐํํ ๋ ํ์ด๋ฐ ์ด์ ๋ฐ์
- ์ค๋ฅ ์ฒ๋ฆฌ: ๋คํธ์ํฌ ์คํจยท์๋ฒ ์ค๋ฅ๊น์ง ๊ณ ๋ คํด์ผ ํจ
- ๋ก๋ฉ: ๋ฐ์ดํฐ ๋์ฐฉ ์ UI ํ๋ ์ด์คํ๋ ํ์
- ์ผ๊ด์ฑ: ๋ค์ค ์ฌ์ฉ์ยท์ค์๊ฐ ์ฑ์ผ์๋ก ์๋ฒ์ ๋๊ธฐ ์ ์ง๊ฐ ์ด๋ ค์
- ์บ์ฑ: ์ฑ๋ฅ โ ๋ฐ์ดํฐ ๋ฌดํจํ ์ ๋ต ๊ฐ ํธ๋ ์ด๋์คํ
- ๋๊ด์ UI: ์คํจ ์ ๋กค๋ฐฑ ๋ก์ง ํ์
๊ฒฐ๊ณผ์ ์ผ๋ก ์ ์ ๋ฐ์ดํฐ ๋ ๋๋ง๋ณด๋ค ํจ์ฌ ๋ง์ ์ฝ๋๊ฐ ํ์ํ๋ฉฐ,
๋ก์ปฌ ์ํ๊น์ง ๋ํด์ง๋ฉด ์ฝ๋๋ฒ ์ด์ค๋ ๊ธ๊ฒฉํ ๋ฐฉ๋ํด์ง๋๋ค.
1.3 ์์ธ ํ๋ฆ ํ์ํ๊ธฐ
1.3.1 ํ์ฌ / ํํ ์ปดํฌ๋ํธ ์ค๋ฅ
- ์ธ๋ถ ์ปดํฌ๋ํธ ์ค๋ฅ โ UI ์ค๋จยท์์์น ๋ชปํ ๋์
- ํด๊ฒฐ: ์กฐ๊ฑด๋ถ ๋ ๋๋ง, Error Boundary, ํด๋ฐฑ UI ๋ฑ์ ์ถ๊ฐ
1.3.2 ์์ธก ๋ถ๊ฐํ ์ฌ์ฉ์ ํ๋
- Edge case๋ฅผ ๋๋นํ ์ ๋ ฅ ๊ฒ์ฆยท๊ฐ๋ ๋ก์ง ํ์
- ๊ทธ๋งํผ ์ฝ๋ ๋ณต์ก์ฑ ์์น
๋๊ท๋ชจ React ์ฑ์ ๊ณต์ ๊ฐ์ด๋๋ง์ผ๋ก ์ถฉ๋ถ์น ์์ต๋๋ค.
๋ช ํํ ์ค๊ณ ์์น์ด ์์ผ๋ฉด ์ํฐํจํด์ด ๋์ ๋๊ธฐ ์ฝ์ต๋๋ค.
1.4 ๋ฆฌ์กํธ์ ์ผ๋ฐ์ ์ธ ์ํฐํจํด
์ํฐํจํด์ ๊ฒ์ผ๋ก๋ โ๋์ํ๋ ์๋ฃจ์
โ์ฒ๋ผ ๋ณด์ด์ง๋ง,
์๊ฐ์ด ์ง๋๋ฉด ๋ณต์ก์ฑยท๋นํจ์จ์ ํค์ฐ๋ ์จ์ ๋ถ์ฑ์
๋๋ค.
1.4.1 Prop Drilling
- ๋ฐ์ดํฐ๊ฐ ์ค๊ฐ ์ปดํฌ๋ํธ๋ฅผ ๊ณ์ ํต๊ณผ โ ๊ฐ๋ ์ฑยท๋๋ฒ๊น ์ ํ
- Context API๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํด๊ฒฐ
1.4.2 ์ปดํฌ๋ํธ ๋ด๋ถ ๋ฐ์ดํฐ ๋ณํ
- API ์๋ต์ ์ปดํฌ๋ํธ ์์์ ์ง์ ๊ฐ๊ณต
- ๐ ์ฌ์ฌ์ฉ์ฑยทํ ์คํธ์ฑ ํ๋ฝ โ ์ ํธ ํจ์ยทAdapter ํจํด์ผ๋ก ๋ถ๋ฆฌ
1.4.3 ๋ทฐ ์์ญ์ ๋ณต์กํ ๋ก์ง
- ํ๋ ์ ํ ์ด์ ์ปดํฌ๋ํธ๊ฐ ๋น์ฆ๋์ค ๋ก์ง๊น์ง ๋ด๋น
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ๊นจ๋จ๋ ค ํ ์คํธยท์ฌ์ฌ์ฉยท์ ์ง๋ณด์ ๋์ด๋ ์์น
- ๐ ๊ณ์ธตํ ์ํคํ ์ฒ, Custom Hook/HOC๋ก ์ญํ ๋ถ๋ฆฌ
1.4.4 ํ ์คํธ ๋ถ์กฑ
- ํต์ฌ ๊ธฐ๋ฅ(์: ์ผํ ์นดํธ)์กฐ์ฐจ ํ
์คํธ ๋ฏธ๋น ์
๊ฐ๊ฒฉ ์ค๋ฅยท๋ณด์ ์ทจ์ฝ์ ยทUI ๊นจ์ง ์ํ - TDD / ํ ์คํธ ์๋ํ๋ก ์ ๋ขฐ ํ๋ณด
1.4.5 ์ค๋ณต ์ฝ๋
- ๋์ผ ๋ก์ง์ด ๊ณณ๊ณณ์ ๋ณต์ฌ โ DRY ์์น ์๋ฐ
- ๐ ๊ณตํต ๋ก์ง์ ์ ํธ ํจ์ยทHOCยท์ปค์คํ ํ ์ผ๋ก ์ค์ํ
1.4.6 ๊ฑฐ๋ ์ปดํฌ๋ํธ
- ๊ธฐ๋ฅ์ด ๊ณ์ ์ถ๊ฐ๋์ด ๋ฉํฐ-๋ ๋ฒจ ์ฑ ์์ ์ง๊ฒ ๋จ
- SRP(๋จ์ผ ์ฑ ์ ์์น) ์๋ฐฐ โ ๋ถํ ยท๋ฆฌํฉํฐ๋ง ํ์
1.4.7 ์ํฐํจํด ์ ๊ฑฐ ์ ๋ต
- ์๋ณ(Identify) โ ์ถ์ถ(Extract) โ ์นํ(Replace)
- ์ฝ๋ ๋์๋ฅผ ์ฐพ๊ณ
- ํจํดยท๋ชจ๋ยท์ถ์ํ๋ก ๋ถ๋ฆฌํ๋ฉฐ
- ํ ์คํธ๋ก ํ๊ท ๋ฒ๊ทธ๋ฅผ ๋ฐฉ์งํ๋ค.
๋ง๋ฌด๋ฆฌ
React ์ฑ์ ํ๋ถํ UI ๊ฒฝํ๊ณผ ๋ณต์กํ ์ํ ๊ด๋ฆฌ๋ฅผ ๋์์ ์๊ตฌํฉ๋๋ค.
๋ฐ๋ผ์ ํจํด์ ๊ธฐ๋ฐํ ์ค๊ณ ์์ด๋ ์ํฐํจํด์ด ํ์ฐ์ ์ผ๋ก ์ค๋ฉฐ๋ญ๋๋ค.
์ด๋ฒ ์ฅ์ ํตํด โ์ด๋์๋ถํฐ ์ค๊ณ๊ฐ ์ด๊ธ๋๊ธฐ ์์ํ๋์งโ๋ฅผ ํ์
ํ๊ณ ,
๋ค์ ์ฅ๋ถํฐ๋ ๊ตฌ์ฒด์ ๋ฆฌํฉํฐ๋ง ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.