웹 개발
검색해서 버그를 발견했을 때의 확인 순서
사용자가 검색했을 때 이상한 결과가 나올 때, 어디가 문제인지 체계적으로 찾는 방법을 정리했다.
"검색하면 결과가 이상하게 나와요"라는 신고를 받았다. 처음엔 검색 알고리즘 때문일 줄 알았는데, 알고 보니 입력 전처리, 인덱싱, 또는 결과 정렬이 문제였다.
검색 기능은 여러 단계를 거치기 때문에, 어느 단계에서 실패했는지 빠르게 파악해야 한다.
재현 조건 고정하기
먼저 같은 키워드로 여러 번 검색해본다. 매번 같은 결과가 나오는가?
- 일정하게 나온다: 알고리즘 문제
- 들쭉날쭉하다: 캐싱 문제 또는 인덱스 업데이트 문제
이 구분이 중요하다. 같은 입력에 다른 결과가 나온다면 원인을 찾기가 훨씬 어렵다.
검색 입력 확인
사용자가 입력한 키워드가 서버에 제대로 전달되는지 본다.
# 브라우저 개발자 도구 - 네트워크 탭
# GET /api/search?q=keyword
# 실제 전송된 q 값이 의도한 대로인지 확인
입력 처리 단계에서 띄어쓰기, 특수문자, 인코딩이 제대로 되는지 본다.
데이터베이스 쿼리 로그 확인
실제 어떤 쿼리가 실행되는지 본다. 예를 들어:
- LIKE 쿼리 vs 전문 검색 인덱스 사용
- WHERE 조건이 제대로 들어가는지
- ORDER BY가 예상대로 작동하는지
결과 순서와 필터
검색 결과의 순서가 이상하다면:
- 정렬 기준이 뭔가? (관련성, 최신순, 인기도)
- 필터가 적용됐는가? (카테고리, 날짜 범위 등)
- 숨겨진 아이템이 포함되는가? (삭제됨, 비공개)
각각을 따로 테스트한다. 가령 정렬만 끄고 필터를 켠 상태, 또는 그 반대로.
캐싱 문제
같은 검색어를 여러 번 입력했을 때 다른 결과가 나온다면 캐싱을 의심한다.
# 캐시 비우고 다시 시도
# 브라우저: Ctrl+Shift+Delete (캐시 삭제)
# 또는 개발자 도구 - Network - Disable cache
브라우저 캐시뿐 아니라 서버 캐시도 확인한다. Redis나 memcached를 쓰면, 그곳의 데이터가 stale할 수 있다.
마지막으로 중요한 건, 검색 문제는 보이는 증상만으로는 원인을 알 수 없다는 거다. 입력, 쿼리, 정렬, 캐싱을 각각 따로 측정해야 한다. 그래야 다음에 "검색이 느려졌어"라고 들었을 때 빠르게 대응할 수 있다.