πŸ› οΈ 디버깅을 μž˜ν•˜λŠ”λ²•?

🀝 νŽ˜μ–΄ 디버깅 κ²½ν—˜

μ œκ°€ 일을 ν•˜λ©° μžˆμ—ˆλ˜ ν•˜λ‚˜μ˜ μ—ν”Όμ†Œλ“œμ— λŒ€ν•΄ μ–˜κΈ°ν•΄λ³΄λ €κ³  ν•©λ‹ˆλ‹€.
μ €λŠ” 제 업무λ₯Ό 보고 있던 쀑 ν•œκ°€μ§€ κΈ΄λ°•ν•œ μŠ¬λž™μ΄ 였게 λ©λ‹ˆλ‹€.

μŠ¬λž™.png

⚠️ 문제 상황 : 메이크샡 μžλ™λ°œμ†‘ λˆ„λ½

  • νŠΉμ • 주문건이 배솑쀀비쀑 μƒνƒœλ‘œ λ‚¨μŒ
  • λ‹€λ₯Έ 주문건은 μ •μƒμ μœΌλ‘œ λ°œμ†‘ 처리됨

μ •λ¦¬ν•˜μžλ©΄ APIλ₯Ό 톡해 데이터λ₯Ό λ„˜κ²ΌλŠ”λ° μΌλΆ€λ§Œ 반영된 μƒν™©μ΄μ˜€μ£ 

μ €λŠ” κ·Έ μ§ˆλ¬Έμ„ λ“£κ³  10초 채 λ˜μ§€ μ•Šμ•„ μ΄λ ‡κ²Œ 닡변을 λ“œλ ΈμŠ΅λ‹ˆλ‹€. λ‚˜μŠ€.png

그러자 ν™”μ§„λ‹˜μ€ λ‹Ήν™©ν•˜μ—¬ 얼꡴에 λ¬ΌμŒν‘œκ°€ κ°€λ“ν•˜κ²Œ λ©λ‹ˆλ‹€.
이 μ—ν”Όμ†Œλ“œλ₯Ό 톡해 디버깅 μ—­λŸ‰μ„ ν‚€μš°κΈ° νž˜λ“  이유λ₯Ό 말해주기도 ν•©λ‹ˆλ‹€.

❗ 디버깅 μ—­λŸ‰μ„ ν‚€μš°κΈ° νž˜λ“  이유

μ‹€νƒ€λž˜.png μ‹€νƒ€λž˜μ²˜λŸΌ μ—‰μΌœμžˆλ˜ 이 λ¬Έμ œμ— λŒ€ν•΄ λ¬Έμ œμ™€ ν•΄κ²° λ°©λ²•λ§Œ 보이지 κ·Έ μ•ˆμ— μ–΄λ–€ 인지적 과정이 μžˆμ—ˆλŠ”μ§€ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€ λ‚˜μŠ€λ₯Ό 보고 νŒλ§€μ²˜μ— 메일을 λ³΄λ‚΄λΌλŠ” νŒλ‹¨κ³Ό μ˜μ‚¬κ²°μ •μ„ μ–΄λ–»κ²Œ ν•  수 μžˆμ—ˆλŠ”μ§€ 숨겨져 μžˆμ—ˆλ˜ 것 μ²˜λŸΌμš”

