引き継いだAPIを直す
한국어 원문으로 표시합니다.
목표
테스트도 문서도 믿을 수 없는 상태로 넘겨받은 API 에서, 증상만 보고 네 개의 결함을 찾아 고칠 수 있게 됩니다.
왜 중요한가
이 실습의 결함들은 전부 200 을 반환하면서 틀린 값을 주는 종류입니다. 예외를 던지는 버그는 모니터링이 잡아 주지만, 그럴듯한 숫자를 돌려주는 버그는 몇 달 뒤 회계가 안 맞을 때 발견됩니다. 그래서 사양을 입출력 표로 먼저 옮기고 경계값을 넣어 보는 절차가 필요합니다.
마지막 단계의 상태 코드 구분도 장식이 아닙니다. 400 은 "네가 잘못 보냈다", 500 은 "내가 처리하다 망가졌다" 이고, 클라이언트 라이브러리는 대부분 5xx 만 재시도 대상으로 봅니다. 잘못된 파라미터에 500 을 돌려주면 영원히 실패할 요청이 무한히 재시도되면서 서버 부하만 올립니다. 상태 코드는 사람이 아니라 기계가 읽는 약속입니다.
/opt/app/server.py 의 docstring 에 원래 사양이 적혀 있습니다. 코드가 그 사양과 어긋나는 지점이 곧 버그 목록입니다.
단계
/opt/app/server.py를/root/app/server.py로 복사하세요. 이후 이 사본만 고칩니다.- 사본을 실행해
127.0.0.1:8000/health가 응답하게 만드세요. /sum?a=2&b=3이5를 반환하게 고치세요./sum?a=10&b=32가42,/sum?a=-4&b=9가5를 반환하는지 확인하세요./avg?nums=2,4,9가5,/avg?nums=10이10을 반환하게 고치세요. 내림 평균입니다./upper?s=fde가FDE를 반환하게 고치세요./orders/total이 200 과 함께130400을 반환하게 고치세요. 유효한 행의 조건은 docstring 에 있습니다./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번에서 깨진 행을 파일에서 지우는 것. 데이터는 그대로 두고 코드가 걸러야 합니다.
작업 사본 만들기
/opt/app/server.py 를 /root/app/server.py 로 복사하세요. 이후 이 사본만 고칩니다.
원본을 직접 고치지 않는 것이 현장의 기본입니다. /opt/app/server.py 를 /root/app/ 아래로 복사하세요.
서버 띄우기
사본을 실행해 127.0.0.1:8000/health 가 응답하게 만드세요.
python3 로 실행하면 127.0.0.1:8000 에서 대기합니다. 고칠 때마다 재시작해야 반영됩니다.
덧셈 결과 바로잡기
/sum?a=2&b=3 이 5 를 반환하게 고치세요.
2 와 3 을 넣었을 때 나오는 값을 보면 어떤 연산자가 쓰였는지 바로 보입니다. 파일 안에서 그 한 글자를 찾으세요.
음수 입력도 확인하기
/sum?a=10&b=32 가 42, /sum?a=-4&b=9 가 5 를 반환하는지 확인하세요.
경계값 확인 단계입니다. 부호가 섞였을 때도 맞는지 보면 진짜 덧셈인지 알 수 있습니다.
평균 계산 바로잡기
/avg?nums=2,4,9 가 5, /avg?nums=10 이 10 을 반환하게 고치세요. 내림 평균입니다.
원소 세 개일 때와 한 개일 때를 각각 넣어 보세요. 나누는 수가 원소 개수와 몇 차이 나는지 드러납니다.
대소문자 변환 바로잡기
/upper?s=fde 가 FDE 를 반환하게 고치세요.
엔드포인트 이름과 실제로 호출하는 문자열 메서드가 일치하는지 보세요.
주문 합계가 죽지 않게 만들기
/orders/total 이 200 과 함께 130400 을 반환하게 고치세요. 유효한 행의 조건은 docstring 에 있습니다.
docstring 에 유효한 행의 조건이 세 가지로 적혀 있는데 코드에는 그 분기가 없습니다. 문서대로 걸러내면 됩니다.
잘못된 요청에 올바른 코드 돌려주기
/sum?a=2 와 /sum?a=x&b=1 이 각각 400 을 반환하게 만드세요. /nope 의 404 는 원본 코드가 이미 돌려주고 있으니 확인만 하면 됩니다 — 고칠 것은 /sum 의 인자 처리뿐입니다. 무엇이 이미 되어 있는지부터 재어 보는 것이 이 단계의 요령입니다.
파라미터가 없거나 숫자가 아닐 때 지금은 서버가 죽습니다. 클라이언트 잘못은 4xx 입니다.