본문으둜 κ±΄λ„ˆλ›°κΈ°

πŸ‘‰ React Architecture 및 νŒ¨ν„΄κ³Ό κ΄€λ ¨λœ 아티클

🎈 λ¦¬μ•‘νŠΈ 섀계 κ°€μ΄λ“œβ€‹

λ¦¬μ•‘νŠΈ 섀계λ₯Ό ν•˜λŠ” 원칙​

  1. μš°λ¦¬λŠ” ν™•μž₯μ„±μžˆκ³  μž¬μ‚¬μš©μ„± μžˆλŠ” μ½”λ“œλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€
  2. 관심사에 λ”°λΌμ„œ μ½”λ“œλ₯Ό λΆ„λ¦¬ν•˜κ³  단일 μ±…μž„μ„ κ°€μ§€λŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•œλ‹€
  3. 외뢀에 μ œμ–΄λ₯Ό μœ„μž„μ‹œμΌœμ•Ό ν•œλ‹€

μ»΄ν¬λ„ŒνŠΈμ˜ 사전적 μ •μ˜μ— λ”°λ₯΄λ©΄ μ»΄ν¬λ„ŒνŠΈλŠ” μž¬μ‚¬μš©μ„±κ³Ό λ²”μš©μ„±μ„ μœ„ν•΄μ„œ λ§Œλ“€μ–΄μ Έμ•Ό ν•œλ‹€.

λ¦¬μ•‘νŠΈ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ”± ν•œκ°€μ§€ μ—­ν• λ§Œ μˆ˜ν–‰μ‹œν‚€κΈ° μœ„ν•΄ 섀계 ν•˜κΈ° μœ„ν•΄μ„œλŠ” μˆœμˆ˜ν•¨μˆ˜μ˜ νŠΉμ„±κ³Ό 같이 λ™μΌν•œ propsλ₯Ό λ°›μœΌλ©΄ 같은 JSX λ¦¬ν„΄ν•˜λŠ” μˆœμˆ˜ν•¨μˆ˜λ‘œ 이뀄져야 ν•œλ‹€. 잘 격리되고 역할이 잘 μ •μ˜ν•΄μ„œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€λ©΄ μ½”λ“œκ°€ λ„ˆλ¬΄ κ΄‘λ²”μœ„ν•œ 역할을 μˆ˜ν–‰ν•˜κ³  λ³΅μž‘ν•΄μ§€λŠ” κ±Έ 방지해 μ€€λ‹€. 단일 μ±…μž„μ„ κ°€μ§€λŠ” 순수 μ»΄ν¬λ„ŒνŠΈλ“€μ€ ν…ŒμŠ€νŠΈν•˜κΈ° μ’‹κ³  가독성도 μ’‹λ‹€.

μ œμ–΄λ₯Ό 외뢀에 μœ„μž„ ν• μˆ˜λ‘ μ»΄ν¬λ„ŒνŠΈμ˜ μœ μ—°μ„±κ³Ό μž¬μ‚¬μš©μ„±μ΄ 높아진닀. 반면, μ œμ–΄λ₯Ό μœ„μž„ν•˜λ©΄ ν• μˆ˜λ‘ μœ„μž„ν•œ μ½”λ“œλ₯Ό μ‚¬μš© ν•˜λŠ” μ½”λ“œμ— λŒ€ν•œ 이해 λ‚œμ΄λ„κ°€ λ†’μ•„ κ°€κ³ , 가독성이 λ–¨μ–΄μ§„λ‹€λŠ” λ¬Έμ œλ„ μžˆλ‹€. μœ„μž„κ³Ό μ‚¬μš© μš©μ΄μ„±μ˜ 쀑심을 잘 μž‘λŠ”κ²Œ μ€‘μš”ν•˜λ‹€.

관심사에 λ”°λ₯Έ 뢄리와 μž¬μ‚¬μš©μ„±μ˜ ν™•λŒ€λ₯Ό μœ„ν•΄ μ œμ–΄ μœ„μž„μ„ μ μ ˆν•˜κ²Œ ν•˜κ³  또, λ„ˆλ¬΄ 어렡지 μ•Šκ²Œ μ‚¬μš©μ„±λ„ λ†’μ΄λŠ” κ·Έ μ‚¬μ΄μ˜ μ΅œμ μ„ μ°Ύμ•„λ‚΄λŠ”κ²Œ 개발자의 λͺ«μΈ 것 κ°™λ‹€.

