github-blog.png


✍️ Today I Learned


1. React μƒνƒœκ΄€λ¦¬




1-1. ν”„λ‘ νŠΈμ—”λ“œ κ°œλ°œμ—μ„œμ˜ μƒνƒœ 관리


  • μš°μ„  μƒνƒœλž€ μ»΄ν¬λ„ŒνŠΈ λ‚΄λΆ€μ—μ„œ λ³€ν™”λ˜λŠ” 값이닀.

    νŠΉλ³„νžˆ ν”„λ‘ νŠΈμ—”λ“œ μ˜μ—­μ—μ„œλŠ” β€œλ™μ μœΌλ‘œ ν‘œν˜„λ˜λŠ” 데이터”라 λΆ€λ₯Ό 수 μžˆλ‹€.

  • μš°λ¦¬λŠ” μ»΄ν¬λ„ŒνŠΈ μš°μ„  개발 방식에 λŒ€ν•΄μ„œ ν•™μŠ΅ν–ˆμ—ˆλ‹€.

    21.09.07 κ²Œμ‹œκΈ€ μ°Έμ‘°

    ν•˜ν–₯식 데이터 흐름에 따라 propsλ₯Ό μ΄μš©ν•΄μ„œ 데이터λ₯Ό μ „λ‹¬ν•˜λ©° μ΄λŠ” 단방ν–₯ 데이터 흐름이닀.

    λ”°λΌμ„œ 이 β€œμƒνƒœβ€μ˜ μœ„μΉ˜κ°€ 맀우 μ€‘μš”ν•˜λ‹€. μš°μ„  Javascriptλ₯Ό 처음 배울 λ•Œ 처럼 μ „μ—­ λ³€μˆ˜μ™€ μ§€μ—­ λ³€μˆ˜μ— 처럼 생각을 ν•΄λ³΄μž.

    μŠ€ν¬λ¦°μƒ·, 2021-10-01 17-40-39

    둜컬 μƒνƒœλŠ” νŠΉμ • μ»΄ν¬λ„ŒνŠΈ μ•ˆμ—μ„œλ§Œ κ΄€λ¦¬λ˜λŠ” μƒνƒœμ΄λ©°, μ „μ—­ μƒνƒœλŠ” ν”„λ‘œλ•νŠΈ 전체 ν˜Ήμ€ μ—¬λŸ¬κ°€μ§€ μ»΄ν¬λ„ŒνŠΈκ°€ λ™μ‹œμ— κ΄€λ¦¬ν•˜λŠ” μƒνƒœμ΄λ‹€.

    둜컬 μƒνƒœλ₯Ό κ΅¬λΆ„ν•˜λŠ” 것은 κ°„λ‹¨ν•˜λ‹€. 보톡 μ»΄ν¬λ„ŒνŠΈ λ‚΄μ—μ„œλ§Œ 영ν–₯을 λΌμ§€λŠ” μƒνƒœλŠ” 둜컬 μƒνƒœλ₯Ό λœ»ν•œλ‹€. 그럼 μ „μ—­ μƒνƒœλŠ” λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈμ™€ μƒνƒœλ₯Ό κ³΅μœ ν•˜κ³  영ν–₯을 λΌμΉ˜λŠ” μƒνƒœλ₯Ό μ˜λ―Έν•  것이닀.

    μ „μ—­ μƒνƒœλΌλŠ” 말은 μ„œλ‘œ λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈκ°€ λ™μΌν•œ μƒνƒœλ₯Ό λ‹€λ£¬λ‹€λŠ” λœ»μ΄λ‹€. λ§Œμ•½ μ΄λŸ¬ν•œ 상황이라면, 이 μΆœμ²˜λŠ” 였직 ν•œ 곳이어야 ν•œλ‹€. 만일 사본이 μžˆμ„ 경우, 두 λ°μ΄ν„°λŠ” μ„œλ‘œ 동기화(sync)ν•˜λŠ” 과정이 ν•„μš”ν•œλ°, μ΄λŠ” 문제λ₯Ό μ–΄λ ΅κ²Œ λ§Œλ“€κ²Œ λœλ‹€. λ¦¬μ•‘νŠΈμ—μ„œλŠ” ν•œ 곳의 μ»΄ν¬λ„ŒνŠΈμ—μ„œλ§Œ μƒνƒœλ₯Ό μ €μž₯ν•˜κ³  μ ‘κ·Όν•˜λŠ”κ²Œ 데이터λ₯Ό 효과적이고 효율적으둜 κ΄€λ¦¬ν•˜λŠ” 방식이닀.

    이λ₯Ό λ‹€λ₯΄κ²Œ λ§ν•˜μžλ©΄ ”데이터 무결성을 μœ„ν•΄, λ™μΌν•œ λ°μ΄ν„°λŠ” 항상 같은 κ³³μ—μ„œ 데이터λ₯Ό κ°€μ§€κ³  μ˜€λ„λ‘ ν•΄μ•Όλ§Œ ν•œλ‹€β€ 이닀.

    Single source of truth(μ‹ λ’°ν•  수 μžˆλŠ” 단일 좜처) 원칙은 ν”„λ‘ νŠΈμ—”λ“œ 뿐만 μ•„λ‹ˆλΌ λ‹€μ–‘ν•œ κ³³μ—μ„œ μ–ΈκΈ‰λ˜λŠ” 원칙이닀.



