Skip to main content
TypeScript μ†ŒμŠ€ 맡을 ν™œμš©ν•œ 효과적인 디버깅 방법을 λ‹€λ£Ήλ‹ˆλ‹€.

μ†ŒμŠ€ λ§΅μ΄λž€?

μ†ŒμŠ€ λ§΅(Source Map)은 컴파일된 JavaScript μ½”λ“œλ₯Ό 원본 TypeScript μ½”λ“œλ‘œ λ§€ν•‘ν•˜λŠ” νŒŒμΌμž…λ‹ˆλ‹€. 이λ₯Ό 톡해 μ—λŸ¬ μŠ€νƒ νŠΈλ ˆμ΄μŠ€μ™€ λ””λ²„κ±°μ—μ„œ 원본 TypeScript μ½”λ“œλ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. ν™œμš©:
  • μ—λŸ¬ μŠ€νƒ νŠΈλ ˆμ΄μŠ€μ—μ„œ 원본 TypeScript μœ„μΉ˜ 확인
  • λ””λ²„κ±°μ—μ„œ TypeScript μ½”λ“œμ— 브레이크포인트 μ„€μ •
  • ν”„λ‘œλ•μ…˜ μ—λŸ¬λ₯Ό 원본 μ½”λ“œμ™€ λ§€ν•‘

μ†ŒμŠ€ λ§΅ ν™œμ„±ν™”

tsconfig.json μ„€μ •

μƒμ„±λ˜λŠ” 파일:

inlineSourceMap vs sourceMap

μ—λŸ¬ μŠ€νƒ 트레이슀

μ†ŒμŠ€ λ§΅ 없이

컴파일된 JavaScript μœ„μΉ˜λ§Œ ν‘œμ‹œλ˜μ–΄ 디버깅이 μ–΄λ ΅μŠ΅λ‹ˆλ‹€.

μ†ŒμŠ€ λ§΅ μžˆμ„ λ•Œ

원본 TypeScript 파일과 라인 번호λ₯Ό μ •ν™•νžˆ ν‘œμ‹œν•©λ‹ˆλ‹€.

Node.jsμ—μ„œ μ†ŒμŠ€ λ§΅ μ‚¬μš©

β€”enable-source-maps ν”Œλž˜κ·Έ

λ˜λŠ” package.json:

tsx μ‚¬μš© (ꢌμž₯)

SonamuλŠ” tsxλ₯Ό μ‚¬μš©ν•˜λ―€λ‘œ 별도 μ„€μ • 없이 μ†ŒμŠ€ 맡이 μž‘λ™ν•©λ‹ˆλ‹€.

VSCode 디버거 μ„€μ •

launch.json

디버깅 단계

  1. 브레이크포인트 μ„€μ •
    • TypeScript 파일(.ts)μ—μ„œ 쀄 번호 μ™Όμͺ½ 클릭
  2. 디버거 μ‹œμž‘
    • F5 λ˜λŠ” β€œRun and Debug” νŒ¨λ„μ—μ„œ μ‹€ν–‰
  3. λ³€μˆ˜ 검사
    • λΈŒλ ˆμ΄ν¬ν¬μΈνŠΈμ—μ„œ λ©ˆμΆ”λ©΄ λ³€μˆ˜ κ°’ 확인
    • Watch νŒ¨λ„μ—μ„œ ν‘œν˜„μ‹ 평가
  4. 단계별 μ‹€ν–‰
    • F10: Step Over (λ‹€μŒ 쀄)
    • F11: Step Into (ν•¨μˆ˜ λ‚΄λΆ€λ‘œ)
    • Shift+F11: Step Out (ν•¨μˆ˜ λ°–μœΌλ‘œ)

ν”„λ‘œλ•μ…˜ μ†ŒμŠ€ λ§΅

λ³΄μ•ˆ 고렀사항

ν”„λ‘œλ•μ…˜ 배포 μ‹œ:

μ—λŸ¬ 좔적 μ„œλΉ„μŠ€ 연동