🎈 μœ μš©ν•œ λ¦¬μ•‘νŠΈ νŒ¨ν„΄ 5가지​

원본: 5 Advanced React Patterns

  • μ–΄λ–»κ²Œ ν•˜λ©΄ μž¬μ‚¬μš©κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό 각각 λ‹€λ₯Έ use case듀에 λ§žλ„λ‘ λ§Œλ“€ 수 μžˆμ„κΉŒ?
  • μ–΄λ–»κ²Œ ν•˜λ©΄ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ°„λ‹¨ν•œ API둜 μ“°κΈ° μ‰½κ²Œ λ§Œλ“€ 수 μžˆμ„κΉŒ?
  • μ–΄λ–»κ²Œ ν•˜λ©΄ UI와 κΈ°λŠ₯μ„±μ˜ μΈ‘λ©΄μ—μ„œ ν™•μž₯ κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ 수 μžˆμ„κΉŒ?

μš°λ¦¬κ°€ 잘 μ„€κ³„λœ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œ ν”νžˆ 객체 지ν–₯μ—μ„œ μ΄μ•ΌκΈ°ν•˜λŠ” "μ€‘λ³΅ν•˜μ§€λ§ˆλΌ"λΌλŠ” DRY 원칙을 따라야 ν•˜λŠ”λ°, 그럴렀면 μž¬μ‚¬μš©κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€μ–΄μ•Ό λœλ‹€. κ·Έ μž¬μ‚¬μš©κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€λ €λ©΄ μš°λ¦¬κ°€ 각각 λ‹€λ₯Έ use case에 맞게 λ§Œλ“€μ–΄μ•Ό ν•˜κ³  그에 따라 μ»΄ν¬λ„ŒνŠΈμ— κ°„λ‹¨ν•œ API μ“°κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄μ•Ό ν•œλ‹€.

μ»΄ν¬λ„ŒνŠΈλ₯Ό κ°„λ‹¨ν•œ API둜 μ“°κΈ° μ‰½κ²Œ λ§Œλ“€κΈ° μœ„ν•΄μ„œ μ’€ 더 μœ μ—°ν•˜κ³  μœ΅ν†΅μ„±μžˆλŠ” μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€μ–΄μ•Ό ν•˜λŠ”λ° κ·ΈλŸ¬ν•œ κ΄€λ ¨λœ νŒ¨ν„΄λ“€λ„ ꡉμž₯히 λ§Žλ‹€. κ·Έ νŒ¨ν„΄λ“€μ˜ 기본적인 κ°œλ…μ˜ λ² μ΄μŠ€λŠ” IoC(μ œμ–΄μ˜ μ—­μ „)이 발판으둜 λ˜μ–΄ μžˆλŠ”λ°, ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ—κ²Œ μ œμ–΄κΆŒμ„ λ„˜μ£Όκ³  흐름에 맞게 ν†΅μ œ? λ˜λŠ” ν•΄λ‹Ή λ‘œμ§μ„ κ΅¬ν˜„ν•˜κ³  이 흐름에 λŒ€ν•œ ν˜ΈμΆœμ€ μ™ΈλΆ€ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ ν•΄μ£ΌλŠ” λ°©μ‹μœΌλ‘œ κ°„λ‹¨ν•œ APIλ₯Ό λ§Œλ“€ 수 있으며 μž¬μ‚¬μš©κ°€λŠ₯ν•œ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ§Œλ“€ 수 μžˆλ‹€.

