데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계 #1μž₯

2024. 2. 8. 08:23γ†πŸ“š Book/데이터 쀑심 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 섀계

1μž₯

μ‹ λ’°μ„±, ν™•μž₯μ„±, μœ μ§€λ³΄μˆ˜μ„± 이 3가지 관심사λ₯Ό μ—”μ§€λ‹ˆμ–΄λ§ μΈ‘λ©΄μ—μ„œ μƒκ°ν•΄λ³΄μž.

  • μ‹ λ’°μ„± : ν•˜λ“œμ›¨μ–΄ / μ†Œν”„νŠΈμ›¨μ–΄ / 인적 였λ₯˜ 같은 역경에 μ§λ©΄ν•˜λ”λΌλ„ μ‹œμŠ€ν…œμ€ μ§€μ†μ μœΌλ‘œ μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•΄μ•Ό ν•œλ‹€.
  • ν™•μž₯μ„± : μ‹œμŠ€ν…œμ˜ 데이터 μ–‘, νŠΈλž˜ν”½ μ–‘, λ³΅μž‘λ„κ°€ μ¦κ°€ν•˜λ©΄μ„œ 이λ₯Ό μ²˜λ¦¬ν•  수 μžˆλŠ” μ μ ˆν•œ 방법이 μžˆμ–΄μ•Ό ν•œλ‹€.
  • μœ μ§€ λ³΄μˆ˜μ„± : μ‹œκ°„μ΄ μ§€λ‚˜λ©΄μ„œ μ—¬λŸ¬ λ‹€μ–‘ν•œ μ‚¬λžŒλ“€μ΄ μ‹œμŠ€ν…œ μƒμ—μ„œ μž‘μ—…ν•  것이기 λ•Œλ¬Έμ— λͺ¨λ“  μ‚¬μš©μžκ°€ μ‹œμŠ€ν…œ μƒμ—μ„œ μƒμ‚°μ μœΌλ‘œ μž‘μ—…ν•  수 있게 ν•΄μ•Ό ν•œλ‹€.

 

μ‹ λ’°μ„±

“무언가 잘λͺ»λ˜λ”라도 μ§€μ†μ μœΌλ‘œ μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•¨”을 μ‹ λ’°μ„±μ˜ 의미둜 이해할 수 μžˆλ‹€.

잘λͺ»λ  수 μžˆλŠ” 일을 κ²°ν•¨(fault)라 λΆ€λ₯΄λ©°, 이λ₯Ό μ˜ˆμΈ‘ν•˜κ³  λŒ€μ²˜ν•  수 μžˆλŠ” μ‹œμŠ€ν…œμ„ λ‚΄κ²°ν•¨μ„±(fault-tolerant)을 지녔닀고 ν•œλ‹€.

고의적으둜 결함을 μœ λ„ν•˜μ—¬ λ‚΄κ²°ν•¨μ„± μ‹œμŠ€ν…œμ„ μ§€μ†μ μœΌλ‘œ ν›ˆλ ¨ν•˜κ³  ν…ŒμŠ€νŠΈν•΄μ„œ 결함이 μžμ—°μ μœΌλ‘œ λ°œμƒν•  λ•Œ μ˜¬λ°”λ₯΄κ²Œ μ²˜λ¦¬ν•  수 μžˆλŠ” μžμ‹ κ°μ„ 높인닀. λ„·ν”Œλ¦­μŠ€μ˜ μΉ΄μ˜€μŠ€ λͺ½ν‚€κ°€ 이런 μ ‘κ·Ό λ°©μ‹μ˜ ν•œ μ˜ˆλ‹€.

인적였λ₯˜

