디버깅 실전 · 증상에서 원인으로 · 실습
넘겨받은 API 고치기
목표
테스트도 문서도 믿을 수 없는 상태로 넘겨받은 API 에서, 증상만 보고 네 개의 결함을 찾아 고칠 수 있게 됩니다.
왜 중요한가
이 실습의 결함들은 전부 200 을 반환하면서 틀린 값을 주는 종류입니다. 예외를 던지는 버그는 모니터링이 잡아 주지만, 그럴듯한 숫자를 돌려주는 버그는 몇 달 뒤 회계가 안 맞을 때 발견됩니다. 그래서 사양을 입출력 표로 먼저 옮기고 경계값을 넣어 보는 절차가 필요합니다.
마지막 단계의 상태 코드 구분도 장식이 아닙니다. 400 은 "네가 잘못 보냈다", 500 은 "내가 처리하다 망가졌다" 이고, 클라이언트 라이브러리는 대부분 5xx 만 재시도 대상으로 봅니다. 잘못된 파라미터에 500 을 돌려주면 영원히 실패할 요청이 무한히 재시도되면서 서버 부하만 올립니다. 상태 코드는 사람이 아니라 기계가 읽는 약속입니다.
/opt/app/server.py 의 docstring 에 원래 사양이 적혀 있습니다. 코드가 그 사양과 어긋나는 지점이 곧 버그 목록입니다.
단계
1. /opt/app/server.py 를 /root/app/server.py 로 복사하세요. 이후 이 사본만 고칩니다.
2. 사본을 실행해 127.0.0.1:8000/health 가 응답하게 만드세요.
3. /sum?a=2&b=3 이 5 를 반환하게 고치세요.
4. /sum?a=10&b=32 가 42, /sum?a=-4&b=9 가 5 를 반환하는지 확인하세요.
5. /avg?nums=2,4,9 가 5, /avg?nums=10 이 10 을 반환하게 고치세요. 내림 평균입니다.
6. /upper?s=fde 가 FDE 를 반환하게 고치세요.
7. /orders/total 이 200 과 함께 130400 을 반환하게 고치세요. 유효한 행의 조건은 docstring 에 있습니다.
8. /sum?a=2 와 /sum?a=x&b=1 이 각각 400 을 반환하게 만드세요. /nope 의 404 는 원본 코드가 이미 돌려주고 있으니 확인만 하면 됩니다 — 고칠 것은 /sum 의 인자 처리뿐입니다. 무엇이 이미 되어 있는지부터 재어 보는 것이 이 단계의 요령입니다.
참고
- 고친 뒤에는 서버를 반드시 재시작해야 반영됩니다.
kill %1후 다시 실행하거나pkill -f server.py를 씁니다. curl -s -o /dev/null -w '%{http_code}\n' URL로 상태 코드만 볼 수 있습니다.- 흔한 실수 1:
/opt/app/server.py원본을 직접 고치는 것. 채점은 8000 포트의 동작만 보지만, 고객 파일을 건드리지 않는 습관이 현장에서 훨씬 중요합니다. - 흔한 실수 2: 7번에서 깨진 행을 파일에서 지우는 것. 데이터는 그대로 두고 코드가 걸러야 합니다.
단계 8개
- 작업 사본 만들기
- 서버 띄우기
- 덧셈 결과 바로잡기
- 음수 입력도 확인하기
- 평균 계산 바로잡기
- 대소문자 변환 바로잡기
- 주문 합계가 죽지 않게 만들기
- 잘못된 요청에 올바른 코드 돌려주기