ν”νžˆ 많이 μ‚¬μš©ν•˜κ³  μžˆλŠ” μ»€μŠ€ν…€ 훅도 예λ₯Ό λ“€μˆ˜κ°€ μžˆλŠ”λ° 이 μ»€μŠ€ν…€ 훅을 μƒμ„±ν•˜μ—¬ μ‚¬μš©ν•˜λ©΄ λ‘œμ§μ„ 뢄리할 수 있으며 μ €ν¬λŠ” 이 ν›…μœΌλ‘œ μ»΄ν¬λ„ŒνŠΈμ— κ°€μ Έλ‹€ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ— 맞게 μ‚¬μš©ν•  수 μžˆλ‹€. λ”°λΌμ„œ μ œμ–΄κΆŒμ„ μ»΄ν¬λ„ŒνŠΈκ°€ 가지고 있고 ν•΄λ‹Ή ν†΅μ œκΆŒ?을 λ„˜κ²¨μ£Όμ–΄ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈμ—μ„œ ν˜ΈμΆœν•˜λŠ” 것이 μ•„λ‹Œ ν•΄λ‹Ή μ»΄ν¬λ„ŒνŠΈ λ°–μ—μ„œ ν˜ΈμΆœν•˜κ²Œ ν•˜μ—¬ 관심사λ₯Ό λΆ„λ¦¬ν•¨μœΌλ‘œμ¨ μ»΄ν¬λ„ŒνŠΈλ₯Ό μž¬μ‚¬μš©ν•  수 μžˆλ‹€κ³  μƒκ°ν•œλ‹€.

🎈 λ¦¬μ•‘νŠΈ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜ ꡬ쑰 - μ•„ν† λ―Ή λ””μžμΈβ€‹

μ•„ν† λ―Ή λ””μžμΈμ€ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό μž‘κ³  λ‹¨μˆœν•œ μš”μ†Œλ‘œ λΆ„λ¦¬ν•˜λŠ” κ°œλ…μ΄λ©°, μΌκ΄€λœ UIλ₯Ό λ§Œλ“€κ³  μœ μ§€λ³΄μˆ˜μ„±μ„ ν–₯μƒμ‹œμΌœμ€€λ‹€.

μ›Ή μ‚¬μ΄νŠΈμ˜ ꡬ성 블둝이 HTML μš”μ†Œλ“€μ΄λ©°, 이 μš”μ†Œλ“€μ€ μ›μžλΌκ³  λ³Ό 수 μžˆλ‹€. μ›μžκ°€ κ²°ν•©λ˜μ–΄ λΆ„μžκ°€ λ˜λŠ” κ²ƒμ²˜λŸΌ HTML μš”μ†Œλ“€μ€ κ²°ν•©λ˜μ–΄ λ³΅μž‘ν•œ νŽ˜μ΄μ§€λ₯Ό ν˜•μ„±ν•œλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ 각 νŽ˜μ΄μ§€λŠ” μ»΄ν¬λ„ŒνŠΈ(λ˜λŠ” HTML μš”μ†Œ)둜 뢄해될 수 있으며, λΆ„ν•΄λœ μ»΄ν¬λ„ŒνŠΈλŠ” ν™”ν•™μ—μ„œ κ°€λ₯΄μΉ˜λŠ” λΆ„μž, μœ κΈ°μ²΄μ™€ μœ μ‚¬ν•˜λ‹€.

μ›μžλŠ” λ²„νŠΌ, 제λͺ©, ν…μŠ€νŠΈ μž…λ ₯ ν•„λ“œμ™€ 같은 κ°€μž₯ μž‘μ€ ꡬ성 μ»΄ν¬λ„ŒνŠΈμ΄λ‹€. μ›μžλŠ” λͺ¨λ“  μ»΄ν¬λ„ŒνŠΈλ“€μ˜ κΈ°μ΄ˆκ°€ λ˜λŠ” 블둝이며, 더 이상 λΆ„ν•΄ 될 수 μ—†λŠ” ν•„μˆ˜ μš”μ†Œμ΄λ‹€. λΆ„μžλŠ” 2개 μ΄μƒμ˜ μ›μžλ‘œ κ΅¬μ„±λ˜μ–΄ 있으며, ν•˜λ‚˜μ˜ λ‹¨μœ„λ‘œ ν•¨κ»˜ λ™μž‘ν•˜λŠ” UI μ»΄ν¬λ„ŒνŠΈλ“€μ˜ λ‹¨μˆœν•œ 그룹이닀. 예λ₯Ό λ“€μ–΄ HTML ν…μŠ€νŠΈ μž…λ ₯ ν•„λ“œ, λ ˆμ΄λΈ”, 였λ₯˜ 메세지 λ˜λŠ” HTML ν…μŠ€νŠΈ μž…λ ₯ ν•„λ“œμ™€ λ²„νŠΌμœΌλ‘œ κ΅¬μ„±λœ 검색 μ»΄ν¬λ„ŒνŠΈκ°€ μžˆλ‹€. μœ κΈ°μ²΄λŠ” λΆ„μž, μ›μž λ˜λŠ” λ‹€λ₯Έ 유기체의 그룹으둜 κ΅¬μ„±λœ 비ꡐ적 λ³΅μž‘ν•œ 그룹이닀. 이 μœ κΈ°μ²΄λ“€μ€ μΈν„°νŽ˜μ΄μŠ€μ˜ κ°œλ³„μ μΈ μ˜μ—­μ„ ν˜•μ„±ν•œλ‹€.