인간을 μ™„μ „νžˆ μ‹ λ’°ν•  수 μ—†μŒμ—λ„ μ‹œμŠ€ν…œμ„ μ–΄λ–»κ²Œ μ‹ λ’°μ„± 있게 λ§Œλ“€κΉŒ? 졜고의 μ‹œμŠ€ν…œμ€ λ‹€μ–‘ν•œ μ ‘κ·Ό 방식을 κ²°ν•©ν•œλ‹€.

  • 였λ₯˜μ˜ κ°€λŠ₯성을 μ΅œμ†Œν™” ν•˜λŠ” λ°©ν–₯으둜 μ‹œμŠ€ν…œμ„ μ„€κ³„ν•˜λΌ. ex) 잘 μ„€κ³„λœ 좔상화, API, 관리 μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©
  • μ‚¬λžŒμ΄ 많이 μ‹€μˆ˜ν•˜λŠ” μž₯μ†Œμ—μ„œ μ‚¬λžŒμ˜ μ‹€μˆ˜λ‘œ μž₯μ• κ°€ λ°œμƒν•  수 μžˆλŠ” 뢀뢄을 λΆ„λ¦¬ν•˜λΌ.
  • λ‹¨μœ„ ν…ŒμŠ€νŠΈλΆ€ν„° 전체 μ‹œμŠ€ν…œ 톡합 ν…ŒμŠ€νŠΈμ™€ μˆ˜λ™ ν…ŒμŠ€νŠΈκΉŒμ§€ λͺ¨λ“  μˆ˜μ€€μ—μ„œ μ² μ €ν•˜κ²Œ ν…ŒμŠ€νŠΈν•˜λΌ.
  • μ„±λŠ₯ μ§€ν‘œμ™€ μš”λ₯˜μœ¨ 같은 μƒμ„Έν•˜κ³  λͺ…ν™•ν•œ λͺ¨λ‹ˆν„°λ§ λŒ€μ±…μ„ λ§ˆλ ¨ν•˜λΌ.

 

ν™•μž₯μ„±

μ¦κ°€ν•œ λΆ€ν•˜μ— λŒ€μ²˜ν•˜λŠ” μ‹œμŠ€ν…œ λŠ₯λ ₯을 μ„€λͺ…ν•˜λŠ” μš©μ–΄μ§€λ§Œ μ‹œμŠ€ν…œμ— λΆ€μ—¬ν•˜λŠ” 일차원적인 ν‘œμ‹μ΄ μ•„λ‹ˆλ‹€.(?)

ν™•μž₯성을 λ…Όν•œλ‹€λŠ” 것은, “μ‹œμŠ€ν…œμ΄ νŠΉμ • λ°©μ‹μœΌλ‘œ 컀지면 이에 λŒ€μ²˜ν•˜κΈ° μœ„ν•œ 선택은 무엇인가?” 와 “μΆ”κ°€ λΆ€ν•˜λ₯Ό 닀루기 μœ„ν•΄ 계산 μžμ›μ„ μ–΄λ–»κ²Œ νˆ¬μž…ν• κΉŒ?” 같은 μ§ˆλ¬Έμ„ κ³ λ €ν•œλ‹€λŠ” μ˜λ―Έλ‹€.

 

λΆ€ν•˜ κΈ°μˆ ν•˜κΈ°

μ‹œμŠ€ν…œμ˜ ν˜„μž¬ λΆ€ν•˜λŠ” λΆ€ν•˜ λ§€κ°œλ³€μˆ˜ μ²˜λŸΌ κ°„κ²°ν•˜κ²Œ κΈ°μˆ ν•΄μ•Ό ν•œλ‹€.

  • λΆ€ν•˜ λ§€κ°œλ³€μˆ˜ μ˜ˆμ‹œ : μ›Ή μ„œλ²„μ˜ μ΄ˆλ‹Ή μš”μ²­ 수, DB의 μ½κΈ°λŒ€ μ“°κΈ° λΉ„μœ¨, λŒ€ν™”λ°©μ˜ λ™μ‹œ ν™œμ„± μ‚¬μš©μž, μΊμ‹œ 적쀑λ₯  λ“±
  • νŠΈμœ„ν„°μ˜ 경우, μ‚¬μš©μžλ‹Ή νŒ”λ‘œμ›Œμ˜ 뢄포가 νŒ¬μ•„μ›ƒ λΆ€ν•˜λ₯Ό κ²°μ •ν•˜κΈ° λ•Œλ¬Έμ— ν™•μž₯성을 λ…Όμ˜ν•  λ•Œ ν•΅μ‹¬ λΆ€ν•˜ λ§€κ°œλ³€μˆ˜κ°€ λœλ‹€.

 

μ„±λŠ₯ κΈ°μˆ ν•˜κΈ°

μ„œλ²„-ν΄λΌμ΄μ–ΈνŠΈ κ°„ μ‘λ‹΅μ‹œκ°„μœΌλ‘œ μ„±λŠ₯을 κΈ°μˆ ν•˜κ³  싢을 수 μžˆλ‹€.

