공개 검색 한글 입력 처리 개선

This commit is contained in:
2026-07-01 10:18:46 +09:00
parent 00999404a4
commit 946bbd5b09
9 changed files with 69 additions and 18 deletions

View File

@@ -1,5 +1,10 @@
# 업데이트 요약
## v1.9.24
- 공개 검색에서 한글 입력 조합 중 미완성 검색어로 결과가 비는 문제를 보정했다.
- 검색어 앞뒤 공백과 연속 공백을 정리해 입력 실수에 덜 민감하게 했다.
## v1.9.23
- 페이지 섹션 관리와 홈 Pages 진열장 연동, 공개 목록 표시개수 반영 변경사항을 일괄 적용했다.

View File

@@ -1,5 +1,9 @@
# 의사결정 이력
## 2026-07-01 v1.9.24 — 검색은 IME 조합 확정값만 사용한다
한글 입력 중 조합 중간값을 즉시 검색에 반영하면 사용자는 `에델`을 입력했다고 느껴도 실제 요청에는 `에데` 같은 미완성 값이 들어갈 수 있다. 통합 검색은 입력 즉시 반응해야 하지만 조합 중간 상태는 결과 품질보다 혼란을 만들기 쉬우므로, IME 조합 중에는 검색 요청을 멈추고 조합 종료 후 최종 입력값을 공백·Unicode 정규화한 값으로 조회한다.
## 2026-06-30 v1.9.23 — 누적 로컬 변경은 기능 묶음 단위로 일괄 반영한다
페이지 섹션 관리, 홈 Pages 진열장 노출, 공개 목록 표시개수처럼 같은 주제의 변경이 여러 파일에 걸쳐 누적된 상태에서는 부분 커밋보다 기능 묶음 단위로 한 번에 반영하는 편이 추적이 쉽다. 이번 반영은 누적된 로컬 변경을 기능 맥락 그대로 커밋해 코드·문서·버전 상태를 동기화한다.

View File

@@ -97,7 +97,7 @@
| components/site/SiteTopChrome.vue | 공개 레이아웃 상단 고정 영역(어나운스 바+헤더), `--site-top-chrome-height` CSS 변수 |
| components/site/SiteAnnouncementBar.vue | 공개 사이트 상단 어나운스 배너(문구·선택 링크·hex 배경색·텍스트 정렬·닫기) |
| components/site/SiteHeader.vue | 모든 공개 페이지 상단, 사이트 이름 텍스트 브랜드, `grid-cols-3`로 검색 패널 중앙 정렬(`md+`), 우측 사용자 아바타 드롭다운(아바타 없거나 비로그인 시 사람 아이콘), `/`·`SiteSearchModal` |
| components/site/SiteSearchModal.vue | `Teleport`·전체 화면 딤·Tags/Posts 결과·일치 구간 강조, 열림 시 `html.site-search-open` 스크롤 잠금 |
| components/site/SiteSearchModal.vue | `Teleport`·전체 화면 딤·Tags/Posts 결과·일치 구간 강조, 열림 시 `html.site-search-open` 스크롤 잠금, IME 조합 종료 후 최종 검색어 반영과 공백·Unicode 정규화 |
| components/site/LeftSidebar.vue | 왼쪽 사이드바, `lg+`는 `sticky`+고정 높이+내부 무스크롤바 스크롤, `lg` 미만은 고정 슬라이드 패널, 상단 메뉴는 `SidebarPrimaryNavList`+`provide`로 트리·펼침 상태(`sori-primary-nav-expanded`), 태그 Categories 아래 공개 `GET /api/navigation`의 `recommended` 카드 목록(수동 썸네일 > 서버 캐시 파비콘 > 외부 프록시 fallback), Authors 영역은 비공개, 푸터 `footer` 링크는 `flex-wrap`·테마 버튼 `shrink-0`, 태그 카테고리·테마 점은 `site-sidebar-nav-row` 호버 |
| components/site/SidebarPrimaryNavList.vue | 상단 네비: 부모·리프 동일 `before` 막대/호버 원형, 내부 현재 경로 `--site-accent`, 행 `w-full`+`site-sidebar-nav-row` 호버(`#F7F4EF` 라이트), `inject`·`localStorage` 펼침 |
| components/site/RightSidebar.vue | 오른쪽 사이드바, 일반 화면은 설정 기반 사이트 로고 48px 정사각형 고정·SNS Follow(프리셋·사용자 SVG, 16px 아이콘 중앙 정렬)·오른쪽 사이드 광고를 표시, 게시글 상세 데스크톱은 블로그 소개·Follow 대신 최상단 H1~H3 TOC와 TOC 아래 게시물 사이드 광고(모바일 숨김, 스크롤 위치 기반 활성 표시·내부 자동 스크롤, 세로 기준선), About 영역은 비공개, `lg+` 스티키 |

View File

@@ -37,6 +37,7 @@
- `lg` 미만에서는 왼쪽 사이드바를 화면 좌측 고정 슬라이드 패널로 표시하고, 열린 동안 백드롭을 탭하면 `closeMenu`로 닫는다.
- `Escape` 키는 통합 검색 모달이 열려 있으면 최우선으로 닫고, 그다음 사용자 드롭다운, 이어서 모바일에서만 좌측 슬라이드 메뉴를 닫는다.
- `/` 키는 `INPUT`·`TEXTAREA`·`SELECT`·`contenteditable`에 포커스가 없고 `Ctrl`/`Meta`/`Alt`와 함께 눌리지 않을 때 통합 검색 모달을 연다. 헤더 검색 영역(`md+`) 클릭으로도 동일하게 연다.
- 통합 검색 입력은 한글 등 IME 조합 중에는 검색 요청을 보내지 않고 조합 종료 후 최종 입력값으로 검색한다. 검색어는 앞뒤 공백 제거, 연속 공백 단일화, Unicode NFC 정규화를 거쳐 태그·게시물·페이지 검색에 사용한다.
- 헤더 우측 사용자 아이콘 버튼은 로그인 상태면 회원 아바타/닉네임과 설정·로그아웃 메뉴를, 비로그인 상태면 Guest·Sign up·Sign in 메뉴를 표시한다. 회원 아바타 이미지가 없거나 비로그인 상태인 경우 사용자 메뉴 버튼에는 사람 아이콘을 표시한다.
- 오른쪽 사이드바의 FOLLOW 영역은 사이트 설정의 SNS 링크 목록을 기준으로 표시한다. 관리자가 아이콘 프리셋 또는 직접 SVG 아이콘과 주소를 등록한 항목만 노출하며, 등록된 항목이 없으면 FOLLOW 영역 자체를 숨긴다. SNS 주소는 `https://`를 생략해도 저장 시 자동 보정한다. 관리자 편집 화면은 아이콘과 주소를 기본 입력으로 사용하며, 직접 SVG 프리셋을 선택했을 때만 SVG 코드 입력을 추가로 표시한다. 공개 FOLLOW 아이콘은 프리셋·직접 SVG 모두 16px 아이콘을 20px 버튼 중앙에 배치한다.

View File

@@ -1,5 +1,10 @@
# 업데이트 이력
## v1.9.24
- 공개 통합 검색 입력의 한글 IME 조합 중 미완성 검색 요청 방지.
- 공개 통합 검색어 앞뒤 공백·연속 공백·Unicode 정규화 처리 추가.
## v1.9.23
- 페이지 섹션 관리 API·관리자 화면·홈 Pages 진열장 연동 변경분 일괄 반영.