test

ν…œν”Œλ¦Ώμ€ μ»΄ν¬λ„ŒνŠΈλ“€μ„ λ°°μΉ˜ν•˜κ³  μ„€κ³„μ˜ ꡬ쑰λ₯Ό 보여쀀닀. νŽ˜μ΄μ§€μ˜ μ‹€μ œ μ»΄ν¬λ„ŒνŠΈκ°€ 없을 경우, νŽ˜μ΄μ§€κ°€ μ–΄λ–»κ²Œ 보일지에 λŒ€ν•œ 골격 ꡬ쑰이닀. νŽ˜μ΄μ§€λŠ” μ‹€μ œ 컨텐츠듀을 λ°°μΉ˜ν•œ UIλ₯Ό 보여주며, ν…œν”Œλ¦Ώμ˜ κ΅¬μ²΄ν™”λœ μΈμŠ€ν„΄μŠ€μ΄λ‹€. ν…œν”Œλ¦Ώκ³Ό νŽ˜μ΄μ§€λŠ” 유기체, λΆ„μž, μ›μžλ₯Ό ν¬ν•¨ν•˜κ³  μžˆλ‹€. μ΄λŸ¬ν•œ μž‘μ€ ꡬ성 μš”μ†Œλ“€μ˜ 결합은 μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©μž μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬μ„±ν•œλ‹€.

test

μž₯점​

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜κ³Ό λΆ„λ¦¬ν•˜μ—¬ μ»΄ν¬λ„ŒνŠΈλ₯Ό κ°œλ°œν•˜κ³  ν…ŒμŠ€νŠΈν•  수 있으며, μŠ€νƒ€μΌ κ°€μ΄λ“œμ™€ 같은 λ„κ΅¬μ—μ„œ λ³Ό 수 μžˆλ‹€. 그리고 톡합 κ°œλ°œμ„ ν•  λ•Œ, λ°±μ—”λ“œ μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ λ‘œμ§μ— μ˜μ‘΄ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” μž₯점이 μžˆλ‹€.

일련의 νŒ¨ν„΄μ΄ ν™•λ¦½λ˜λ©΄, 섀계 변경이 ν•„μš”ν•œ κ²½μš°μ— λŒ€λΉ„ν•˜μ—¬ 더 λΉ λ₯΄κ³  μœ μ—°μ„± μžˆλŠ” λΉŒλ“œ ν”„λ‘œμ„ΈμŠ€λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. λ˜ν•œ 기쑴의 μ»΄ν¬λ„ŒνŠΈλ“€μ„ μž¬μ‚¬μš©ν•˜κ³  있기 λ•Œλ¬Έμ— λ””μžμΈμ„ 일관성 있게 톡일할 수 μžˆλ‹€.

νŠΉμ • μ»΄ν¬λ„ŒνŠΈμ— CSSκ°€ κ°•ν•˜κ²Œ κ²°ν•©λ˜μ–΄ 있기 λ•Œλ¬Έμ— CSSλ₯Ό 훨씬 잘 관리할 수 μžˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ ꡬ쑰에 따라 μ»΄ν¬λ„ŒνŠΈμ—μ„œ μ‚¬μš©λ˜λŠ” CSS만 λ Œλ”λ§ν•˜λ„λ‘ ν•΄μ•Ό ν•œλ‹€.

단점​