μ΄λ•Œ μ „ν˜•μ μΈ 응닡 μ‹œκ°„μ„ μ•Œκ³  μ‹Άλ‹€λ©΄ 평균은 그닀지 쒋은 μ§€ν‘œκ°€ μ•„λ‹ˆλ‹€. μ–Όλ§ˆλ‚˜ λ§Žμ€ μ‚¬μš©μžκ°€ μ‹€μ œλ‘œ 지연을 κ²½ν—˜ν•œμ§€ μ•Œλ €μ£Όμ§€ μ•ŠκΈ° λ•Œλ¬Έμ΄λ‹€. ν‰κ· λ³΄λ‹€λŠ” λ°±λΆ„μœ„λ₯Ό μ‚¬μš©ν•˜λŠ” 편이 더 μ’‹λ‹€. 응닡 μ‹œκ°„ λͺ©λ‘μ„ μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•˜λ©΄ 쀑간 지점이 μ€‘μ•™κ°’(median) μ΄ λœλ‹€.

μœ„ κ·Έλž˜ν”„λ₯Ό μ˜ˆμ‹œλ‘œ 보자. 응닡값이 μ–Όλ§ˆλ‚˜ 쒋지 μ•Šμ€μ§€ 보렀면 μƒμœ„ λ°±λΆ„μœ„λ₯Ό μ‚΄νŽ΄λ³΄λŠ” 것도 μ’‹λ‹€. (μ΄λ•Œ μ‚¬μš©ν•˜λŠ” λ°±λΆ„μœ„λŠ” 95λΆ„μœ„, 99λΆ„μœ„, 99.9λΆ„μœ„κ°€ 일반적) μœ„ κ·Έλž˜ν”„λ₯Ό ν† λŒ€λ‘œ 95λΆ„μœ„ 응닡 μ‹œκ°„μ΄ 1.5초라면 100개의 μš”μ²­ 쀑 95κ°œλŠ” 1.5초 미만이고, 100개의 μš”μ²­ 쀑 5κ°œλŠ” 1.5μ΄ˆλ³΄λ‹€ 더 κ±Έλ¦°λ‹€.

μƒμœ„ λ°±λΆ„μœ„ 응닡 μ‹œκ°„(꼬리 μ§€μ—°μ‹œκ°„)은 μ„œλΉ„μŠ€μ˜ μ‚¬μš©μž κ²½ν—˜μ— 직접 영ν–₯을 μ£ΌκΈ° λ•Œλ¬Έμ— μ€‘μš”ν•˜λ‹€. μ•„λ§ˆμ‘΄μ—μ„œλŠ” λ‚΄λΆ€ μ„œλΉ„μŠ€ 응닡 μ‹œκ°„ μš”κ΅¬μ‚¬ν•­μ„ 99.9λΆ„μœ„λ‘œ κΈ°μˆ ν•˜λŠ”λ° μ΄λŠ” μš”μ²­ 1000개 쀑 1개만 영ν–₯이 μžˆμŒμ„ μ˜λ―Έν•œλ‹€. 보톡 μ‘λ‹΅μ‹œκ°„μ΄ κ°€μž₯ 느린 μš”μ²­μ„ κ²½ν—˜ν•œ 고객듀이 λ§Žμ€ ꡬ맀λ₯Ό ν•΄μ„œ 고객 쀑 계정에 κ°€μž₯ λ§Žμ€ 데이터λ₯Ό κ°–κΈ° λ•Œλ¬Έμ΄λ‹€. (즉 우수 κ³ κ°μ΄λΌλŠ” 의미). 이 고객듀을 λ§Œμ‘±μ‹œν‚€λŠ”κ²Œ μ€‘μš”ν•˜λ‹€.

 

λΆ€ν•˜ λŒ€μ‘ μ ‘κ·Ό 방식

Q. λΆ€ν•˜ λ§€κ°œλ³€μˆ˜κ°€ μ¦κ°€ν•˜λ”λΌλ„ 쒋은 μ„±λŠ₯을 μœ μ§€ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

A. μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ν•©ν•œ ν™•μž₯성을 κ°–μΆ˜ μ•„ν‚€ν…μ²˜λŠ” μ£Όμš” λ™μž‘μ΄ 무엇이고 μž˜ν•˜μ§€ μ•ŠλŠ” λ™μž‘μ΄ 무엇인지에 λŒ€ν•œ 가정을 λ°”νƒ•μœΌλ‘œ κ΅¬μΆ•ν•œλ‹€. 이 가정이 곧 λΆ€ν•˜ λ§€κ°œλ³€μˆ˜κ°€ λœλ‹€. 이 가정이 잘λͺ»λ˜λ©΄ ν™•μž₯에 λŒ€ν•œ μ—”μ§€λ‹ˆμ–΄λ§ λ…Έλ ₯은 ν—›μˆ˜κ³ κ°€ 되고 μ΅œμ•…μ˜ 경우 μ—­νš¨κ³Όλ₯Ό λ‚³λŠ”λ‹€.

