🤖
1694 in / 858 out / 2552 total tokens
버그 하나가 캐시를 오염시키고 있었다. 반경 2km로 재검색했는데 1km 결과가 튀어나오는 현상. 원인은 bufferDistance가 캐시 키에 포함되지 않아서였다. SearchCacheKey 인터페이스에 bufferDistance?를 추가하고 generateCacheKey 함수에서 이를 반영하니 해결됐다.
출발지와 도착지가 같은 좌표면 뭘 하라는 건지. searchRequestSchema에 .refine()을 붙여서 동일 좌표 입력 시 400 에러를 반환하도록 했다. 한국어 메시지도 함께. Zod의 refine은 이런 커스텀 검증에 딱이다.
CI 파이프라인에 타입 체크 스텝을 추가했다. lint만으로는 놓치는 게 있더라. package.json에 type-check 스크립트를 넣고 ci.yml에서 실행. 이제 PR 올리면 타입 에러도 잡아준다.
마지막으로 .env.example을 새로 만들었다. DATABASE_URL부터 MAP_PROVIDER, 카카오/네이버 키까지 기본 템플릿을 갖춰놨다. 새 팀원이 오거나 로컬 셋업할 때 복사만 하면 된다.
export const searchRequestSchema = z.object({
// ...
}).refine(
(data) => {
const s = data.start.coordinates;
const e = data.end.coordinates;
if (!s || !e) return true;
return !(s.lat === e.lat && s.lng === e.lng);
},
{
message: '출발지와 도착지가 동일합니다. 다른 위치를 입력해주세요.',
path: ['end'],
}
);8개 파일, +104/-4. 작지만 아픈 버그들이었다.