돌이켜보면 κ·Έ μ§ˆλ¬Έμ„ λ“€μ—ˆμ„ λ•Œ 제 머리 μ†μ—λŠ” μ΄λŸ¬ν•œ 과정이 λ²Œμ–΄μ‘Œμ—ˆμŠ΅λ‹ˆλ‹€

  1. λ°œμ†‘μ΄ λˆ„λ½λ˜μ—ˆμœΌλ©΄ μ œλŒ€λ‘œ 된 λ°œμ†‘ μš”μ²­μ„ ν–ˆλŠ”μ§€ μ•Œμ•„μ•Ό ν•˜κ³ 
  2. ν¬νŒ… 판맀처의 λͺ¨λ“  λ°œμ†‘ λ‘œκ·ΈλŠ” λ‚˜μŠ€μ— 있기 λ•Œλ¬Έμ— 이걸 ν†΅ν•΄μ„œ 확인 ν•  수 μžˆλ‹€.
  3. λ°œμ†‘ 둜그λ₯Ό 확인 ν›„ μ œλŒ€λ‘œ 된 μš”μ²­μ„ λ³΄λƒˆλ‹€λ©΄ 그건 APIλ₯Ό λ°›λŠ” 판맀처의 문제일 것이닀.
  4. κ·Έλ ‡λ‹€λ©΄ 판맀처둜 λ¬Έμ˜ν•΄μ•Ό ν•œλ‹€.

제 λ¨Έλ¦Ώμ†μ—μ„œ μΌμ–΄λ‚¬μ—ˆλ˜ 인지적 과정을 λ‹€μ‹œ 정리해보면 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€

🧩 행동 뒀에 μˆ¨μ€ 인지적 κ³Όμ • νŒŒμ•…ν•˜κΈ°

  1. λ‹¨μ„œ: μ „μ²΄μ˜ 주문이 μ•ˆλ„˜μ–΄κ°„ 것이 μ•„λ‹ˆκ³  νŠΉμ • 주문만 λ„˜μ–΄κ°€μ§€ μ•Šμ•˜λ‹€?
  2. κ³Όκ±° κ²½ν—˜κ³Ό μœ μ‚¬μ„±: λ°œμ†‘μ΄ μ œλŒ€λ‘œ λ˜μ§€ μ•ŠλŠ” 경우 λ°œμ†‘ 데이터λ₯Ό λ§Œλ“œλŠ” κ³Όμ • μ•„λ‹ˆλ©΄ νŒλ§€μ²˜μ—μ„œ μ œλŒ€λ‘œ λͺ» λ°›μ•˜λ˜κ²Œ μ›μΈμ΄λ˜λ°
  3. 사전지식: ν¬νŒ… 판맀처의 λͺ¨λ“  톡신 λ‘œκ·ΈλŠ” λ‚˜μŠ€λ₯Ό 톡해 κΈ°λ‘ν•˜κ³  μžˆμ–΄
  4. λŒ€μ•ˆ: 데이터가 μ œλŒ€λ‘œ λ§Œλ“€μ–΄μ§€μ§€ μ•Šμ€ μƒνƒœμ—μ„œ λ„˜μ–΄κ°„κ±°λΌλ©΄ 데이터λ₯Ό λ§Œλ“œλŠ” λΆ€λΆ„μ˜ λ‘œμ§μ„ μ‚΄νŽ΄λ΄μ•Όκ² μ–΄

CDM.png μ œκ°€ 방금 μ „ μ…€ν”„λ‘œ λΆ„μ„ν–ˆλ˜ 방법은 μΈμ§€μ‹¬λ¦¬ν•™κ³„μ˜ κ±°μž₯인 Gary Klein이 λ§Œλ“€μ–΄ λ…Όλ¬ΈμœΌλ‘œ λ°œν‘œν•œ
Critical Decision Method μ€„μ–΄μ„œ CDM이라고 λΆ€λ₯΄λŠ” κΈ°λ²•μž…λ‹ˆλ‹€.
이 CDM은 인지 μž‘μ—… λΆ„μ„μ΄λΌλŠ” 기법 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€ λ‹€μ–‘ν•œ μ§ˆλ¬Έμ„ 톡해 λ³΅μž‘ν•œ μƒν™©μ—μ„œ 전문가듀이 μ˜μ‚¬κ²°μ •μ„ μ–΄λ–»κ²Œ λ‚΄λ¦¬λŠ”μ§€ λΆ„μ„ν•˜κ³  이해해기 μœ„ν•΄ 개발된 κΈ°λ²•μž…λ‹ˆλ‹€.