“일뢀 μ‹œμŠ€ν…œμ€ 탄λ ₯적” μ΄λž€ λ¬Έμž₯은, μ‹œμŠ€ν…œμ΄ λΆ€ν•˜ 증가λ₯Ό κ°μ§€ν•˜λ©΄ μ»΄ν“¨νŒ… μžμ›μ„ μžλ™μœΌλ‘œ μΆ”κ°€ν•  수 μžˆλŠ” 것을 μ˜λ―Έν•œλ‹€. 탄λ ₯적인 μ‹œμŠ€ν…œμ€ λΆ€ν•˜λ₯Ό μ˜ˆμΈ‘ν•  수 없을 만큼 κ³ λΆ€ν•˜ μƒν™©μ—μ„œ μœ μš©ν•˜λ‹€.

반면 “탄λ ₯적이지 λͺ»ν•œ μ‹œμŠ€ν…œ”은 μˆ˜λ™μœΌλ‘œ μ»΄ν“¨νŒ… μžμ›μ„ ν™•μž₯ν•΄μ•Ό ν•˜λŠ”λ°, μ˜ˆμƒμΉ˜ λͺ»ν•œ λΆ€ν•˜κ°€ λ°œμƒν•˜λŠ” 상황을 μ œμ™Έν•˜λ©΄ 더 κ°„λ‹¨ν•˜κ³  μš΄μ˜μƒ μ˜ˆμƒμΉ˜ λͺ»ν•œ 일이 더 적닀.

 

μœ μ§€λ³΄μˆ˜μ„±

 

μœ μ§€λ³΄μˆ˜ 고톡을 μ΅œμ†Œν™”ν•˜κ³  λ ˆκ±°μ‹œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 직접 λ§Œλ“€μ§€ μ•Šκ²Œλ” μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 섀계할 수 μžˆλŠ” μ‹œμŠ€ν…œ 섀계 원칙 3가지.

  1. μš΄μš©μ„±
    1. μš΄μ˜νŒ€μ΄ μ‹œμŠ€ν…œμ„ μ›ν™œν•˜κ²Œ μš΄μ˜ν•  수 있게 μ‰½κ²Œ λ§Œλ“€μ–΄λΌ
  2. λ‹¨μˆœμ„±
    1. μ‹œμŠ€ν…œ λ³΅μž‘λ„λ₯Ό μ΅œλŒ€ν•œ μ œκ±°ν•˜μ—¬ μ—”μ§€λ‹ˆμ–΄κ°€ μ‹œμŠ€ν…œμ„ μ΄ν•΄ν•˜κΈ° μ‰½κ²Œ λ§Œλ“€μ–΄λΌ
  3. λ°œμ „μ„±
    1. μ—”μ§€λ‹ˆμ–΄κ°€ 이후에 μ‹œμŠ€ν…œμ„ μ‰½κ²Œ λ³€κ²½ν•  수 있게 해라.

 

μš΄μš©μ„±

 

μ‹œμŠ€ν…œμ΄ μ›ν™œν•˜κ²Œ μž‘λ™ν•˜λ €λ©΄ μš΄μ˜νŒ€μ΄ ν•„μˆ˜λ‹€. 쒋은 μš΄μ˜νŒ€μ€ λ‹€μŒκ³Ό 같은 μž‘μ—…λ“±μ„ μ±…μž„μ§„λ‹€.

 

쒋은 μš΄μš©μ„±μ΄λž€ λ™μΌν•˜κ²Œ λ°˜λ³΅λ˜λŠ” νƒœμŠ€ν¬λ₯Ό μ‰½κ²Œ μˆ˜ν–‰ν•˜κ²Œλ” λ§Œλ“€μ–΄ μš΄μ˜νŒ€μ΄ κ³ λΆ€κ°€κ°€μΉ˜ ν™œλ™μ— μ§‘μ€‘ν•œλ‹€λŠ” μ˜λ―Έν•œλ‹€.

 

λ‹¨μˆœμ„±: λ³΅μž‘λ„ 관리

 

