diff --git a/docs/good-code/1-routines.mdx b/docs/good-code/1-routines.mdx index 94cd759..d95eb77 100644 --- a/docs/good-code/1-routines.mdx +++ b/docs/good-code/1-routines.mdx @@ -41,7 +41,7 @@ import DevilsAdvocate from '@site/src/components/DevilsAdvocate'; ## πŸ“ 묢음 μš”μ•½ -7~9μž₯은 "μ½”λ“œ ν•œ λ‹¨μœ„λ₯Ό μ–΄λ–»κ²Œ 잘 λ§Œλ“€ 것인가"λ₯Ό μ„Έ κ°λ„λ‘œ μ’ν˜€ λ“€μ–΄κ°€λŠ” λ¬ΆμŒμ΄μ—μš”. 7μž₯은 쒋은 루틴(ν•¨μˆ˜)의 기쀀을, 8μž₯은 κ·Έ 루틴이 외뢀와 λ§Œλ‚˜λŠ” κ²½κ³„μ—μ„œμ˜ λ°©μ–΄ μ „λž΅μ„, 9μž₯은 코딩에 λ“€μ–΄κ°€κΈ° μ „ μ˜μ‚¬μ½”λ“œλ‘œ 섀계λ₯Ό κ²€μ¦ν•˜λŠ” 절차λ₯Ό λ‹€λ€„μš”. +7~9μž₯은 "μ½”λ“œ ν•œ λ‹¨μœ„λ₯Ό μ–΄λ–»κ²Œ 잘 λ§Œλ“€ 것인가"λ₯Ό μ„Έ κ΄€μ μœΌλ‘œ μ’ν˜€ λ“€μ–΄κ°€λŠ” λ¬ΆμŒμ΄μ—μš”. 7μž₯은 쒋은 루틴(ν•¨μˆ˜)의 기쀀을, 8μž₯은 κ·Έ 루틴이 외뢀와 λ§Œλ‚˜λŠ” κ²½κ³„μ—μ„œμ˜ λ°©μ–΄ μ „λž΅μ„, 9μž₯은 코딩에 λ“€μ–΄κ°€κΈ° μ „ μ˜μ‚¬μ½”λ“œλ‘œ 섀계λ₯Ό κ²€μ¦ν•˜λŠ” 절차λ₯Ό λ‹€λ€„μš”. - 7μž₯ β€” 좔상화 μˆ˜μ€€μ„ λ§žμΆ”κ³  λΆ€μž‘μš© 경계λ₯Ό λΆ„λͺ…νžˆ ν•˜λΌλŠ” 원칙은 ν•¨μˆ˜ν˜• μ»΄ν¬λ„ŒνŠΈμ™€ μ»€μŠ€ν…€ ν›…μ—μ„œλ„ κ·ΈλŒ€λ‘œ ν†΅ν•΄μš”. - 8μž₯ β€” "μ–΄λ””κΉŒμ§€ λ°©μ–΄ν•  것인가"λŠ” TypeScript와 Zodκ°€ κΉ”λ¦° ν™˜κ²½μ—μ„œ 닡이 λ‹¬λΌμ Έμš”. λͺ¨λ“  곳이 μ•„λ‹ˆλΌ κ²½κ³„μ—μ„œλ§Œ κ²€μ¦ν•˜λŠ” λ°”λ¦¬μΌ€μ΄λ“œ μ „λž΅μ΄ ν•„μš”ν•΄μš”. @@ -120,8 +120,8 @@ export async function loadAndShapePayments( **Before의 문제** -- URL 쑰립(How) κ³Ό 데이터 패칭(What) 이 같은 쀄에 μžˆλ‹€. encodeURIComponent, 쿼리 λ¬Έμžμ—΄ 직접 결합은 "μ–΄λ–»κ²Œ μš”μ²­μ„ λ³΄λ‚΄λŠ”κ°€"이고, ν•¨μˆ˜μ˜ λͺ©μ μ€ "결제 내역을 κ°€μ Έμ˜¨λ‹€"이닀. -- λ°°μ—΄ 필터링(How) κ³Ό λ·° λ³€ν™˜(How) 이 패칭 직후에 ν•œ λ©μ–΄λ¦¬λ‘œ 이어진닀. "무엇을 ν•˜λŠ”κ°€"(ν•„ν„° β†’ 검색 β†’ 포맷)κ°€ κ΅¬ν˜„ λ””ν…ŒμΌμ— λ¬»νžŒλ‹€. +- URL 쑰립(How)κ³Ό 데이터 패칭(What)이 같은 쀄에 μžˆλ‹€. encodeURIComponent, 쿼리 λ¬Έμžμ—΄ 직접 결합은 "μ–΄λ–»κ²Œ μš”μ²­μ„ λ³΄λ‚΄λŠ”κ°€"이고, ν•¨μˆ˜μ˜ λͺ©μ μ€ "결제 내역을 κ°€μ Έμ˜¨λ‹€"이닀. +- λ°°μ—΄ 필터링(How)κ³Ό λ·° λ³€ν™˜(How)이 패칭 직후에 ν•œ λ©μ–΄λ¦¬λ‘œ 이어진닀. "무엇을 ν•˜λŠ”κ°€"(ν•„ν„° β†’ 검색 β†’ 포맷)κ°€ κ΅¬ν˜„ λ””ν…ŒμΌμ— λ¬»νžŒλ‹€. ##### After βœ… @@ -200,7 +200,7 @@ export async function loadPayments(params: PaymentQuery): Promise **κ°œμ„  포인트** -- loadPayments의 λ³Έλ¬Έ 4μ€„λ§Œ 읽으면 "패칭 β†’ μƒνƒœ ν•„ν„° β†’ 이름 검색 β†’ λ·° λ³€ν™˜"μ΄λΌλŠ” 흐름(What) 이 λ°”λ‘œ 보인닀. +- loadPayments의 λ³Έλ¬Έ 4μ€„λ§Œ 읽으면 "패칭 β†’ μƒνƒœ ν•„ν„° β†’ 이름 검색 β†’ λ·° λ³€ν™˜"μ΄λΌλŠ” 흐름(What)이 λ°”λ‘œ 보인닀. - 각 ν•˜μœ„ ν•¨μˆ˜κ°€ Howλ₯Ό μΊ‘μŠν™”ν•˜μ—¬, loadPaymentsλŠ” 좔상화 μˆ˜μ€€μ΄ κ· μΌν•˜λ‹€. - νŒŒλΌλ―Έν„° 4개 λ‚˜μ—΄ β†’ PaymentQuery 객체둜 λ¬Άμ–΄μ„œ μˆœμ„œ μ‹€μˆ˜λ₯Ό λ°©μ§€ν•˜κ³ , query/status/page에 κΈ°λ³Έκ°’ 정책이 λͺ…μ‹œλ¨. @@ -384,7 +384,7 @@ async function handleRefund(paymentId: string, amount: number) { ### πŸ“– 원문 핡심 -**방어적 ν”„λ‘œκ·Έλž˜λ°μ˜ μ „μ œ**: ν”„λ‘œκ·Έλž¨μ— 잘λͺ»λœ 데이터가 듀어와도 μ†μƒλ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€λŠ” μ•„μ΄λ””μ–΄λ‘œ, "garbage in, garbage out"은 μ˜€λŠ˜λ‚  κΈ°μ€€μœΌλ‘œ ν—ˆμˆ ν•˜κ³  λΆˆμ•ˆμ „ν•œ ν”„λ‘œκ·Έλž¨μ˜ μ§•ν‘œμ˜ˆμš”. +**방어적 ν”„λ‘œκ·Έλž˜λ°μ˜ μ „μ œ**: ν”„λ‘œκ·Έλž¨μ— 잘λͺ»λœ 데이터가 듀어와도 μ†μƒλ˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€λŠ” μ•„μ΄λ””μ–΄λ‘œ, "garbage in, garbage out"은 μ˜€λŠ˜λ‚  κΈ°μ€€μœΌλ‘œ ν—ˆμˆ ν•˜κ³  μ•ˆμ „ν•˜μ§€ μ•Šμ€ ν”„λ‘œκ·Έλž¨μ˜ μ§•ν‘œμ˜ˆμš”. **Assertion(단언문)**: 개발 쀑에 μ½”λ“œκ°€ 슀슀둜λ₯Ό κ²€μ¦ν•˜λŠ” μˆ˜λ‹¨μœΌλ‘œ, μ ˆλŒ€ λ°œμƒν•΄μ„œλŠ” μ•ˆ λ˜λŠ” 쑰건을 μ²΄ν¬ν•˜λ©° μ „μ œμ‘°κ±΄κ³Ό 사후쑰건을 λ¬Έμ„œν™”ν•˜λŠ” μ‹€ν–‰ κ°€λŠ₯ν•œ λͺ…μ„Έ 역할을 ν•΄μš”. Assertion은 버그λ₯Ό μž‘λŠ” 것이고 μ—λŸ¬ 처리 μ½”λ“œλŠ” μ˜ˆμƒ κ°€λŠ₯ν•œ 이상 상황을 μ²˜λ¦¬ν•˜λŠ” κ²ƒμœΌλ‘œ, λ‘˜μ€ λͺ©μ μ΄ λ‹€λ₯΄λ―€λ‘œ ν˜Όμš©ν•΄μ„œλŠ” μ•ˆ λΌμš”. @@ -444,7 +444,7 @@ function RefundForm() { - 빈 λ¬Έμžμ—΄ β†’ Number("") β†’ 0 β†’ 0원 ν™˜λΆˆ μš”μ²­ - 문자 μž…λ ₯ β†’ Number("abc") β†’ NaN β†’ μ„œλ²„μ— NaN 전솑 -- 음수 μž…λ ₯ β†’ 1000 β†’ λ§ˆμ΄λ„ˆμŠ€ ν™˜λΆˆ +- 음수 μž…λ ₯ β†’ -1000 β†’ λ§ˆμ΄λ„ˆμŠ€ ν™˜λΆˆ - 결제 κΈˆμ•‘ 초과 β†’ ν•œλ„ 없이 아무 κΈˆμ•‘μ΄λ‚˜ 전솑 ##### After βœ… @@ -872,7 +872,7 @@ experience=""