← 전체 글로 돌아가기

웹 개발

검색해서 버그를 발견했을 때의 확인 순서

사용자가 검색했을 때 이상한 결과가 나올 때, 어디가 문제인지 체계적으로 찾는 방법을 정리했다.

"검색하면 결과가 이상하게 나와요"라는 신고를 받았다. 처음엔 검색 알고리즘 때문일 줄 알았는데, 알고 보니 입력 전처리, 인덱싱, 또는 결과 정렬이 문제였다.

검색 기능은 여러 단계를 거치기 때문에, 어느 단계에서 실패했는지 빠르게 파악해야 한다.

재현 조건 고정하기

먼저 같은 키워드로 여러 번 검색해본다. 매번 같은 결과가 나오는가?

  • 일정하게 나온다: 알고리즘 문제
  • 들쭉날쭉하다: 캐싱 문제 또는 인덱스 업데이트 문제

이 구분이 중요하다. 같은 입력에 다른 결과가 나온다면 원인을 찾기가 훨씬 어렵다.

검색 입력 확인

사용자가 입력한 키워드가 서버에 제대로 전달되는지 본다.

# 브라우저 개발자 도구 - 네트워크 탭
# GET /api/search?q=keyword
# 실제 전송된 q 값이 의도한 대로인지 확인

입력 처리 단계에서 띄어쓰기, 특수문자, 인코딩이 제대로 되는지 본다.

데이터베이스 쿼리 로그 확인

실제 어떤 쿼리가 실행되는지 본다. 예를 들어:

  • LIKE 쿼리 vs 전문 검색 인덱스 사용
  • WHERE 조건이 제대로 들어가는지
  • ORDER BY가 예상대로 작동하는지

결과 순서와 필터

검색 결과의 순서가 이상하다면:

  1. 정렬 기준이 뭔가? (관련성, 최신순, 인기도)
  2. 필터가 적용됐는가? (카테고리, 날짜 범위 등)
  3. 숨겨진 아이템이 포함되는가? (삭제됨, 비공개)

각각을 따로 테스트한다. 가령 정렬만 끄고 필터를 켠 상태, 또는 그 반대로.

캐싱 문제

같은 검색어를 여러 번 입력했을 때 다른 결과가 나온다면 캐싱을 의심한다.

# 캐시 비우고 다시 시도
# 브라우저: Ctrl+Shift+Delete (캐시 삭제)
# 또는 개발자 도구 - Network - Disable cache

브라우저 캐시뿐 아니라 서버 캐시도 확인한다. Redis나 memcached를 쓰면, 그곳의 데이터가 stale할 수 있다.

마지막으로 중요한 건, 검색 문제는 보이는 증상만으로는 원인을 알 수 없다는 거다. 입력, 쿼리, 정렬, 캐싱을 각각 따로 측정해야 한다. 그래야 다음에 "검색이 느려졌어"라고 들었을 때 빠르게 대응할 수 있다.