λ¬Όλ‘  이 기법을 μ΄ν•΄ν•˜κ³  μ΄λŸ¬ν•œ νŒλ‹¨μ„ λ‚΄λ¦° 것은 μ•„λ‹ˆμ§€λ§Œ μžκΈ°λ„ λͺ¨λ₯΄κ²Œ 이런 과정듀을 μˆ˜ν–‰ν•˜κ³  μžˆμ—ˆλ‹€λŠ”κ²ƒμ΄μ£ 

πŸ› οΈ λ””λ²„κΉ…μ˜ 3단계

  1. 원인 νŒŒμ•…
  2. 문제 ν•΄κ²°
  3. 사후 처리

λ””λ²„κΉ…λΌλŠ” ν–‰μœ„λ₯Ό 크게 μ‚Όλ‹¨κ³„λ‘œ 보면 μ΄λ ‡μŠ΅λ‹ˆλ‹€.

λ””λ²„κΉ…μ˜3단계.png μ‹€μ œλ‘œ 디버깅을 ν•˜λ‹€λ³΄λ©΄ 이 세단계에 μŸλŠ” μ‹œκ°„κ³Ό λ…Έλ ₯은 λ‹¬λΌμ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.
μ–΄λŠλ‚ μ€ 원인은 금방 μ°Ύμ§€λ§Œ 문제λ₯Ό ν•΄κ²°ν•˜λŠ”λ° ν•˜λ£¨ 쒅일 κ±Έλ¦¬λŠ” 날도 있고 또 μ–΄λ–€ ν•˜λ£¨λŠ” μ›μΈλ§Œ νŒŒμ•…ν•˜λŠ”λ° ν•˜λ£¨κ°€ 간날도 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ μ €λŠ” 이 세가지 단계 쀑 원인 νŒŒμ•…μ˜ 과정이 디버깅 μ‹€λ ₯을 λŠ˜λ¦¬λŠ”λ° 큰 역할을 ν•œλ‹€κ³ 
μƒκ°ν•˜μ—¬ 이 과정에 λŒ€ν•΄ μƒμ„Ένžˆ 말해보렀 ν•©λ‹ˆλ‹€.

πŸ“ 문제 원인 νŒŒμ•…μ„ μœ„ν•œ 5단계 κ°€μ΄λ“œ

  1. 문제 μ •μ˜
  2. 정상 λ™μž‘ μ •μ˜
  3. μ΅œμ†Œ μž¬ν˜„ ν™˜κ²½ ꡬ좕 및 κ΄€μ°°
  4. 차이λ₯Ό λ°œμƒμ‹œν‚€λŠ” λ‹€μ–‘ν•œ 원인 탐색
  5. κ°€μ„€ μ„€μ • 및 검증

문제의 원인을 νŒŒμ•…ν•˜λŠ” 방법을 5λ‹¨κ³„λ‘œ λ‚˜λˆ  λ³΄μ•˜μŠ΅λ‹ˆλ‹€.
μ΄λŸ¬ν•œ 과정을 κ±°μΉ˜λ‹€ 보면 μš°λ¦¬λŠ” μžμ—°μŠ€λŸ½κ²Œ 심적 ν‘œμƒ(Mind Reperesentation)μ΄λΌλŠ” 것이
μŒ“μ΄κ²Œ λ©λ‹ˆλ‹€.

μ‹¬μ ν‘œμƒμ˜ μ •μ˜μ— λŒ€ν•΄ μ•Œμ•„λ³΄λ©΄