λ³΅μž‘λ„λŠ” λ‹€μŒκ³Ό 같이 λ‹€μ–‘ν•œ μ¦μƒμœΌλ‘œ λ‚˜νƒ€λ‚œλ‹€.

  • μƒνƒœ κ³΅κ°„μ˜ 급증(?)
  • λͺ¨λ“ˆ κ°„ κ°•ν•œ μ»€ν”Œλ§
  • λ³΅μž‘ν•œ μ˜μ‘΄μ„±
  • 일관성 μ—†λŠ” λͺ…λͺ…κ³Ό μš©μ–΄
  • μž„μ‹œ 방편으둜 문제λ₯Ό ν•΄κ²°ν•œ νŠΉμˆ˜μ‚¬λ‘€

μ‹œμŠ€ν…œμ„ λ‹¨μˆœν•˜κ²Œ λ§Œλ“œλŠ” 일이 λ°˜λ“œμ‹œ κΈ°λŠ₯을 μ€„μΈλ‹€λŠ” μ˜λ―ΈλŠ” μ•„λ‹ˆκ³ , μš°λ°œμ  λ³΅μž‘λ„λ₯Ό μ€„μΈλ‹€λŠ” 뜻일 수 μžˆλ‹€. 우발적 λ³΅μž‘λ„λ₯Ό μ œκ±°ν•˜λŠ” μ΅œμƒμ˜ λ„κ΅¬λŠ” μΆ”상화닀. 쒋은 μΆ”μƒν™”λŠ” κΉ”λ”ν•˜κ³  직관적인 μ™Έκ΄€ μ•„λž˜λ‘œ λ§Žμ€ μ„ΈλΆ€ κ΅¬ν˜„μ„ 숨길 수 μžˆλ‹€. λ˜ν•œ λ‹€λ₯Έ λ‹€μ–‘ν•œ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—λ„ μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.

λ°œμ „μ„± : λ³€ν™”λ₯Ό μ‰½κ²Œ λ§Œλ“€κΈ°

μ†Œν”„νŠΈμ›¨μ–΄λŠ” λŠμž„μ—†μ΄ λ³€ν™”ν•˜λŠ” 것이 섭리닀. 쑰직 ν”„λ‘œμ„ΈμŠ€ μΈ‘λ©΄μ—μ„œ μ• μžμΌ μž‘μ—… νŒ¨ν„΄μ€ 변화에 μ μ‘ν•˜κΈ° μœ„ν•œ ν”„λ ˆμž„μ›Œν¬λ₯Ό μ œκ³΅ν•œλ‹€. 쒋은 μ˜ˆμ‹œλ‘œ TDD 와 Refactoring이 μžˆλ‹€.

 

정리

 

μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ μœ μš©ν•˜λ €λ©΄ κΈ°λŠ₯적 μš”κ΅¬μ‚¬ν•­κ³Ό λΉ„κΈ°λŠ₯적 μš”κ΅¬μ‚¬ν•­(λ³΄μ•ˆ, μ‹ λ’°μ„±, λ²•κ·œ μ€€μˆ˜, ν™•μž₯μ„±, μœ μ§€λ³΄μˆ˜μ„± λ“±)을 μΆ©μ‘±ν•΄μ•Ό ν•œλ‹€.

신뒰성은 결함이 λ°œμƒν•΄λ„ μ‹œμŠ€ν…œμ΄ μ˜¬λ°”λ₯΄κ²Œ λ™μž‘ν•˜κ²Œ λ§Œλ“ λ‹€λŠ” μ˜λ―Έλ‹€. 내결함성 κΈ°μˆ μ„ μ΅œμ’… μ‚¬μš©μžμ—κ²Œ νŠΉμ • μœ ν˜•μ˜ 결함을 숨길 수 있게 ν•΄μ€€λ‹€. (μ—λŸ¬ λ©”μ‹œμ§€ νŒμ—… 같은건가)

ν™•μž₯성은 λΆ€ν•˜κ°€ 증가해도 쒋은 μ„±λŠ₯을 μœ μ§€ν•˜κΈ° μœ„ν•œ μ „λž΅μ„ μ˜λ―Έν•œλ‹€.

μœ μ§€λ³΄μˆ˜μ„±μ˜ λ³Έμ§ˆμ€ μ‹œμŠ€ν…œμ—μ„œ μž‘μ—…ν•˜λŠ” μ—”μ§€λ‹ˆμ–΄μ™€ 운영 νŒ€μ˜ 삢을 κ°œμ„ ν•˜λŠ”λ° μžˆλ‹€.