diff --git a/src/pages/search/SearchPage.tsx b/src/pages/search/SearchPage.tsx
index ccff7daa..a1dd97ed 100644
--- a/src/pages/search/SearchPage.tsx
+++ b/src/pages/search/SearchPage.tsx
@@ -1,11 +1,10 @@
-// SearchPage.tsx
import { useEffect, useMemo, useState } from 'react';
import { Link, useSearchParams } from 'react-router-dom';
import type { SemanticArticle } from '@/pages/search/types/searchTypes';
import LoadingFallback from '@/routes/LoadingFallback';
-import { isSemanticSearchApiError, semanticSearch } from './apis/searchApi';
+import { semanticSearch } from './apis/searchApi';
const MIN_LENGTH_MESSAGE = '검색어는 두 글자 이상이어야 합니다.';
const EMPTY_RESULT_MESSAGE = '검색 결과가 없습니다.';
@@ -44,32 +43,28 @@ const SearchPage = () => {
setLoading(true);
setShowLengthPopup(false);
setError(null);
- console.log('[SearchPage] runSearch:start', { q, page, size, threshold });
try {
const result = await semanticSearch({ query: q, page, size, threshold });
+ setArticles(result.articles ?? []);
+ } catch (e: any) {
+ const status = e?.response?.status;
+ const message = e?.response?.data?.message;
- console.log('[SearchPage] runSearch:done', {
- q_from_url: q,
- q_in_result: result.query,
- articles_len: result.articles.length,
- totalCount: result.totalCount,
- });
-
- setArticles(result.articles);
- } catch (e) {
- console.log('[SearchPage] runSearch:error', e);
- setShowLengthPopup(false);
- if (isSemanticSearchApiError(e) && e.code === 'FEED_9606') {
- setError(EMPTY_RESULT_MESSAGE);
- setArticles(e.payload?.articles ?? []);
- } else if (e instanceof Error) {
- setError(e.message || '검색 결과가 없습니다.');
+ if (status === 204) {
setArticles([]);
- } else {
- setError('검색 결과가 없습니다.');
+ setError(null);
+ return;
+ }
+
+ if (status === 400 && message?.includes('유효한 검색어')) {
+ setError('유효한 검색어가 없습니다. 의미 있는 단어를 입력하세요.');
setArticles([]);
+ return;
}
+
+ setError('검색 중 오류가 발생했습니다.');
+ setArticles([]);
} finally {
setLoading(false);
}
@@ -100,7 +95,7 @@ const SearchPage = () => {
{loading &&