🧠 심적 ν‘œμƒ(Mind Representation)

  • 심적 ν‘œμƒμ€ μž₯기기얡에 μ €μž₯λ˜μ–΄ 있으며, 일반적인 상황이 μ•„λ‹ˆλΌ νŠΉμ • μœ ν˜•μ˜ μƒν™©μ—μ„œ μ‹ μ†ν•˜κ³  효율적으둜 λ°˜μ‘ν•˜κΈ° μœ„ν•΄ ν™œμš©ν•˜λŠ”, 우리 머릿속에 이미 μ‘΄μž¬ν•˜λŠ”(사싀, 이미지, κ·œμΉ™, 관계 λ“±μ˜) 정보 νŒ¨ν„΄μ΄λ‹€.
  • 전문가와 일반인의 μ°¨μ΄λŠ” 심적 ν‘œμƒμ˜ μ–‘κ³Ό μ§ˆμ΄λ‹€. μ „λ¬Έκ°€λŠ” μ—°μŠ΅μ„ ν†΅ν•΄μ„œ μ•„μ£Ό λ³΅μž‘ν•˜κ³  λ‹€μ–‘ν•œ 심적 ν‘œμƒμ„ μΆ•μ ν•œλ‹€. νŠΉμ • μƒν™©μ—μ„œ 남듀보닀 λΉ λ₯΄κ³  μ •ν™•ν•œ 결정을 내리고, μ‹ μ†ν•˜κ²Œ λŒ€μ‘ν•  수 μžˆλ‹€.

πŸ“ 문제 원인 νŒŒμ•…μ„ μœ„ν•œ 5단계 κ°€μ΄λ“œ

  1. 문제 μ •μ˜
  2. 정상 λ™μž‘ μ •μ˜
  3. μ΅œμ†Œ μž¬ν˜„ ν™˜κ²½ ꡬ좕 및 κ΄€μ°°
  4. 차이λ₯Ό λ°œμƒμ‹œν‚€λŠ” λ‹€μ–‘ν•œ 원인 탐색
  5. κ°€μ„€ μ„€μ • 및 검증

μ œκ°€ 이 5κ°€μ§€μ˜ κ°€μ΄λ“œλ₯Ό 5단계라고 ν‘œν˜„ν•˜κΈ΄ ν–ˆμ§€λ§Œ μš°λ¦¬λŠ” μ‹€μ œ 디버깅을 ν•˜λ©° 이 과정을 순차적으둜 μ‹€ν–‰ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ 정상 λ™μž‘μ„ μ •μ˜ν•˜κ³  μ΅œμ†Œ μž¬ν˜„ ν™˜κ²½μ„ κ΅¬μΆ•ν•˜λ©° κ΄€μ°°ν•˜λ‹€ λ³΄λ‹ˆ 정상 λ™μž‘μ˜ μ •μ˜κ°€ 달라져 λ‹€μ‹œ μ •μ˜ν•˜κ³  λ‚˜μ•„κ°€λŠ” 식이죠 κ·Έλ ‡κ²Œ λ•Œλ¬Έμ—
이 단계λ₯Ό κΌ­ 순차적으둜 μ‹€ν–‰ν•΄μ•Ό ν•  μ˜λ¬΄λŠ” μ—†λ‹€λŠ”κ±Έ μ§šμ–΄λ“œλ¦¬λ©° 각 단계에 λŒ€ν•΄ μ„€λͺ…해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.

