LabHub

디버깅 실전 · 증상에서 원인으로 · 실습

넘겨받은 API 고치기

LabHub 에서 이어서 보기

목표

테스트도 문서도 믿을 수 없는 상태로 넘겨받은 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=35 를 반환하게 고치세요.
4. /sum?a=10&b=3242, /sum?a=-4&b=95 를 반환하는지 확인하세요.
5. /avg?nums=2,4,95, /avg?nums=1010 을 반환하게 고치세요. 내림 평균입니다.
6. /upper?s=fdeFDE 를 반환하게 고치세요.
7. /orders/total 이 200 과 함께 130400 을 반환하게 고치세요. 유효한 행의 조건은 docstring 에 있습니다.
8. /sum?a=2/sum?a=x&b=1 이 각각 400 을 반환하게 만드세요. /nope404 는 원본 코드가 이미 돌려주고 있으니 확인만 하면 됩니다 — 고칠 것은 /sum 의 인자 처리뿐입니다. 무엇이 이미 되어 있는지부터 재어 보는 것이 이 단계의 요령입니다.

참고

단계 8개

  1. 작업 사본 만들기
  2. 서버 띄우기
  3. 덧셈 결과 바로잡기
  4. 음수 입력도 확인하기
  5. 평균 계산 바로잡기
  6. 대소문자 변환 바로잡기
  7. 주문 합계가 죽지 않게 만들기
  8. 잘못된 요청에 올바른 코드 돌려주기