μ†ŒμŠ€ 맡을 Sentry 같은 μ—λŸ¬ 좔적 μ„œλΉ„μŠ€μ— μ—…λ‘œλ“œ:

μ†ŒμŠ€ λ§΅ 문제 ν•΄κ²°

1. μ†ŒμŠ€ 맡이 μƒμ„±λ˜μ§€ μ•ŠμŒ

확인 사항:
ν•΄κ²°:

2. μŠ€νƒ νŠΈλ ˆμ΄μŠ€κ°€ μ—¬μ „νžˆ .js νŒŒμΌμ„ 가리킴

원인: Node.jsκ°€ μ†ŒμŠ€ 맡을 μΈμ‹ν•˜μ§€ λͺ»ν•¨ ν•΄κ²°:

3. VSCode 디버거가 μž‘λ™ν•˜μ§€ μ•ŠμŒ

확인 사항:
ν•΄κ²°:
  1. .vscode/launch.json μž¬μ„€μ •
  2. TypeScript μ„œλ²„ μž¬μ‹œμž‘: Cmd+Shift+P β†’ β€œTypeScript: Restart TS Server”
  3. 디버거 μž¬μ‹œμž‘

4. 잘λͺ»λœ 라인 번호

원인: μ†ŒμŠ€ λ§΅κ³Ό μ½”λ“œκ°€ λ™κΈ°ν™”λ˜μ§€ μ•ŠμŒ ν•΄κ²°:

μ†ŒμŠ€ λ§΅ 검증

μˆ˜λ™ 검증

source-map νŒ¨ν‚€μ§€λ‘œ 검증

λΈŒλΌμš°μ €μ—μ„œ μ†ŒμŠ€ λ§΅

Vite 개발 μ„œλ²„

ViteλŠ” μžλ™μœΌλ‘œ μ†ŒμŠ€ 맡을 μƒμ„±ν•˜κ³  μ œκ³΅ν•©λ‹ˆλ‹€:

Chrome DevTools

  1. μ†ŒμŠ€ νƒ­ μ—΄κΈ°
    • F12 β†’ Sources νƒ­
  2. TypeScript 파일 확인
    • webpack:// λ˜λŠ” src/ μ•„λž˜ .ts 파일
  3. 브레이크포인트 μ„€μ •
    • TypeScript νŒŒμΌμ—μ„œ 쀄 번호 클릭
  4. 디버깅
    • νŽ˜μ΄μ§€ μƒˆλ‘œκ³ μΉ¨ν•˜μ—¬ 브레이크포인트 도달

Best Practices

1. 항상 개발 ν™˜κ²½μ—μ„œ ν™œμ„±ν™”

2. Gitμ—μ„œ .map 파일 μ œμ™Έ

3. ν”„λ‘œλ•μ…˜μ—μ„œ 선택적 μ‚¬μš©

4. μ—λŸ¬ λͺ¨λ‹ˆν„°λ§ 톡합

ν”„λ‘œλ•μ…˜μ—μ„œλŠ” μ†ŒμŠ€ 맡을 μ—λŸ¬ 좔적 μ„œλΉ„μŠ€μ—λ§Œ 제곡:

κ΄€λ ¨ 도ꡬ

1. source-map-support

λŸ°νƒ€μž„μ— μ†ŒμŠ€ λ§΅ μžλ™ 적용:

2. @esbuild-kit/core-utils

esbuild 기반 λΉŒλ“œ λ„κ΅¬μ˜ μ†ŒμŠ€ λ§΅ 지원:

3. Chrome DevTools

  • Elements νƒ­μ—μ„œ 컴파일된 CSSλ₯Ό 원본 SCSS/LESS둜 λ§€ν•‘
  • Network νƒ­μ—μ„œ μ†ŒμŠ€ λ§΅ λ‹€μš΄λ‘œλ“œ 확인
  • Consoleμ—μ„œ 원본 파일 링크 클릭

κ΄€λ ¨ λ¬Έμ„œ