낯선 시스템 앞에서 · 재현 가능한 기록 · 실습
다음 사람이 다시 돌릴 수 있는 기록 남기기
목표
조사한 것을 다음 사람이 다시 돌릴 수 있는 형태로 남깁니다. 이론에서 본 네
종류(재현 명령 · 배제 목록 · 측정값 · 넘길 문서)를 실제 파일로 만듭니다.
마지막 단계에서 채점기가 다음 사람 역할을 합니다. 여러분이 쓴 재현 명령을
여러분의 셸이 아닌 곳에서 돌려 같은 숫자가 나오는지 봅니다. 여기서
떨어지는 기록이 현장에서 가장 흔한 기록입니다 — 쓴 사람 자리에서만 돌아갑니다.
환경
/opt/app/flaky.py 는 고객사 견적 API 를 흉내 낸 것입니다. 고칠 대상이
아니라 재현할 대상입니다.
mkdir -p /root/recordnohup python3 /opt/app/flaky.py > /tmp/flaky.log 2>&1 &sleep 1curl -s http://127.0.0.1:8001/healthGET /health 항상 200GET /quote 일정 주기로 503 — 본문은 upstream pool exhaustedGET /counter 지금까지 받은 /quote 요청 수만들 파일
전부 /root/record/ 아래입니다.
repro.sh 증상을 다시 일으키는 명령 하나. 사람 없이 끝나고 숫자만 출력한다before.txt 측정값과 '어떻게 쟀는지'ruled_out.md 지운 계층과 그 근거 명령evidence.txt 실패 응답의 상태 코드와 본문 원문runbook.md 이 증상이 다시 났을 때 첫 30분handoff.md 넘기는 문서단계
1. 작업 디렉터리를 만들고 대상 서비스를 띄웁니다.
2. repro.sh 를 씁니다. /quote 를 20회 호출해 200 이 아닌 응답의 개수만
출력합니다. 물어보지 않고 끝나야 합니다.
3. before.txt 에 결과를 적되 몇 번 호출해 얻은 값인지와 무엇을 호출했는지를
함께 적습니다. 숫자만 있으면 다음 사람이 같은 잣대로 잴 수 없습니다.
4. ruled_out.md 에 지운 계층을 두 개 이상, 근거가 된 명령과 함께 적습니다.
5. evidence.txt 에 실패 응답의 상태 코드와 본문을 요약하지 말고 그대로 남깁니다.
6. 채점기가 repro.sh 를 다른 디렉터리에서, 환경변수 없이 돌립니다.
7. runbook.md 에 증상 · 칠 명령 · 판정 기준 · 막혔을 때 갈 곳을 씁니다.
8. handoff.md 에 현재 상태 · 다음 한 걸음 · 만지지 말 것, 그리고 앞에서
남긴 파일을 가리키는 줄을 씁니다.
참고
6단계가 이 실습의 전부입니다. cd 해 둔 자리, 셸 별칭, 미리 export 해 둔
변수 — 셋 중 하나라도 기대고 있으면 거기서 떨어집니다. **데이터 경로는
절대경로로** 쓰고, 필요한 값은 스크립트 안에서 만드세요.
단계 8개
- 작업 디렉터리와 대상 서비스
- 재현 명령을 하나로 고정
- 측정값과 측정 방법을 함께
- 지운 계층과 그 근거
- 실패 증거를 원문 그대로
- 다른 환경에서 다시 돌려 보기
- 다시 났을 때의 첫 30분
- 넘기는 문서