1-2. μƒνƒœ 관리λ₯Ό μœ„ν•œ 각쒅 툴


reactμƒνƒœκ΄€λ¦¬

  • μƒνƒœ 관리에 λŒ€ν•΄ μ „λ°˜μ μœΌλ‘œ μ•Œμ•„λ³΄μ•˜λ‹€.

    μœ„μ—μ„œ λ§ν–ˆλ“―μ΄ μƒνƒœλ₯Ό μ „μ—­μƒνƒœλ‘œ κ΄€λ¦¬ν•˜λŠ” 방식은 데이터 무결성을 μœ„ν•΄ λ™μΌν•œ μ»΄ν¬λ„ŒνŠΈμ—μ„œ κ΄€λ¦¬ν•΄μ•Όν•œλ‹€. λ‹€λ₯Έ μ»΄ν¬λ„ŒνŠΈμ—μ„œ 이 μ „μ—­μƒνƒœμ— μ ‘κ·Όν•˜λ €λ©΄ props둜 데이터λ₯Ό μ „λ‹¬ν•΄μ£Όμ–΄μ•Όλ§Œ ν•˜μœ„ μ»΄ν¬λ„ŒνŠΈμ—μ„œλ„ 이 μ „μ—­μƒνƒœλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€. 이 과정이 μ»΄ν¬λ„ŒνŠΈμ˜ 계측 단계가 λ§Žμ€ κ³„μΈ΅μœΌλ‘œ μ΄λ£¨μ–΄μ Έμžˆλ‹€λ©΄ 맀우 λΆˆνŽΈν•  것이닀.

    κ·ΈλŸ¬ν•œ λΆˆνŽΈν•¨μ„ ν•΄μ†Œν•˜κΈ° μœ„ν•΄ 이λ₯Ό λ„μ™€μ£ΌλŠ” 각쒅 νˆ΄λ“€μ΄ μžˆλ‹€. ν•΄λ‹Ή νˆ΄λ“€μ„ μ‚¬μš©ν•¨μœΌλ‘œμ¨ μ–»λŠ” 이점은 λ‹€μŒκ³Ό κ°™λ‹€.

    • μ²«λ²ˆμ§Έλ‘œλŠ” μ•žμ„œ κΎΈμ€€νžˆ μ–ΈκΈ‰ν•œ μ „μ—­ μƒνƒœλ₯Ό μœ„ν•œ μ €μž₯μ†Œλ₯Ό μ œκ³΅ν•΄ μ€€λ‹€.

    • λ‹€μŒμ€, props drilling 문제λ₯Ό ν•΄κ²° ν•΄μ€€λ‹€. 첫번째 이점의 μ—°μž₯선이닀. μœ„μ—μ„œ μ–ΈκΈ‰ν•œ 계측 κ΅¬μ‘°μ—μ„œ props둜 데이터λ₯Ό μ „λ‹¬ν•΄μ£ΌλŠ” 과정을 μƒλž΅ν•  수 있게 λœλ‹€.

  • β€œμƒνƒœ 관리 툴이 λ°˜λ“œμ‹œ ν•„μš”ν• κΉŒμš”?” λΌλŠ” μ§ˆλ¬Έμ—λŠ” β€œμ•„λ‹™λ‹ˆλ‹€β€ λΌλŠ” 닡변을 ν•  수 μžˆλ‹€.

    μƒνƒœ 관리 툴이 없어도 μΆ©λΆ„νžˆ 규λͺ¨μžˆλŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ λ§Œλ“€ μˆ˜λŠ” μžˆλ‹€. κ·ΈλŸ¬λ―€λ‘œ μž₯단점을 λΆ„λͺ…νžˆ μΈμ§€ν•˜κ³  μƒνƒœ 관리 νˆ΄μ„ μ¨μ•Όν•œλ‹€.

    그리고 μƒνƒœ κ΄€λ¦¬μ˜ 기본기라고 λ³Ό 수 μžˆλŠ” β€œμƒνƒœκ°€ 어디에 μœ„μΉ˜ν•΄μ•Ό ν•˜λŠ”μ§€β€ λΌλŠ” κ°œλ…μ„ μΈμ§€ν•˜λŠ”κ²Œ μš°μ„ μ΄ λ˜μ–΄μ•Ό ν•œλ‹€.



