LabHub
배우기 러닝패스 코스

통합과 배포 · 말없이 바뀐 계약 · 실습

필드 하나가 이름을 바꿨는데 합계만 조용히 틀렸다

LabHub 에서 이어서 보기

목표

파트너 주문 API 의 1.3 과 1.4 를 나란히 놓고 무엇이 우리를 깨뜨리는지 필드 단위로 가린 뒤, 우리가 읽는 것만 적은 소비자 계약과 그 계약을 매번 확인하는 계약 시험을 만든다. 구판과 신판을 동시에 받아들이는 읽기 계층까지 붙인다.

왜 중요한가

연결이 끊기는 사고는 경보가 울린다. 필드가 이름을 바꾸는 사고는 울리지 않는다. rec.get("region") 은 예외 대신 None 을 돌려주고, 늘어난 열거값은 우리 분기 어디에도 안 들어가고, 정수가 십진 문자열이 되면 합계가 조용히 달라진다.
그래서 통합의 안전장치는 "문서를 잘 읽는 것" 이 아니라 기계가 매번 대조하는 계약이다. 계약에는 파트너의 전체 스키마가 아니라 우리가 실제로 읽는 필드만 적는다. 전부 적으면 우리가 안 쓰는 필드의 변경에도 빨간불이 켜지고, 소음이 늘면 사람은 시험을 끈다.
판올림은 한 번에 끝나지도 않는다. 구판과 신판이 몇 달 함께 도는 동안 읽는 쪽이 둘 다 받아들여야 하므로, 이름이 바뀐 자리는 별칭 표로 타입이 바뀐 자리는 정규화 함수로 한곳에 모은다.
채점기는 여러분의 문장을 믿지 않는다. 여러분이 만든 파트너 서버를 채점기가 고른 포트에 직접 띄워 응답을 받아 보고, 여러분의 판정기와 대조기를 채점기가 만든 입력으로 다시 실행해 답을 맞춰 본다.

단계

1. /root/contract/partner.py 를 만들어 포트 8011 에 띄우고, 두 판의 응답을 /root/contract/v13.json/root/contract/v14.json 에 저장하세요.
2. 두 응답의 필드 차이를 /root/contract/diff.json 에 added·removed·type_changed·enum_added 네 칸으로 적으세요.
3. /root/contract/breaking.py 를 만들어 변경 한 건을 받아 우리를 깨뜨리는지 판정하게 하세요.
4. 우리가 읽는 필드만 적은 소비자 계약을 /root/contract/order.contract.json 에 쓰세요.
5. /root/contract/validate.py 를 만들어 계약과 레코드를 대조하고 위반을 missing·type·enum 으로 갈라 적게 하세요.
6. /root/contract/read_order.py 를 만들어 1.3 과 1.4 응답을 모두 같은 내부 모양으로 옮기세요.
7. /root/contract/contract_test.sh 를 만들어 파트너의 지금 응답을 계약과 대조하고, 어긋나면 0 이 아닌 코드로 끝나게 하세요.
8. /root/contract/contract_report.md 에 네 절로 보고하세요.

참고

단계 8개

  1. 두 판을 함께 내주는 파트너 띄우기
  2. 두 판의 차이를 기계가 읽게 뽑기
  3. 무엇이 우리를 깨뜨리는지 가리기
  4. 우리가 읽는 것만 적은 계약
  5. 계약과 실제 응답을 대조하기
  6. 구판과 신판을 함께 받아들이기
  7. 공지 없이 또 움직인 파트너 잡아내기
  8. 판올림 점검 보고서