πŸ“ 문제 원인 νŒŒμ•…μ„ μœ„ν•œ 5단계 κ°€μ΄λ“œ

  1. 문제 μ •μ˜ πŸ”

    • μ΄μ •ν‘œ λ§Œλ“€κΈ°: λ‚΄κ°€ μ§€κΈˆ μ–΄λ–€ 문제λ₯Ό ν’€λ €κ³  ν•˜λŠ”μ§€ λͺ…ν™•νžˆ ν•œλ‹€.
    • μ€‘κ°„νšŒκ³ ν•  λ•Œλ§ˆλ‹€ 길을 μžƒμ§€ μ•Šλ„λ‘ ν•˜λŠ” μ΄μ •ν‘œλ₯Ό μ„€μ •ν•œλ‹€.
    • λ‹€λ₯Έ μ‚¬λžŒλ“€μ—κ²Œ 문제λ₯Ό μ„€λͺ…ν•˜κ³  κ³΅μœ ν•  λ•Œ μœ μš©ν•˜λ‹€.
    • 이게 μ—†μœΌλ©΄ λ‹Ήμž₯ μ€‘μš”ν•˜μ§€ μ•Šμ€ λ¬Έμ œμ— λΉ μ Έμ„œ μ‹œκ°„μ„ ν—ˆλΉ„ν•  수 있음
  2. 정상 λ™μž‘ μ •μ˜ βœ…

    • ν˜„μž¬ λ²Œμ–΄μ§€λŠ” 일을 κ΄€μ°°ν•˜κ³  μ•Œκ³  μžˆλŠ” 정보λ₯Ό μ •λ¦¬ν•œλ‹€.
    • ‘μ˜¬λ°”λ₯Έ λ™μž‘’을 ν…ŒμŠ€νŠΈμ½”λ“œμ²˜λŸΌ Given-When-Then νŒ¨ν„΄μœΌλ‘œ μž‘μ„±ν•œλ‹€.
    • 정상적인 μƒν™©μ—μ„œ μ–΄λ–€ 쑰건, μˆœμ„œλ‘œ 일이 λ²Œμ–΄μ Έμ•Ό ν•˜λŠ”μ§€ μ •μ˜ν•œλ‹€.
  3. μ΅œμ†Œ μž¬ν˜„ ν™˜κ²½ ꡬ좕 및 κ΄€μ°° πŸ› οΈ

    • λ¬Έμ œκ°€ λ°œμƒν•œ ν™˜κ²½κ³Ό λ™μž‘μ„ κ·ΈλŒ€λ‘œ λ”°λΌν•˜λ©° μž¬ν˜„ν•œλ‹€.
    • κ²©λ¦¬ν•˜λ©° νŒ¨ν„΄μ„ κ΄€μ°°ν•˜κ³  문제λ₯Ό νŠΉμ •ν•œλ‹€.
    • 직접 μž¬ν˜„μ΄ μ–΄λ ΅λ‹€λ©΄ 둜그 심기, 였λ₯˜ 리포트 μ°Έκ³  등을 톡해 쑰건을 νŒŒμ•…ν•œλ‹€.
  4. 차이λ₯Ό λ°œμƒμ‹œν‚€λŠ” λ‹€μ–‘ν•œ 원인 탐색 πŸ”Ž

    • λ– μ˜€λ₯΄λŠ” 원인을 좔상적이든 ꡬ체적이든 μ΅œλŒ€ν•œ 많이 λ‚˜μ—΄ν•œλ‹€.
    • λ‹€μ–‘ν•œ μ˜΅μ…˜μ„ κ²€ν† ν•˜κ³ , λ‹€λ₯Έ μ‚¬λžŒλ“€κ³Ό λ…Όμ˜ν•˜κ±°λ‚˜ μΆ”κ°€ 정보λ₯Ό μˆ˜μ§‘ν•œλ‹€.
  5. κ°€μ„€ μ„€μ • 및 검증 πŸ§ͺ

    • μž‘μ€ 변경을 κ°€ν•˜λ©΄μ„œ κ°€μ„€λŒ€λ‘œ ν˜„μƒμ΄ λ³€ν™”ν•˜λŠ”μ§€ ν™•μΈν•œλ‹€.
    • 가섀이 ν‹€λ Έλ‹€λ©΄ 원인을 κΈ°λ‘ν•˜κ³  λ‹€μŒ 가섀을 μ„Έμš΄λ‹€.
    • 검증 κ°€λŠ₯ν•œ ν˜•νƒœλ‘œ 가섀을 μ •λ¦¬ν•œλ‹€.
    • 예: Aκ°€ B둜 λ˜μ–΄μžˆμ–΄ C ν˜„μƒμ΄ λ°œμƒν•œλ‹€λ©΄, Aλ₯Ό D둜 바꿨을 λ•Œ Cκ°€ ν•΄κ²°λœλ‹€.