1-3. Redux


  • Reactμ—μ„œλŠ” μƒνƒœμ™€ 속성(props)을 μ΄μš©ν•œ μ»΄ν¬λ„ŒνŠΈ λ‹¨μœ„ 개발 μ•„ν‚€ν…μ²˜λ₯Ό λ°°μ› λ‹€λ©΄, Reduxμ—μ„œλŠ” μ»΄ν¬λ„ŒνŠΈμ™€ μƒνƒœλ₯Ό λΆ„λ¦¬ν•˜μ—¬ κ΄€λ¦¬ν•œλ‹€. μƒνƒœ λ³€κ²½ λ‘œμ§μ„ μ»΄ν¬λ„ŒνŠΈλ‘œλΆ€ν„° λΆ„λ¦¬ν•˜λ©΄, ν‘œν˜„μ— μ§‘μ€‘ν•œ 보닀 λ‹¨μˆœν•œ ν•¨μˆ˜ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ 수 있게 λœλ‹€.

    λ‹¨μˆœνžˆ λ§ν•˜μžλ©΄ Reactμ—μ„œλŠ” μƒνƒœλ₯Ό StoreλΌλŠ” λ³„λ„μ˜ μ˜€μ§ν•˜λ‚˜λΏμΈ μž₯μ†Œμ—μ„œ κ΄€λ¦¬ν•˜κ²Œλ˜λ©°, ν•΄λ‹Ή μž₯μ†Œμ—μ„œ μƒνƒœλ₯Ό κ΄€λ¦¬ν•˜κ²Œ λœλ‹€.

    κ·Έλ ‡λ‹€λ©΄ ν•΄λ‹Ή μƒνƒœλ“€μ€ μ–΄λ–»κ²Œ λ³€κ²½ν•΄μ•Όν• κΉŒ? κ°„λ‹¨νžˆ λ§ν•˜μžλ©΄ Action을 ν†΅ν•΄μ„œ λ³€ν™”λ₯Ό κ°μ§€ν•˜λ©°, Dispatchλ©”μ„œλ“œλ₯Ό ν†΅ν•˜μ—¬ Action을 μ „λ‹¬ν•œλ‹€. Store에 λ“€μ–΄κ°€κΈ°μ „ Reducerλ₯Ό κ±°μ³μ„œ ν˜„μž¬μ˜ μƒνƒœ(State)와 μ „λ‹¬λœ μ•‘μ…˜μ΄ κ²°ν•©λ˜μ–΄ μƒˆλ‘œμš΄ μƒνƒœλ‘œ λ³€κ²½λ˜κ²Œ λœλ‹€.

    redux-data-flow

    잘 μ •λ¦¬λœ λΈ”λ‘œκ·Έκ°€ μžˆμ–΄μ„œ ν•΄λ‹Ή 링크 참쑰둜 Redux μ„€λͺ…은 λŒ€μ²΄ν•˜κ² λ‹€.



1-4. Cmarket (Hooks 버전)


μ»΄ν¬λ„ŒνŠΈ ꡬ쑰

  • μ»΄ν¬λ„ŒνŠΈ ꡬ쑰λ₯Ό κ°μ•ˆν•˜μ—¬ μƒνƒœμ˜ μœ„μΉ˜λ₯Ό κ³ λ €ν•˜μ—¬ μ½”λ”©ν•˜μ˜€λ‹€.

    • μ „μ—­μƒνƒœ(items, cartItems)λŠ” μ΅œμƒλ‹¨ μ»΄ν¬λ„ŒνŠΈ App μ»΄ν¬λ„ŒνŠΈμ—μ„œ 관리.

    • Item μ»΄ν¬λ„ŒνŠΈμ—μ„œ items μƒνƒœλ₯Ό 닀루기 μœ„ν•΄μ„œλŠ” App - ItemListContainer - Item μ»΄ν¬λ„ŒνŠΈκΉŒμ§€ μƒνƒœλ₯Ό λ‚΄λ €μ€˜μ•Ό ν•˜λŠ” props drilling ν˜„μƒ λ°œμƒ

참쑰 : Github 링크



1-5. Cmarket (Redux 버전)


참쑰 : Github 링크



πŸ€” Understanding

  • λ¦¬μ•‘νŠΈ μƒνƒœ 관리에 λŒ€ν•΄ μ§‘μ€‘μ μœΌλ‘œ ν•™μŠ΅ν–ˆλ‹€.

    μš°μ„  μ „μ—­ μƒνƒœλΌλŠ” κ°œλ…μ΄ μ°Έ μ™€λ‹Ώμ•˜λ‹€.

    μ•„λ¬΄λž˜λ„ μ§€μ—­ μƒνƒœλ‘œ κ΄€λ¦¬λœ state듀은 μ»΄ν¬λ„ŒνŠΈλ₯Ό λ„˜λ‚˜λ“€ 수둝 props둜 전달을 ν•΄μ•Όν•˜λ―€λ‘œ λΆˆνŽΈν•œκ±΄ μ‚¬μ‹€μ΄λ‹ˆ..

  • κ·Έλž˜λ„ μš°μ„  기본기인 μƒνƒœκ΄€λ¦¬λ₯Ό μΆ©λΆ„νžˆ ν•™μŠ΅ν•œ λ’€ μ ‘κ·Όν•΄μ•Όκ² λ‹€!