React νλ‘μ νΈμμ λμμΈ μμ€ν μ ν¨κ³Όμ μΌλ‘ ꡬννμΈμ. μ΄ μ’ ν© κ°μ΄λλ₯Ό ν΅ν΄ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬, λͺ¨λ² μ¬λ‘, κΈλ‘λ² μ κ·Όμ±, νμ₯ κ°λ₯ν UI ꡬμΆμ λν΄ μμ보μΈμ.
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬: λμμΈ μμ€ν ꡬν β κΈλ‘λ² κ°μ΄λ
λμμμ΄ μ§ννλ νλ‘ νΈμλ κ°λ° νκ²½μμ μΌκ΄μ± μκ³ νμ₯ κ°λ₯ν μ¬μ©μ μΈν°νμ΄μ€(UI)λ₯Ό λ§λλ κ²μ λ§€μ° μ€μν©λλ€. React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ μ΄ λ¬Έμ μ λν κ°λ ₯ν ν΄κ²°μ± μ μ 곡νλ©°, μ μλ λμμΈ μμ€ν μ μ€μνλ μ¬μ ꡬμΆλ μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈλ₯Ό μ 곡ν©λλ€. μ΄ κ°μ΄λλ React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λμμΈ μμ€ν μ ꡬννλ λ°©λ²μ λν ν¬κ΄μ μΈ κ°μλ₯Ό μ 곡νλ©°, κΈλ‘λ² κ³ λ € μ¬νκ³Ό λͺ¨λ² μ¬λ‘μ μ€μ μ λ‘λλ€.
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ 무μμΈκ°μ?
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ Reactλ₯Ό μ¬μ©νμ¬ κ΅¬μΆλ μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈ λͺ¨μμ λλ€. μ΄λ¬ν μ»΄ν¬λνΈλ μκ°μ ννκ³Ό κΈ°λ³Έ κΈ°λ₯μ λͺ¨λ μΊ‘μννμ¬ κ°λ°μκ° λ³΅μ‘ν UIλ₯Ό λ ν¨μ¨μ μΌλ‘ ꡬμΆν μ μλλ‘ ν©λλ€. μ΄λ μΌκ΄μ±μ μ΄μ§νκ³ κ°λ° μκ°μ λ¨μΆνλ©° μ μ§ κ΄λ¦¬μ±μ ν₯μμν΅λλ€.
μΈκΈ° μλ React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬μ μλ λ€μκ³Ό κ°μ΅λλ€:
- Material-UI (νμ¬ MUI): Googleμ Material Designμ ꡬνν λ리 μ¬μ©λλ λΌμ΄λΈλ¬λ¦¬μ λλ€.
- Ant Design: μ€κ΅κ³Ό μ μΈκ³μ μΌλ‘ μΈκΈ° μλ UI λμμΈ μΈμ΄ λ° React UI λΌμ΄λΈλ¬λ¦¬μ λλ€.
- Chakra UI: νλμ μ΄κ³ μ κ·Όμ±μ΄ λ°μ΄λλ©° μ‘°ν© κ°λ₯ν μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬μ λλ€.
- React Bootstrap: Reactλ‘ κ΅¬νλ Bootstrap μ»΄ν¬λνΈμ λλ€.
- Semantic UI React: Semantic UIμ React ꡬν체μ λλ€.
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬ λ° λμμΈ μμ€ν μ¬μ©μ μ΄μ
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ λμμΈ μμ€ν μ ꡬννλ©΄ κ°λ° ν¨μ¨μ±κ³Ό μ¬μ©μ κ²½ν λͺ¨λμ κΈ°μ¬νλ μλ§μ μ΄μ μ μ»μ μ μμ΅λλ€:
- μΌκ΄μ±: μ 체 μ ν리μΌμ΄μ μ κ±Έμ³ μΌκ΄λ λͺ¨μκ³Ό λλμ 보μ₯νμ¬ μ¬μ©μ κ²½νκ³Ό λΈλλ μΈμ§λλ₯Ό ν₯μμν΅λλ€. μ΄λ λ€μν μ§μκ³Ό κΈ°κΈ°μμ ν΅μΌλ μ‘΄μ¬κ°μ μ μ§ν΄μΌ νλ κΈλ‘λ² λΈλλμ νΉν μ€μν©λλ€.
- ν¨μ¨μ±: μ¬μ ꡬμΆλκ³ ν μ€νΈλ μ»΄ν¬λνΈλ₯Ό μ 곡νμ¬ κ°λ° μκ°μ λ¨μΆν©λλ€. κ°λ°μλ κΈ°λ³Έμ μΈ UI μμλ₯Ό λ€μ λ§λλ λμ κ³ μ ν κΈ°λ₯μ ꡬμΆνλ λ° μ§μ€ν μ μμ΅λλ€.
- μ μ§ κ΄λ¦¬μ±: μ μ§ κ΄λ¦¬ λ° μ λ°μ΄νΈλ₯Ό κ°μνν©λλ€. μ»΄ν¬λνΈμ λν λ³κ²½ μ¬νμ΄ μ 체 μ ν리μΌμ΄μ μ λ°μλμ΄ λΆμΌμΉ λ° λ²κ·Έμ μνμ μ€μ λλ€.
- νμ₯μ±: νλ‘μ νΈκ° μ±μ₯ν¨μ λ°λΌ μ ν리μΌμ΄μ μ λ μ½κ² νμ₯ν μ μμ΅λλ€. λΌμ΄λΈλ¬λ¦¬μ μ μ»΄ν¬λνΈλ₯Ό μΆκ°ν μ μμΌλ©°, κΈ°μ‘΄ μ»΄ν¬λνΈλ μ ν리μΌμ΄μ μ λ€λ₯Έ λΆλΆμ μν₯μ μ£Όμ§ μκ³ μ λ°μ΄νΈν μ μμ΅λλ€.
- μ κ·Όμ±: μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ μ’ μ’ μ κ·Όμ±μ μ°μ μνμ¬ μ₯μ κ° μλ μ¬λλ€λ μ¬μ©ν μ μλλ‘ μ€κ³λ μ»΄ν¬λνΈλ₯Ό μ 곡ν©λλ€. μ΄λ μ κ·Όμ± νμ€μ μ€μνκ³ μ μΈκ³ μ¬μ©μλ₯Ό μν ν¬μ©μ±μ 보μ₯νλ λ° λ§€μ° μ€μν©λλ€.
- νμ : 곡μ λ μΈμ΄μ UI μμ μΈνΈλ₯Ό μ 곡νμ¬ λμμ΄λμ κ°λ°μ κ°μ νμ μ μ΄μ§ν©λλ€.
λμμΈ μμ€ν μ μ£Όμ κ΅¬μ± μμ
μ μ μλ λμμΈ μμ€ν μ λ¨μν μ»΄ν¬λνΈ λͺ¨μμ λμ΄ μΌκ΄μ± μκ³ μ¬μ©μ μΉνμ μΈ μΈν°νμ΄μ€λ₯Ό ꡬμΆνκΈ° μν ν¬κ΄μ μΈ νλ μμν¬λ₯Ό μ 곡ν©λλ€. μ£Όμ μμλ λ€μκ³Ό κ°μ΅λλ€:
- λμμΈ ν ν°: μμ, νμ΄ν¬κ·ΈλνΌ, κ°κ²©, κ·Έλ¦Όμμ κ°μ λμμΈ μμ±μ μΆμμ ννμ λλ€. λμμΈ ν ν°μ μ ν리μΌμ΄μ μ μκ°μ μ€νμΌμ μ½κ² κ΄λ¦¬νκ³ μ λ°μ΄νΈν μ μκ² νμ¬ ν λ§ μ€μ λ° λΈλλ©μ μ§μν©λλ€. νΉμ μ½λ ꡬνκ³Ό λ 립μ μ΄λ©° μ¬λ¬ νλ«νΌμμ μ½κ² 곡μ ν μ μμ΅λλ€.
- UI μ»΄ν¬λνΈ: λ²νΌ, μ λ ₯ νλ, λ΄λΉκ²μ΄μ λ°, μΉ΄λ λ± μ¬μ©μ μΈν°νμ΄μ€μ κ΅¬μ± μμμ λλ€. μ½λλ‘ κ΅¬μΆλλ©°(μ: React μ»΄ν¬λνΈ) μ¬μ¬μ© λ° μ‘°ν©μ΄ κ°λ₯ν΄μΌ ν©λλ€.
- μ€νμΌ κ°μ΄λ: μκ°μ κ°μ΄λλΌμΈ, μ»΄ν¬λνΈ μ¬μ, μ¬μ© μμλ₯Ό ν¬ν¨νμ¬ λμμΈ μμ€ν μ¬μ© λ°©λ²μ μ€λͺ νλ λ¬Έμμ λλ€. μ€νμΌ κ°μ΄λλ μ 체 μ ν리μΌμ΄μ μ κ±Έμ³ μΌκ΄μ±μ 보μ₯ν©λλ€.
- μ κ·Όμ± κ°μ΄λλΌμΈ: νλ©΄ 리λκΈ°, ν€λ³΄λ νμ, μμ λλΉ λ±μ κ³ λ €νμ¬ μ₯μ κ° μλ μ¬λλ€λ μ ν리μΌμ΄μ μ μ¬μ©ν μ μλλ‘ λ³΄μ₯νλ μμΉκ³Ό κ΄νμ λλ€.
- λΈλλ κ°μ΄λλΌμΈ: λ‘κ³ μ¬μ©, μμ νλ νΈ, λͺ©μ리 ν€ λ± μ ν리μΌμ΄μ μμ λΈλλλ₯Ό μ΄λ»κ² ννν΄μΌ νλμ§μ λν μ§μΉ¨μ λλ€.
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ‘ λμμΈ μμ€ν ꡬννκΈ°
ꡬν κ³Όμ μλ λͺ κ°μ§ μ£Όμ λ¨κ³κ° ν¬ν¨λ©λλ€:
1. μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬ μ ν λλ μ§μ ꡬμΆνκΈ°
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ νν λ νλ‘μ νΈμ μꡬ μ¬ν, 리μμ€, λμμΈ μ건μ κ³ λ €νμΈμ. MUI, Ant Design, Chakra UIμ κ°μ μΈκΈ° μλ μ΅μ μ κ΄λ²μν μ¬μ κ΅¬μΆ μ»΄ν¬λνΈμ κΈ°λ₯μ μ 곡ν©λλ€. λλ λ λ§μ μ μ°μ±μ μ 곡νμ§λ§ μ΄κΈ° λ Έλ ₯μ΄ λ λ§μ΄ νμν μ체 λ§μΆ€ν μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό ꡬμΆν μλ μμ΅λλ€.
μμ: νλ‘μ νΈκ° Googleμ Material Design κ°μ΄λλΌμΈμ μ€μν΄μΌ νλ κ²½μ°, Material-UI (MUI)κ° νλ₯ν μ νμ λλ€. νλ‘μ νΈκ° κ΅μ νμ μ€μ μ λκ³ μ¬λ¬ μΈμ΄ λ° λ‘μΌμΌμ μ§μν΄μΌ νλ κ²½μ°, λ΄μ₯λ i18n(κ΅μ ν) μ§μμ μ 곡νκ±°λ i18n λΌμ΄λΈλ¬λ¦¬μ μ½κ² ν΅ν©λλ λΌμ΄λΈλ¬λ¦¬λ₯Ό κ³ λ €νμΈμ.
2. λμμΈ μμ€ν μ€κ³ λ° μ μνκΈ°
κ°λ°μ μμνκΈ° μ μ λμμΈ μμ€ν μ μ μνμΈμ. μ¬κΈ°μλ μκ°μ μ€νμΌ, νμ΄ν¬κ·ΈλνΌ, μμ νλ νΈ λ° μ»΄ν¬λνΈ λμμ μ€μ νλ κ³Όμ μ΄ ν¬ν¨λ©λλ€. μΌκ΄μ±μ 보μ₯νκΈ° μν΄ μ€νμΌ κ°μ΄λλ₯Ό λ§λ€κ³ λμμΈ ν ν°μ λ¬ΈμννμΈμ.
μμ: κΈ°λ³Έ λ° λ³΄μ‘° μμ νλ νΈ, μ λͺ©, λ³Έλ¬Έ ν μ€νΈ, λ²νΌμ λν ν μ€νΈ μ€νμΌμ μ μνμΈμ. κ°κ²©(μ: ν¨λ© λ° λ§μ§)κ³Ό λ²νΌκ³Ό κ°μ μ»΄ν¬λνΈμ μκ°μ λͺ¨μ(μ: λ₯κ·Ό λͺ¨μ리, νΈλ² μν, νμ± μν)μ λ¬ΈμννμΈμ.
3. μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬ μ€μΉ λ° κ΅¬μ±νκΈ°
npmμ΄λ yarnκ³Ό κ°μ ν¨ν€μ§ κ΄λ¦¬μλ₯Ό μ¬μ©νμ¬ μ νν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνμΈμ. λΌμ΄λΈλ¬λ¦¬μ λ¬Έμλ₯Ό λ°λΌ νλ‘μ νΈμ λ§κ² ꡬμ±νμΈμ. μ΄ κ³Όμ μλ λΌμ΄λΈλ¬λ¦¬μ CSSλ₯Ό κ°μ Έμ€κ±°λ ν λ§ μ 곡μλ₯Ό μ¬μ©νλ κ²μ΄ ν¬ν¨λ μ μμ΅λλ€.
μμ: MUIμ κ²½μ°, μΌλ°μ μΌλ‘ `npm install @mui/material @emotion/react @emotion/styled` (λλ `yarn add @mui/material @emotion/react @emotion/styled`)λ₯Ό μ¬μ©νμ¬ ν¨ν€μ§λ₯Ό μ€μΉν©λλ€. κ·Έλ° λ€μ React μ ν리μΌμ΄μ λ΄μμ μ»΄ν¬λνΈλ₯Ό κ°μ Έμ μ¬μ©ν μ μμ΅λλ€. λν λΌμ΄λΈλ¬λ¦¬μ κΈ°λ³Έ μ€νμΌμ μ¬μ©μ μ μνκΈ° μν΄ ν λ§ μ 곡μλ₯Ό ꡬμ±ν΄μΌ ν μλ μμ΅λλ€.
4. μ»΄ν¬λνΈ μμ± λ° μ¬μ©μ μ μνκΈ°
λΌμ΄λΈλ¬λ¦¬μ μ»΄ν¬λνΈλ₯Ό νμ©νμ¬ UIλ₯Ό ꡬμΆνμΈμ. λμμΈ μμ€ν μ λ§κ² μ»΄ν¬λνΈλ₯Ό μ¬μ©μ μ μνμΈμ. λλΆλΆμ λΌμ΄λΈλ¬λ¦¬λ props, ν λ§ μ€μ λλ CSS μ¬μ©μ μ μλ₯Ό ν΅ν΄ μ»΄ν¬λνΈμ λͺ¨μκ³Ό λμμ μ¬μ©μ μ μν μ μλ μ΅μ μ μ 곡ν©λλ€. μλ₯Ό λ€μ΄, λ²νΌκ³Ό ν μ€νΈ νλμ μμ, ν¬κΈ°, κΈκΌ΄μ μ‘°μ ν μ μμ΅λλ€.
μμ: MUIλ₯Ό μ¬μ©νμ¬ `color="primary"` λ° `size="large"`μ κ°μ propsλ₯Ό μ¬μ©νμ¬ λ²νΌμ μμκ³Ό ν¬κΈ°λ₯Ό μ¬μ©μ μ μν μ μμ΅λλ€. λ κ³ κΈ μ¬μ©μ μ μλ₯Ό μν΄μλ λΌμ΄λΈλ¬λ¦¬μ ν λ§ μμ€ν μ μ¬μ©νμ¬ κΈ°λ³Έ μ€νμΌμ μ¬μ μνκ±°λ κΈ°μ‘΄ μ»΄ν¬λνΈλ₯Ό νμ₯νλ μ¬μ©μ μ μ μ»΄ν¬λνΈλ₯Ό λ§λ€ μ μμ΅λλ€.
5. ν λ§ λ° λμμΈ ν ν° κ΅¬ννκΈ°
μ¬μ©μκ° λ€μν μκ°μ μ€νμΌ(μ: λΌμ΄νΈ λͺ¨λ λ° λ€ν¬ λͺ¨λ) κ°μ μ ννκ±°λ μ ν리μΌμ΄μ μ λͺ¨μμ μ¬μ©μ μ μν μ μλλ‘ ν λ§ μ€μ μ ꡬννμΈμ. λμμΈ ν ν°μ ν λ§ μ€μ μ λ§€μ° μ€μν©λλ€. λμμΈ ν ν°μ μ¬μ©νμ¬ μκ°μ μ€νμΌμ κ΄λ¦¬νκ³ ν λ§λ₯Ό μ μ©ν λ μΌκ΄μ±μ 보μ₯νμΈμ.
μμ: μμ νλ νΈ, νμ΄ν¬κ·ΈλνΌ λ° κΈ°ν λμμΈ μμ±μ μ μνλ ν λ§ κ°μ²΄λ₯Ό λ§λ€ μ μμ΅λλ€. μ΄ ν λ§ κ°μ²΄λ ν λ§ μ 곡μμκ² μ λ¬λμ΄ μ ν리μΌμ΄μ λ΄μ λͺ¨λ μ»΄ν¬λνΈμ μ€νμΌμ μ μ©ν μ μμ΅λλ€. styled-componentsλ Emotionκ³Ό κ°μ CSS-in-JS λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ κ²½μ°, μ»΄ν¬λνΈ μ€νμΌ λ΄μμ λμμΈ ν ν°μ μ§μ μ κ·Όν μ μμ΅λλ€.
6. μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈ κ΅¬μΆνκΈ°
κΈ°μ‘΄ μ»΄ν¬λνΈμ μ¬μ©μ μ μ μ€νμΌλ§μ κ²°ν©νμ¬ λ³΅μ‘ν UI μμλ₯Ό λνλ΄λ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ₯Ό λ§λμΈμ. μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ μ½λλ₯Ό λ 체κ³μ μ΄κ³ μ μ§ κ΄λ¦¬νκΈ° μ½κ² λ§λλλ€. λ ν° UI μμλ₯Ό λ μκ³ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ‘ λλμΈμ.
μμ: μ΄λ―Έμ§, μ λͺ©, μ€λͺ μ΄ μλ μΉ΄λκ° μλ€λ©΄, μ΄λ―Έμ§ μμ€, μ λͺ©, μ€λͺ μ μν propsλ₯Ό λ°λ `Card` μ»΄ν¬λνΈλ₯Ό λ§λ€ μ μμ΅λλ€. μ΄ `Card` μ»΄ν¬λνΈλ μ ν리μΌμ΄μ μ 체μμ μ¬μ©λ μ μμ΅λλ€.
7. λμμΈ μμ€ν λ° μ»΄ν¬λνΈ λ¬ΈμννκΈ°
λμμΈ μμ€ν κ³Ό μμ±ν μ»΄ν¬λνΈλ₯Ό λ¬ΈμννμΈμ. μ¬μ© μμ, prop μ€λͺ , μ κ·Όμ± κ³ λ € μ¬νμ ν¬ν¨νμΈμ. μ’μ λ¬Έμλ κ°λ°μμ λμμ΄λ κ°μ νμ μ μ΄μ§νκ³ μλ‘μ΄ νμμ΄ μμ€ν μ μ΄ν΄νκ³ μ¬μ©νλ κ²μ λ μ½κ² λ§λλλ€. Storybookκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈλ₯Ό λ¬Έμννκ³ μμ°ν μ μμ΅λλ€.
μμ: Storybookμμ κ° μ»΄ν¬λνΈλ₯Ό λ€μν λ³νκ³Ό propsλ‘ λ³΄μ¬μ£Όλ μ€ν 리λ₯Ό λ§λ€ μ μμ΅λλ€. λν κ° propμ λν λ¬Έμλ₯Ό μΆκ°νμ¬ κ·Έ λͺ©μ κ³Ό μ¬μ© κ°λ₯ν κ°μ μ€λͺ ν μ μμ΅λλ€.
8. ν μ€νΈ λ° λ°λ³΅νκΈ°
μ»΄ν¬λνΈκ° λ€μν λΈλΌμ°μ μ κΈ°κΈ°μμ μμλλ‘ μλνλμ§ μ² μ ν ν μ€νΈνμΈμ. μ¬μ©μ± ν μ€νΈλ₯Ό μννμ¬ μ¬μ©μλ‘λΆν° νΌλλ°±μ μμ§νκ³ κ°μ ν λΆλΆμ νμ νμΈμ. νΌλλ°±κ³Ό λ³ννλ μꡬ μ¬νμ λ°λΌ λμμΈ μμ€ν κ³Ό μ»΄ν¬λνΈλ₯Ό λ°λ³΅μ μΌλ‘ κ°μ νμΈμ. μ΄ κ³Όμ μ μΌλΆλ‘ μ κ·Όμ±μ ν μ€νΈνκ³ λ³΄μ‘° κΈ°μ μ΄ νμν μ¬μ©μμ ν¨κ» ν μ€νΈν΄μΌ ν©λλ€.
μμ: λ¨μ ν μ€νΈλ₯Ό μ¬μ©νμ¬ μ»΄ν¬λνΈκ° μ¬λ°λ₯΄κ² λ λλ§λκ³ κΈ°λ₯μ΄ μμλλ‘ μλνλμ§ νμΈνμΈμ. ν΅ν© ν μ€νΈλ₯Ό μ¬μ©νμ¬ λ€λ₯Έ μ»΄ν¬λνΈκ° μλ‘ μ¬λ°λ₯΄κ² μνΈ μμ©νλμ§ νμΈνμΈμ. μ¬μ©μ ν μ€νΈλ μ¬μ©μ κ²½νμ μ΄ν΄νκ³ μ¬μ©μ± λ¬Έμ λ₯Ό νμ νλ λ° μ€μν©λλ€.
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬ ꡬνμ μν λͺ¨λ² μ¬λ‘
λ€μ λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄λ©΄ λμμΈ μμ€ν ꡬνμ νμ§κ³Ό μ μ§ κ΄λ¦¬μ±μ ν₯μμν¬ μ μμ΅λλ€:
- μκ² μμνκ³ λ°λ³΅νκΈ°: μ΅μνμ μ»΄ν¬λνΈ μΈνΈλ‘ μμνμ¬ νμμ λ°λΌ μ μ§μ μΌλ‘ μΆκ°νμΈμ. μ 체 λμμΈ μμ€ν μ ν λ²μ ꡬμΆνλ €κ³ νμ§ λ§μΈμ.
- μ κ·Όμ± μ°μ μνκΈ°: λͺ¨λ μ»΄ν¬λνΈκ° μ κ·Ό κ°λ₯νκ³ μ κ·Όμ± νμ€(μ: WCAG)μ μΆ©μ‘±νλμ§ νμΈνμΈμ. μ΄λ ν¬μ©μ±κ³Ό λ§μ μ§μμμμ λ²μ μ€μλ₯Ό μν΄ λ§€μ° μ€μν©λλ€.
- λμμΈ ν ν° ν¨κ³Όμ μΌλ‘ μ¬μ©νκΈ°: λμμΈ μμ±μ λμμΈ ν ν°μ μ€μ μ§μ€ννμ¬ ν λ§ μ€μ λ° μ€νμΌ μ λ°μ΄νΈλ₯Ό λ μ½κ² λ§λμΈμ.
- μ»΄ν¬λνΈ ν©μ± μμΉ λ°λ₯΄κΈ°: μ»΄ν¬λνΈκ° μ‘°ν© κ°λ₯νκ³ μ¬μ¬μ© κ°λ₯νλλ‘ μ€κ³νμΈμ. μ¬μ©μ μ μνκΈ° μ΄λ €μ΄ λ¨μΌμ²΄ μ»΄ν¬λνΈλ₯Ό λ§λ€μ§ λ§μΈμ.
- λͺ ννκ³ κ°κ²°ν μ½λ μμ±νκΈ°: μΌκ΄λ μ½λ μ€νμΌμ μ μ§νκ³ μ΄ν΄νκ³ μ μ§ κ΄λ¦¬νκΈ° μ¬μ΄ μ½λλ₯Ό μμ±νμΈμ. μλ―Έ μλ λ³μ μ΄λ¦μ μ¬μ©νκ³ νμν λ μ½λμ μ£Όμμ λ€μΈμ.
- ν μ€νΈ μλννκΈ°: μλνλ ν μ€νΈλ₯Ό ꡬννμ¬ λ²κ·Έλ₯Ό μ‘°κΈ°μ λ°κ²¬νκ³ μ»΄ν¬λνΈκ° μμλλ‘ μλνλμ§ νμΈνμΈμ. μ¬κΈ°μλ λ¨μ ν μ€νΈ, ν΅ν© ν μ€νΈ, μλν¬μλ ν μ€νΈκ° ν¬ν¨λ©λλ€.
- λ²μ κ΄λ¦¬ μ¬μ©νκΈ°: Gitκ³Ό κ°μ λ²μ κ΄λ¦¬ μμ€ν μ μ¬μ©νμ¬ λ³κ²½ μ¬νμ μΆμ νκ³ λ€λ₯Έ μ¬λλ€κ³Ό νμ νμΈμ. μ΄λ μ½λλ² μ΄μ€λ₯Ό κ΄λ¦¬νκ³ νμν κ²½μ° λ³κ²½ μ¬νμ λλ리λ λ° νμμ μ λλ€.
- μ κΈ°μ μΈ λ¬Έμ μ μ§ κ΄λ¦¬: λμμΈ μμ€ν λ° μ»΄ν¬λνΈμ λν λ¬Έμλ₯Ό μ κΈ°μ μΌλ‘ μ λ°μ΄νΈνμ¬ λ³κ²½ μ¬νμ λ°μνμΈμ.
- κ΅μ ν(i18n) λ° νμ§ν(l10n) κ³ λ €νκΈ°: κΈλ‘λ² μ¬μ©μ λͺ©μ μΌλ‘ νλ μ ν리μΌμ΄μ μ κ°λ°νλ κ²½μ° μ²μλΆν° i18n λ° l10nμ κ³ννμΈμ. λ§μ μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬κ° μ΄λ₯Ό μ©μ΄νκ² νλ κΈ°λ₯μ΄λ ν΅ν©μ μ 곡ν©λλ€.
- μΌκ΄λ ν λ§ μ λ΅ μ ννκΈ°: ν λ§(μ: λ€ν¬ λͺ¨λ, μμ μ¬μ©μ μ μ)λ₯Ό ꡬννκΈ° μν μΌκ΄λκ³ μ μ μλ μ κ·Ό λ°©μμ μ±ννμΈμ.
λμμΈ μμ€ν ꡬνμ μν κΈλ‘λ² κ³ λ € μ¬ν
κΈλ‘λ² μ¬μ©μλ₯Ό μν λμμΈ μμ€ν μ ꡬμΆν λλ λ€μ μ¬νμ κ³ λ €ν΄μΌ ν©λλ€:
- μ κ·Όμ±: WCAG(μΉ μ½ν μΈ μ κ·Όμ± κ°μ΄λλΌμΈ) μ§μΉ¨μ μ€μνμ¬ μ μΈκ³ μ₯μ μΈ μ¬μ©μκ° μ ν리μΌμ΄μ μ μ κ·Όν μ μλλ‘ λ³΄μ₯νμΈμ. μ¬κΈ°μλ μ΄λ―Έμ§μ λν λ체 ν μ€νΈ μ 곡, μλ§¨ν± HTML μ¬μ©, μΆ©λΆν μμ λλΉ λ³΄μ₯μ΄ ν¬ν¨λ©λλ€.
- κ΅μ ν(i18n) λ° νμ§ν(l10n): μ¬λ¬ μΈμ΄μ λ‘μΌμΌμ μ§μνλλ‘ μ ν리μΌμ΄μ μ μ€κ³νμΈμ. `react-i18next`μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ²μμ κ΄λ¦¬νκ³ μ¬μ©μμ μΈμ΄μ μ§μμ λ°λΌ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ‘°μ νμΈμ. μλμ΄ λλ νλΈλ¦¬μ΄μ κ°μ μ€λ₯Έμͺ½μμ μΌμͺ½μΌλ‘ μ°λ(RTL) μΈμ΄λ₯Ό κ³ λ €νμΈμ.
- λ¬Ένμ λ―Όκ°μ±: λ€λ₯Έ λ¬ΈνκΆμμ λΆμΎνκ±°λ μ€ν΄λ₯Ό μ΄ μ μλ λ¬Ένμ μ°Έμ‘°λ μ΄λ―Έμ§λ₯Ό μ¬μ©νμ§ λ§μΈμ. νμ§ κ΄μ΅κ³Ό μ νΈλλ₯Ό μΌλμ λμΈμ.
- λ μ§ λ° μκ° νμ: μ¬μ©μμ λ‘μΌμΌμ λ°λΌ λ μ§ λ° μκ° νμμ μ²λ¦¬νμΈμ. `date-fns`λ `moment.js`μ κ°μ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νμ¬ λ μ§μ μκ°μ μ¬λ°λ₯΄κ² νμννμΈμ.
- μ«μ λ° ν΅ν νμ: λ€λ₯Έ μ§μμ λ§λ μ μ ν νμμΌλ‘ μ«μμ ν΅νλ₯Ό νμνμΈμ.
- μ λ ₯ λ°©λ²: λ€μν ν€λ³΄λ λ μ΄μμ λ° μ λ ₯ μ₯μΉ(μ: ν°μΉμ€ν¬λ¦°)λ₯Ό ν¬ν¨ν λ€μν μ λ ₯ λ°©λ²μ μ§μνμΈμ.
- μκ°λ: λ μ§μ μκ°μ νμνκ±°λ μ΄λ²€νΈλ₯Ό μμ½ν λ μκ°λ μ°¨μ΄λ₯Ό κ³ λ €νμΈμ.
- μ±λ₯: νΉν μΈν°λ· μ°κ²°μ΄ λ리거λ λͺ¨λ°μΌ μ₯μΉλ₯Ό μ¬μ©νλ μ¬μ©μλ₯Ό μν΄ μ ν리μΌμ΄μ μ μ±λ₯μ μ΅μ ννμΈμ. μ¬κΈ°μλ μ΄λ―Έμ§ μ§μ° λ‘λ©, CSS λ° JavaScript νμΌ ν¬κΈ° μ΅μν, ν¨μ¨μ μΈ λ λλ§ κΈ°μ μ¬μ©μ΄ ν¬ν¨λ μ μμ΅λλ€.
- λ²κ· μ€μ: λ°μ΄ν° νλΌμ΄λ²μ κ·μ κ³Ό κ°μ λ€λ₯Έ μ§μμ κ΄λ ¨ λ²μ μꡬ μ¬νμ μΈμ§νκ³ μ€μνμΈμ.
- μ¬μ©μ κ²½ν(UX) ν μ€νΈ: λ€λ₯Έ μ§μμ μ¬μ©μμ ν¨κ» μ ν리μΌμ΄μ μ ν μ€νΈνμ¬ κ·Έλ€μ μꡬμ κΈ°λλ₯Ό μΆ©μ‘±νλμ§ νμΈνμΈμ. μ¬κΈ°μλ μ¬μ©μ± ν μ€νΈ μν λ° νΌλλ°± μμ§μ΄ ν¬ν¨λ©λλ€.
μμ: μΌλ³Έ μ¬μ©μλ₯Ό λμμΌλ‘ νλ κ²½μ°, μΌλ³Έμ΄ κΈκΌ΄κ³Ό λμμΈ κ΄λ‘λ₯Ό μ¬μ©νλ κ²μ κ³ λ €νλ©΄μ μ ν리μΌμ΄μ μ΄ μΌλ³Έμ΄ ν μ€νΈλ₯Ό μ¬λ°λ₯΄κ² νμνλμ§ νμΈνμΈμ. μ λ½ μ¬μ©μλ₯Ό λμμΌλ‘ νλ κ²½μ°, λ°μ΄ν° νλΌμ΄λ²μμ κ΄ν GDPR(μΌλ° λ°μ΄ν° λ³΄νΈ κ·μ )μ μ€μνλμ§ νμΈνμΈμ.
λμμΈ μμ€ν ꡬνμ μν λꡬ λ° κΈ°μ
λͺ κ°μ§ λꡬμ κΈ°μ μ μ¬μ©νλ©΄ λμμΈ μμ€ν ꡬν νλ‘μΈμ€λ₯Ό κ°μνν μ μμ΅λλ€:
- Storybook: UI μ»΄ν¬λνΈλ₯Ό λ¬Έμννκ³ μμ°νλ λ° λ리 μ¬μ©λλ λꡬμ λλ€. Storybookμ μ¬μ©νλ©΄ κ° μ»΄ν¬λνΈλ₯Ό λ€μν λ³νκ³Ό propsλ‘ λ³΄μ¬μ£Όλ λνν μ€ν 리λ₯Ό λ§λ€ μ μμ΅λλ€.
- Styled Components/Emotion/CSS-in-JS λΌμ΄λΈλ¬λ¦¬: JavaScript μ½λ λ΄μμ μ§μ CSSλ₯Ό μμ±νκΈ° μν λΌμ΄λΈλ¬λ¦¬λ‘, μ»΄ν¬λνΈ μμ€μ μ€νμΌλ§ λ° ν λ§ μ€μ κΈ°λ₯μ μ 곡ν©λλ€.
- Figma/Sketch/Adobe XD: λμμΈ μμ€ν μμ°μ λ§λ€κ³ μ μ§ κ΄λ¦¬νλ λ° μ¬μ©λλ λμμΈ λꡬμ λλ€.
- λμμΈ ν ν° μμ±κΈ°: Theoλ Style Dictionaryμ κ°μ΄ λμμΈ ν ν°μ κ΄λ¦¬νκ³ μμ±νλ λ° λμμ΄ λλ λꡬμ λλ€.
- ν μ€νΈ νλ μμν¬ (Jest, React Testing Library): μ»΄ν¬λνΈ κΈ°λ₯κ³Ό μ μ§ κ΄λ¦¬μ±μ 보μ₯νκΈ° μν΄ λ¨μ λ° ν΅ν© ν μ€νΈλ₯Ό μμ±νλ λ° μ¬μ©λ©λλ€.
- κ΅μ ν λΌμ΄λΈλ¬λ¦¬ (i18next, react-intl): μ ν리μΌμ΄μ μ λ²μ λ° νμ§νλ₯Ό μ©μ΄νκ² ν©λλ€.
- μ κ·Όμ± κ°μ¬ λꡬ (μ: Lighthouse, Axe): μ»΄ν¬λνΈμ μ κ·Όμ±μ νμΈνκ³ κ°μ νλ λ° μ¬μ©λ©λλ€.
κ³ κΈ μ£Όμ
κ³ κΈ κ΅¬νμ μν΄μλ λ€μ κ³ λ € μ¬νμ μ΄ν΄λ³΄μΈμ:
- μ»΄ν¬λνΈ ν©μ± κΈ°μ : λ λ νλ‘, κ³ μ°¨ μ»΄ν¬λνΈ(HOC), children propμ μ¬μ©νμ¬ λ§€μ° μ μ°νκ³ μ¬μ¬μ© κ°λ₯ν μ»΄ν¬λνΈλ₯Ό λ§λλλ€.
- μλ² μ¬μ΄λ λ λλ§(SSR) λ° μ μ μ¬μ΄νΈ μμ±(SSG): SSR λλ SSG νλ μμν¬(μ: Next.js, Gatsby)λ₯Ό μ¬μ©νμ¬ μ±λ₯κ³Ό SEOλ₯Ό κ°μ ν©λλ€.
- λ§μ΄ν¬λ‘ νλ‘ νΈμλ: μ ν리μΌμ΄μ μ λ μκ³ λ 립μ μΌλ‘ λ°°ν¬ κ°λ₯ν νλ‘ νΈμλ μ ν리μΌμ΄μ μΌλ‘ λλλ©°, κ°κ° λ³λμ React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©ν μ μμ΅λλ€.
- λμμΈ μμ€ν λ²μ κ΄λ¦¬: νμ νΈνμ±κ³Ό μνν μ νμ μ μ§νλ©΄μ λμμΈ μμ€ν μ μ λ°μ΄νΈ λ° λ³κ²½ μ¬νμ κ΄λ¦¬ν©λλ€.
- μλνλ μ€νμΌ κ°μ΄λ μμ±: μ½λμ λμμΈ ν ν°μμ μ€νμΌ κ°μ΄λλ₯Ό μλμΌλ‘ μμ±νλ λꡬλ₯Ό νμ©ν©λλ€.
κ²°λ‘
React μ»΄ν¬λνΈ λΌμ΄λΈλ¬λ¦¬λ‘ λμμΈ μμ€ν μ ꡬννλ κ²μ μΌκ΄μ± μκ³ νμ₯ κ°λ₯νλ©° μ μ§ κ΄λ¦¬νκΈ° μ¬μ΄ UIλ₯Ό ꡬμΆνλ κ°λ ₯ν μ κ·Ό λ°©μμ λλ€. λͺ¨λ² μ¬λ‘λ₯Ό λ°λ₯΄κ³ κΈλ‘λ² μꡬ μ¬νμ κ³ λ €ν¨μΌλ‘μ¨ μ μΈκ³ μ¬μ©μμκ² κΈμ μ μΈ κ²½νμ μ 곡νλ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€. ν¬μ©μ μ΄κ³ μ μΈκ³μ μΌλ‘ μ κ·Ό κ°λ₯ν μ ν리μΌμ΄μ μ ꡬμΆνκΈ° μν΄ μ κ·Όμ±, κ΅μ ν λ° λ¬Ένμ λ―Όκ°μ±μ μ°μ μνλ κ²μ μμ§ λ§μΈμ.
λμμΈ μμ€ν μ μ΄μ μ λ°μλ€μ΄μΈμ. λμμΈ μμ€ν μ ꡬνν¨μΌλ‘μ¨ νλ‘μ νΈμ μ₯κΈ°μ μΈ μ±κ³΅μ ν¬μνκ³ μ¬μ©μ κ²½νμ κ°μ νλ©° κ°λ° μ£ΌκΈ°λ₯Ό κ°μνν μ μμ΅λλ€. κ·Έ λ Έλ ₯μ μΆ©λΆν κ°μΉκ° μμΌλ©°, λ μ’κ³ μ μ§ κ΄λ¦¬κ° μ©μ΄νλ©° μ μΈκ³μ μΌλ‘ μ κ·Ό κ°λ₯ν μ¬μ©μ μΈν°νμ΄μ€λ₯Ό λ§λλλ€.