한글 초성 추출 방법과 검색 최적화 활용
유니코드 기반 한글 초성 추출 원리를 설명하고, 초성 검색 기능 구현 방법과 SEO·UX 활용 전략을 안내합니다.
Q.한글 초성을 프로그래밍으로 추출하는 방법은 무엇인가요?
한글은 유니코드 44032(가)부터 55203(힣)까지 배치되어 있습니다. 초성 추출 공식은 (유니코드 코드포인트 - 44032) ÷ 588의 정수 부분입니다. Python에서는 `(ord(char) - 44032) // 588`로 초성 인덱스를 구하고, 초성 리스트 `['ㄱ', 'ㄲ', 'ㄴ', ...]`에서 해당 인덱스를 참조하면 됩니다.
네이버 모바일 앱에서 "ㄱ"만 입력해도 "국밥", "강남역", "경복궁"이 자동완성으로 뜬다. 이 초성 검색이 작동하려면 각 단어의 초성을 미리 추출해 인덱싱해야 한다. 많은 개발자가 복잡하게 생각하지만, 유니코드 수식 하나로 해결된다.
핵심 답변
한글은 유니코드 44032(가)부터 55203(힣)까지 배치되어 있습니다. 초성 추출 공식은 (유니코드 코드포인트 - 44032) ÷ 588의 정수 부분입니다. Python에서는 (ord(char) - 44032) // 588로 초성 인덱스를 구하고, 초성 리스트 ['ㄱ', 'ㄲ', 'ㄴ', ...]에서 해당 인덱스를 참조하면 됩니다.
한글 유니코드 구조
한글 완성형 문자는 유니코드 코드포인트 44032(가)부터 55203(힣)까지 11,172자가 연속 배치되어 있다. 각 문자는 다음 수식으로 분해된다.
코드포인트 = 44032 + (초성 인덱스 × 588) + (중성 인덱스 × 28) + 종성 인덱스
초성은 19개, 중성 21개, 종성 28개(받침 없음 포함)로 19 × 21 × 28 = 11,172자다.
초성 추출 코드
python
CHOSUNG = ['ㄱ','ㄲ','ㄴ','ㄷ','ㄸ','ㄹ','ㅁ','ㅂ','ㅃ',
'ㅅ','ㅆ','ㅇ','ㅈ','ㅉ','ㅊ','ㅋ','ㅌ','ㅍ','ㅎ']
def get_chosung(char):
code = ord(char)
if 44032 <= code <= 55203:
return CHOSUNG[(code - 44032) // 588]
return char # 한글이 아닌 경우 그대로 반환
def text_to_chosung(text):
return ''.join(get_chosung(c) for c in text)
# 사용 예
print(text_to_chosung("서울특별시")) # ㅅㅇㅌㅂㅅ
print(text_to_chosung("텍스터브")) # ㅌㅅㅌㅂ
초성 검색 구현
python
def search_by_chosung(query, items):
# query가 초성만으로 구성된 경우
if all(c in 'ㄱㄲㄴㄷㄸㄹㅁㅂㅃㅅㅆㅇㅈㅉㅊㅋㅌㅍㅎ' for c in query):
return [item for item in items
if text_to_chosung(item).startswith(query)]
# 일반 검색
return [item for item in items if query in item]
실무 활용 사례
- 자동완성: 검색창에 초성 입력 시 후보 목록 표시
- 정렬: 가나다 순 정렬 시 초성 기준으로 그룹화
- 색인(Index): 전화번호부 또는 사전 앱의 인덱스 탭 구성
초성 검색 기능을 실제 서비스에 적용하는 구체적인 사례는 다음과 같다.
사례 1: 사내 직원 검색 시스템
임직원 수가 수백 명 이상인 조직에서 이름 초성 검색을 지원하면 "ㅈㅅ"만 입력해도 "정수민", "조성준", "장수영" 같은 후보가 표시된다. 영문 이름과 혼합된 경우에도 한글 이름 컬럼만 초성 색인을 적용하면 충분하다.
사례 2: 상품 카테고리 자동완성
쇼핑몰에서 상품 검색 시 "ㄴㅅ"를 입력하면 "나이키 신발", "남성 수영복" 같은 카테고리가 후보로 표시된다. 상품명 DB에 초성 컬럼을 별도로 추가해 인덱스를 걸어두면 실시간 자동완성이 가능하다.
사례 3: 한자·영문 혼재 데이터 정렬
한자나 영문이 섞인 조직 목록을 가나다순으로 정렬할 때, 한글 부분의 초성만 추출해 정렬 키로 사용하면 한글·비한글 항목을 일관되게 정렬할 수 있다.
마무리
이 글에서 정리한 기준을 실제 작업에 적용할 때는 [텍스터브 글자수 세기](/tools/char-counter/) 도구로 분량을 직접 확인하면서 진행하면 더 정확하게 맞출 수 있다.