μ»΄ν¬λ„ŒνŠΈκ°€ λΆ„λ¦¬λ˜μ–΄ 있고 μƒμœ„ μ»¨ν…Œμ΄λ„ˆ μ»΄ν¬λ„ŒνŠΈμ˜ μ‚¬μ΄μ¦ˆλ₯Ό κ²°μ •ν•  수 없을 경우, 미디어쿼리λ₯Ό μ‚¬μš©ν•˜κΈ° μ–΄λ ΅λ‹€. μ»΄ν¬λ„ŒνŠΈλŠ” λ„ˆλΉ„μ— λŒ€ν•΄ μ•Œ 수 μ—†κΈ° λ•Œλ¬Έμ— μ‹€μ œ νŽ˜μ΄μ§€μ˜ μ‚¬μ΄μ¦ˆκ°€ 변경될 λ•Œ 크기가 μ‘°μ •λœλ‹€.

이 λ¬Έμ œλŠ” 크기λ₯Ό μ‘°μ •ν•  수 μžˆλŠ” flex, grid 와 같은 CSS 속성을 κ΅¬ν˜„ν•œ λ ˆμ΄μ•„μ›ƒ μ»΄ν¬λ„ŒνŠΈλ₯Ό λ„μž…ν•˜μ—¬ ν•΄κ²° ν•  수 μžˆλ‹€.

λ§ˆλ¬΄λ¦¬β€‹

뷰와 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ λΆ„λ¦¬ν•˜λŠ” 것(κ΄€μ‹¬μ‚¬μ˜ 뢄리)이 쒋은 방법이닀. μ΄λ ‡κ²Œ ν•˜λ©΄ ν”„λ‘œμ νŠΈκ°€ ν™•μž₯될 λ•Œ μ½”λ“œμ—μ„œ 문제λ₯Ό λ””λ²„κΉ…ν•˜κΈ° 더 쉽닀.

μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ˜ μ»΄ν¬λ„ŒνŠΈλ“€μ€ λ™μΌν•œ 색상과 크기λ₯Ό 가진 빈 병이라고 ν•  수 μžˆλ‹€. 각각의 병을 λ‹€λ₯Έ μƒ‰μœΌλ‘œ μ±„μš΄λ‹€κ³  μƒκ°ν•΄λ³΄μž. 이 과정은 μ»΄ν¬λ„ŒνŠΈμ˜ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜λŠ” κ²ƒμœΌλ‘œ λΉ„μœ ν•  수 μžˆλ‹€. 빈 병에 색을 μ±„μš°λŠ” 것은 μ‰¬μš΄ 일이고, 색을 λ°”κΎΈλŠ” μƒνƒœ 변경이 μžˆλ”λΌλ„ 빈 병에 넣을 색을 λ³€κ²½ν•˜λŠ” 것이기 λ•Œλ¬Έμ— μ‰¬μš΄ 과정이 될 것이닀.

ν•˜μ§€λ§Œ λ§Œμ•½ 병을 λΉ¨κ°„ μƒ‰μœΌλ‘œ 반쯀 μ±„μš°κ³  λ‹€λ₯Έ μƒ‰μœΌλ‘œ λ‚˜λ¨Έμ§€λ₯Ό μ±„μš΄λ‹€κ³  ν•œλ‹€λ©΄ λ¬Έμ œκ°€ μžˆμ„ 것이닀. κ·Έ 색이 잘 μ„žμ΄μ§€ μ•ŠλŠ”λ‹€λ©΄? λ˜λŠ” μ›λž˜μ˜ 색을 μ œκ±°ν•˜κ³  λ‹€λ₯Έμƒ‰μœΌλ‘œ λŒ€μ²΄ν•΄μ•Όν•œλ‹€λ©΄? 이것은 λΉ„μ¦ˆλ‹ˆμŠ€ λ‘œμ§μ„ κ΅¬ν˜„ν•  λ•Œλ„ λ°œμƒν•  수 μžˆλŠ” 문제둜 μ½”λ“œ λ¦¬νŒ©ν„°λ§κ³Ό μ»΄ν¬λ„ŒνŠΈ μž¬μ‚¬μš©μ„ μ–΄λ ΅κ²Œ λ§Œλ“ λ‹€.

πŸ“Œ μ°Έκ³  링크​