브라우저에서 만나는 한국어 텍스트 분석, 글눈
한국어 텍스트는 조사나 어미 변화로 인해 일반적인 분석 도구에서 정확한 통계 추출이 어렵다. 이러한 한계를 극복하고자 글눈(Geulnun)은 한국어 형태소 분석 기능을 브라우저 환경에서 구현한 오픈소스 웹서비스를 선보인다. 서버 전송 없이 사용자의 컴퓨터 안에서 텍스트를 분석하며, 언어 교육 및 문해 환경에 최적화된 경험을 제공한다.
한국어 텍스트 분석의 고유한 난제와 글눈의 해법
기존 텍스트 분석 도구는 주로 영어 등 어미 변화가 적은 언어에 맞춰 개발되었다. 이로 인해 한국어 문장을 분석할 때 “학교가”, “학교를”, “학교에서”를 각각 독립된 단어로 인식한다. 이는 한국어의 특징인 조사와 어미 때문이다. 글눈은 이러한 문제에 대한 해결책을 제시한다.
이 서비스는 Kiwi 형태소 분석기를 활용한다. 조사나 어미를 분리하고 단어의 순수한 형태, 즉 형태소만을 추출하여 텍스트를 정확하게 센다.
| 특징 | 일반 텍스트 분석 도구 | 글눈(Geulnun) |
|---|---|---|
| “학교” 분석 | “학교가” 1회, “학교를” 1회, “학교에서” 1회로 각각 센다 | “학교” 3회로 정확히 센다 |
| “갔다” 분석 | “갔다”를 한 덩어리로 인식한다 | “가”(동사 어간) + “었”(선어말어미) + “다”(종결어미)로 분해한다 |
글눈은 기존 보얀트 툴스(Voyant Tools)의 인터페이스를 계승하면서도, 한국어 교육 및 문해 환경에 특화된 기능을 추가하여 무료 오픈소스 웹서비스로 개발되었다.
글눈의 핵심 기능들
글눈은 사용자에게 강력하고 유연한 텍스트 분석 경험을 제공하는 여러 핵심 기능을 통합한다.
- 100% 클라이언트 사이드 분석: 모든 텍스트 분석 작업은 사용자의 브라우저 내부에서 이루어진다. Kiwi 형태소 분석기가 WASM(WebAssembly) 형태로 브라우저 안에서 직접 작동한다. 따라서 사용자의 문서가 서버로 전송되지 않아 높은 보안성을 보장한다. 외부 네트워크 요청 0건을 e2e 테스트로 검증한다.
- 5패널 실시간 연동: 워드클라우드에서 특정 단어를 클릭하면 해당 단어의 빈도 추이, 용례 색인(KWIC), 원문 리더, 요약 패널이 동시에 업데이트된다. 이러한 연동 갱신은 500밀리초 게이트로 테스트에 묶여 있으며, 연어(collocates) 및 문서 비교 기능은 별도 탭으로 제공한다.
- 융합 음절까지 정확한 하이라이트: “갔다”(가+었+다)나 “ㅂ니다”와 같이 축약되거나 자모가 분해된 형태도 정확하게 형태소의 원문 위치 범위로 짚어 리더에 색칠한다. 단순 문자열 매칭으로는 불가능한 수준의 정밀도다.
- 다양한 문서 포맷 파서 내장: 한글 공문서 표준인 HWPX(ZIP+XML) 파일의 표 셀 내부 내용까지 재귀적으로 추출한다. 이외에도 TXT, DOCX, PDF 파일 형식을 지원한다. 무거운 파서들은 필요한 시점에만 동적으로 불러와(dynamic import) 초기 서비스 진입 속도를 가볍게 유지한다.
- 대용량 텍스트 처리 성능: 30만 어절에 달하는 대규모 텍스트도 UI 지연 없이 처리한다. 토큰을 객체 배열이 아닌 컬럼나 타입 배열(Columnar Typed Array)인 TokenTable에 저장하고, 분석은 웹 워커에서 청크 단위로 병렬 처리한다. 스트레스 테스트는 30만 어절 분석 완료 및 메인 스레드 Long Task 100밀리초 게이트를 기준으로 삼는다.
- 공유 및 오프라인 접근성(PWA): 분석 작업 상태를 프로젝트 파일(JSON)로 저장하거나, 압축된 URL 링크로 공유한다. 여기에는 코퍼스, 불용어, 필터, 선택 단어 등의 모든 설정이 포함된다. 형태소 모델은 서비스 워커(Service Worker)가 캐시하여 두 번째 접속부터는 인터넷 연결 없이도 오프라인에서 서비스를 이용한다.
- 네오 브루탈리즘 UI: 굵은 테두리, 하드 섀도우, 원색 대비를 특징으로 하는 UI 디자인을 적용한다. 워드마크는 음절 타일과 Geulnun 뱃지로 구성하고, 본문 글꼴은 프리텐다드(Pretendard)를 사용한다.
5초 만에 글눈 시작하기
별도의 설치 과정 없이 웹사이트(geulnun.vercel.app)에 접속하여 데모 대시보드를 누르면 된다. 이 대시보드에서는 김유정 작가의 「동백꽃」(1936)에 대한 사전 분석 결과를 모델 다운로드 없이 즉시 보여준다. 이렇게 기능을 먼저 파악한 뒤 사용자의 문서를 업로드하여 분석하면 된다.
글눈은 네 종류의 내장 예시 코퍼스를 제공한다. 모두 퍼블릭 도메인으로 위키문헌에서 수집한 자료다.
- 이효석 「메밀꽃 필 무렵」
- 제헌헌법(대한민국헌법 제1호)
- 3·1 독립선언서
- 제19대 대통령 취임사
아키텍처와 기술 스택
글눈의 처리 흐름은 사용자의 문서 입력으로 시작한다. Drag & Drop 또는 HWPX, PDF, DOCX, TXT 등 다양한 형식으로 문서가 들어오면 ingest 파서가 동적 임포트되어 내용을 분석한다. zod 검증을 거쳐 (10MB 또는 50문서 제한) 웹 워커에서 Kiwi WASM을 활용한 청크 단위 분석이 이루어진다. 분석 결과는 TokenTable이라는 컬럼나 타입 배열에 저장되고, 이 데이터를 zustand 전역 스토어가 보관하면 5개 패널이 실시간으로 동시에 구독한다.
소스 코드는 src/analysis/ (순수 분석 계층), src/corpus/ (입력 및 스토어), src/panels/ (5개 패널), src/share/ (공유 기능), src/app/ (애플리케이션 셸), e2e/ (테스트) 등으로 구조화되어 있다.
글눈은 React 19, TypeScript 5.9, Vite 8을 기반으로 개발되었다. Kiwi WASM 0.21.0 형태소 분석 엔진을 사용하며, 앱 코드는 MIT 라이선스를 따른다.
개발 환경 설정은 npm install 후 npm run fetch-model 명령으로 Kiwi v0.21.0 모델(약 35MB)을 다운로드한다. 이 모델은 public/model/ 경로에 저장되며, 이후 npm run dev로 개발 서버를 실행한다.
구조주의 관점에서 본 언어와 의미
구조주의는 언어, 문화, 사회 현상의 표면적 다양성 이면에 존재하는 보편적인 규칙과 구조를 탐구한다. 글눈이 한국어 문장에서 조사나 어미 같은 가변적인 요소를 제거하고 단어의 본질적인 형태소만을 분석하는 방식은 구조주의적 접근과 맥락을 같이 한다. 이는 겉으로 드러나는 복잡한 형태 이면에서 의미를 구성하는 최소 단위이자 근원적인 구조를 찾아내려는 시도로 볼 수 있다. 텍스트 분석이라는 실용적 도구가 언어의 심층 구조를 해명하려는 철학적 탐구와 맞닿아 있다는 점이 흥미롭다.
출처
- 글눈(Geulnun) 라이브 서비스 — https://geulnun.vercel.app
- 소스 코드 저장소 tigerjk9/voyant-tools — https://github.com/tigerjk9/voyant-tools