Claude와 함께 MIT Missing Semester 강의를 실습하며 정리한 내용입니다.
들어가며
이번 강의는 문제를 찾고 성능을 측정하는 도구들을 다룬다. (디버거, 프로파일러)
핵심 개념
디버깅 단계별 도구
1단계: Printf 디버깅 - console.log, print, echo 찍어보기. 가장 단순하고 가장 많이 쓰는 방법.
2단계: 로깅 - severity level로 중요도 구분:
DEBUG- 개발 중 상세 정보INFO- 정상 동작 기록WARN- 잠재적 문제ERROR- 실제 에러
프론트엔드의 console.log / console.warn / console.error 구분과 동일한 원리.
3단계: 디버거 - 코드를 한 줄씩 실행하면서 변수 상태 확인. gdb/lldb(C/C++), pdb(Python), Chrome DevTools(JavaScript). VS Code에서 빨간 점 찍고 F5 누르는 게 이것.
핵심 명령어 (대부분의 디버거 공통): breakpoint(멈추기), step(한 줄 실행), next(함수 안으로 안 들어감), print(변수 확인), backtrace(호출 스택).
4단계: 시스템 콜 추적 - 프로그램이 OS에 뭘 요청하는지 확인. strace(Linux), dtrace(macOS).
프로파일링
"느린데 어디가 느린지 모르겠을 때" 쓰는 도구.
time 명령어
time npm run buildreal- 실제 경과 시간 (벽시계)user- CPU가 사용자 코드에 쓴 시간sys- CPU가 커널(OS)에 쓴 시간
real이 크고 user가 작으면 I/O 대기(네트워크, 디스크)가 병목. user가 크면 CPU 연산이 병목.
리소스 모니터링
htop- CPU/메모리 실시간 모니터링du -sh *- 디렉토리별 디스크 사용량df -h- 전체 디스크 여유 공간lsof- 열린 파일/포트 확인lsof -i :3000- 3000번 포트를 쓰고 있는 프로세스 찾기
벤치마킹: hyperfine
hyperfine 'command1' 'command2'여러 번 측정해서 평균/표준편차로 비교. 최적화 전후 before/after 비교에 유용.
Flame Graph
함수 호출 스택을 시각화. 넓은 막대 = 오래 걸리는 함수. 병목 지점을 한눈에 파악 가능.
실습 기록
블로그 빌드 시간 측정
time npm run build로 빌드 시간의 real/user/sys를 확인.
htop + du
htop으로 실시간 리소스 확인. du -sh */ | sort -rn | head -5로 블로그 폴더별 디스크 사용량 확인.
hyperfine 벤치마킹
hyperfine 'npm run build'로 빌드 시간을 통계적으로 측정.
lsof 포트 확인
lsof -i :3000으로 개발 서버가 사용 중인 포트 확인. "포트가 이미 사용 중입니다" 에러 날 때 범인 찾는 명령어.