이 λ‹€μ„― 단계λ₯Ό μ΄ν•΄ν•˜κ³  계속 λ°˜λ³΅ν•˜λ‹€ 보면 μš°λ¦¬μ—κ²ŒλŠ” μˆ˜λ§Žμ€ μ‹¬μ ν‘œμƒμ΄ μŒ“μΌ 것이고 컀질 것이라고 μƒκ°λ“­λ‹ˆλ‹€.

βœ¨λ””λ²„κΉ…μ„ μž˜ν•˜λŠ” μ‚¬λžŒμ€ λ””λ²„κΉ…λ§ˆλ‹€ 심적 ν‘œμƒμ΄ μŒ“μΈλ©° λ˜‘λ˜‘ν•΄μ§„λ‹€.

디버깅정리.png 이 μ‹¬μ ν‘œμƒμ΄ μŒ“μ΄κ²Œ 되면 디버깅을 ν• λ•Œμ—λ„ μ—¬λŸ¬ 가지λ₯Ό μ‚΄νŽ΄λ³΄λŠ” 것이 μ•„λ‹Œ μ •λ¦¬λ˜μ–΄μžˆλŠ”
μ‹¬μ ν‘œμƒμ„ ν•˜λ‚˜μ”© κΊΌλ‚΄ μ“Έ 수 있게 λ˜λŠ” 것이죠

πŸ“š 맺으며

디버깅을 μž˜ν•˜λŠ” 방법은 λ‹¨μ‹œκ°„μ— μ‰½κ²Œ 얻을 수 μžˆλŠ” 지름길 같은 것은 μ•„λ‹™λ‹ˆλ‹€.
λ§Žμ€ κ²½ν—˜μ„ μŒ“κ³ , λ‹€μ–‘ν•œ 였λ₯˜λ₯Ό 직접 λ§ˆμ£Όν•˜λ©΄μ„œ μ‘°κΈˆμ”© μ΅ν˜€μ•Ό ν•©λ‹ˆλ‹€.νŒμ„ 쑰금 λ“œλ¦¬μžλ©΄,
μžμ‹ λ³΄λ‹€ 더 λ§Žμ€ κ²½ν—˜κ³Ό 지식을 μŒ“μ€ λΆ„λ“€μ—κ²Œ 적극적으둜 μ§ˆλ¬Έν•˜λŠ” 것도 쒋은 λ°©λ²•μž…λ‹ˆλ‹€.
그뢄듀이 였랜 λ…Έλ ₯ 끝에 얻은 κ·€μ€‘ν•œ κ²½ν—˜κ³Ό 지식을 짧은 μ‹œκ°„ μ•ˆμ— 배울 수 μžˆμ„ν…Œλ‹ˆκΉŒμš”.

  • 디버깅을 μž˜ν•˜λŠ” μ‚¬λžŒμ΄ λΆ€λ¦¬λŠ” λ§ˆλ²•μ€, 사싀 λˆ„κ΅¬λ‚˜ 배울 수 μžˆλŠ” κΈ°μˆ μž…λ‹ˆλ‹€.
  • 문제λ₯Ό ν•΄κ²°ν•΄κ°€λŠ” 과정을 즐기고 λ‚΄κ±Έλ‘œ λ§Œλ“€μ–΄ μ—°μŠ΅ν•˜λ©° 쒋은 심적 ν‘œμƒμ„ μŒ“μœΌλ©΄
  • λˆ„κ΅¬λ‚˜ 디버깅 μ—­λŸ‰μ„ 효과적으둜 늘릴 수 μžˆμŠ΅λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

πŸ“š 좜처: