개발도구

가루(Garu) — 브라우저에서 바로 도는 1.4MB 한국어 형태소 분석기

newflix 2026. 7. 27. 04:17

가루(Garu) — 브라우저에서 바로 도는 1.4MB 한국어 형태소 분석기

가루(Garu)

서버 없이, npm 한 줄로 시작하는 초경량 한국어 NLP. WebAssembly로 클라이언트에서 형태소 분석·명사 추출·토큰화를 수행하고, MiniSearch·Orama 검색 품질까지 끌어올립니다.


TL;DR

  • WASM 100% 클라이언트 — 분석 서버 없이 브라우저·Node·Bun·Deno에서 동일 API로 동작
  • 1.4MB 모델 + 172KB(gzip) 엔진 — 모바일 웹·PWA·브라우저 확장에도 부담이 적음
  • 골드 테스트셋 F1 95.8% — 9,000문장 검증, 2025 구어 held-out F1 91.0%
  • 검색 라이브러리 드롭인 — MiniSearch·Orama용 토크나이저로 조사·활용형 매칭 문제 해결
  • MIT 오픈소스npm install garu-ko, 상업 이용 가능, GitHub 159★ 규모 커뮤니티

핵심 정보 한눈에 보기

항목 내용
서비스명 가루(Garu)
npm 패키지 garu-ko (v0.9.11)
카테고리 개발도구 / 한국어 NLP
플랫폼 웹, Node.js, Bun, Deno, Electron, 브라우저 확장
모델 크기 1.4MB (brotli 코드북) + WASM 엔진 401KB (gzip 172KB)
정확도 F1 95.8% (v15k 골드 9,000문장) / F1 91.0% (2025 구어 held-out)
품사 체계 국립국어원 세종 태그셋 42종
라이선스 MIT (상업 이용 가능)
공식 사이트 garu.zerry.co.kr
저장소 github.com/ongjin/garu
newflix 등록일 2026년 5월 29일

어떤 문제를 풀까?

한국어 NLP의 첫 관문은 거의 항상 형태소 분석입니다. 영어처럼 공백만으로 단어를 나눌 수 없고, 조사·어미가 어근에 달라붙는 교착어이기 때문입니다. "학교에"와 "학교", "먹었다"와 "먹다"를 같은 단위로 다루려면 품사 태깅이 필요합니다.

문제는 기존 선택지가 무겁다는 점입니다. Mecab-ko, Kiwi, Komoran 같은 분석기는 정확도가 높지만 수십 MB급 모델·네이티브 바인딩·Python/Java 런타임을 전제로 하는 경우가 많습니다. 프론트엔드 검색창, 오프라인 PWA, 브라우저 확장, 사내 인트라넷처럼 서버를 띄우기 어렵거나 텍스트를 외부로 보내고 싶지 않은 환경에서는 도입 비용이 급격히 커집니다.

가루(Garu)는 이 간극을 노립니다. Rust 엔진을 WebAssembly로 컴파일하고, 1.4MB 코드북 모델을 npm에 번들해 별도 CDN·백엔드·네이티브 모듈 없이 형태소 분석·명사 추출·토큰화를 제공합니다. 사용자 입력이 기기 밖으로 나가지 않으니 프라이버시에도 유리합니다.


라이브 데모 — 입력 즉시 품사 태깅

가루 메인 데모 — 형태소 분석·명사 추출·토큰화 탭과 텍스트 입력창

공식 데모 홈: 텍스트 입력 후 형태소 분석 / 명사 추출 / 토큰화 결과를 바로 확인

공식 데모 에 접속하면 설치 없이 바로 시험할 수 있습니다. 상단 배지에 버전·모델 크기·F1 점수가 표시되고, 일상 대화부터 뉴스·기술·속담까지 100개 넘는 예시 문장을 클릭해 넣을 수 있습니다.

예를 들어 "배가 아파서 약을 먹었다"를 분석하면 대략 다음처럼 세종 태그로 나뉩니다.

  • 배/NNG, 가/JKS, 아프/VA, 어서/EC, 약/NNG, 을/JKO, 먹/VV, 었/EP, 다/EF

탭을 바꾸면 같은 문장에서 명사만 뽑거나, 후속 파이프라인용 토큰 리스트만 받을 수 있습니다. 데모 자체가 제품의 핵심 메시지—서버 없이, 가볍게, 바로—를 보여 줍니다.


핵심 기능 딥다이브

1) 형태소 분석 (analyze)

입력 문자열을 형태소 단위로 분리하고 세종 42종 품사 태그를 붙입니다. 반환 토큰에는 표면형(text), 품사(pos), 어절 오프셋(start/end)이 포함됩니다.

import { Garu } from 'garu-ko';

const garu = await Garu.load();
const result = garu.analyze('배가 아파서 약을 먹었다');
console.log(result.tokens);
// [{ text: '배', pos: 'NNG', ... }, { text: '가', pos: 'JKS', ... }, ...]

엔진은 신경망이 아닙니다. 코드북 + 어절 캐시 + 문장 단위 N-best Trigram Viterbi + 문맥 후처리 규칙 + 재순위 perceptron 조합으로 결정적(deterministic) 출력을 내므로, 동일 입력에 대해 재현 가능한 결과가 필요한 검색·규칙 기반 파이프라인에 맞습니다. 문장당 추론은 대략 ~1ms 수준으로 소개됩니다.

2) 명사 추출 (nouns)

일반명사(NNG)·고유명사(NNP)를 뽑아 키워드·태그 클라우드·자동 태깅에 씁니다. includeSL 옵션으로 AI, BM25 같은 외국어(SL) 토큰도 함께 잡을 수 있습니다.

3) 토큰화 (tokenize)

품사 없이 표면형 문자열 배열만 필요할 때 가벼운 API입니다. 검색 인덱스 필드에 바로 넣거나, 후속 임베딩 전처리에 쓰기 좋습니다.

4) 오프라인·프라이버시

초기 로드 이후 네트워크 없이 동작합니다. Service Worker로 WASM·모델을 캐시하면 완전 오프라인 PWA나 브라우저 확장에서도 동일하게 쓸 수 있고, 사용자 텍스트가 분석 서버로 전송되지 않습니다.


실전 활용 시나리오

가루 활용 사례 페이지 — 검색 인덱싱·키워드 추출·챗봇 전처리 코드 예제

활용 사례 문서: 풀텍스트 검색, 명사 추출, 감성 전처리, 챗봇 정규화, 오프라인 PWA 레시피

공식 활용 사례 페이지가 정리한 대표 패턴은 다음과 같습니다.

  1. 한국어 풀텍스트 검색 인덱싱tokenize() 결과를 색인 필드로 넣어 조사·활용형 때문에 깨지던 재현율을 개선
  2. 명사·키워드 추출 / 태그 클라우드 — NNG·NNP 필터 후 빈도 집계
  3. 텍스트 마이닝·감성 분석 전처리 — VV·VA·MAG 등 품사만 골라 자질로 사용
  4. 챗봇·검색 UI 입력 정규화 — "아파요 / 아픕니다 / 아프다"처럼 이형태를 어근 단위로 맞추기
  5. 오프라인 PWA·브라우저 확장·Electron — 서버 의존 없이 기기 내 분석

프론트엔드 팀 입장에서는 "Python 마이크로서비스를 하나 더 띄울지" 고민 없이, 번들에 실을지만 결정하면 됩니다.


검색 통합 — MiniSearch & Orama

한국어 검색에서 기본 토크나이저의 고질적 문제는 단순합니다. 공백 분리 기준으로는 "먹다"가 "먹었다"를, "학교"가 "학교에"를 못 잡습니다. 가루는 인기 JS 검색 라이브러리용 드롭인 토크나이저를 제공합니다.

MiniSearch × 한국어 비교 데모 — 기본 토크나이저 vs garu-minisearch-tokenizer

MiniSearch 데모: 기본 토크나이저와 가루 토크나이저의 매칭 차이를 나란히 비교

Orama × 한국어 비교 데모 — 기본 토크나이저 vs garu-orama-tokenizer

Orama 데모: 동일 검색어로 기본/가루 토크나이저 결과를 실시간 비교

import { create, insert, search } from '@orama/orama';
import { createTokenizer } from 'garu-orama-tokenizer';

const db = await create({
 schema: { title: 'string' },
 components: { tokenizer: await createTokenizer() },
});
await insert(db, { title: '학교에서 점심을 먹었다' });
await search(db, { term: '먹다' }); // 형태소 분석 덕분에 매칭

문서 검색, 도움말 센터, 사내 위키, 블로그 검색처럼 클라이언트 또는 엣지에서 한국어 검색 품질을 올리고 싶을 때 가장 체감이 큰 기능입니다.


가격 정책

가루 자체는 무료 오픈소스(MIT) 입니다. npm 설치·상업 제품 내장에 별도 라이선스 비용이 없습니다. 비용이 생긴다면 모델 다운로드·번들 용량·실행 환경(브라우저 메모리) 쪽이지, SaaS 구독 요금은 없습니다.

항목 내용
라이선스 MIT
사용료 없음 (셀프 호스트 / 클라이언트 번들)
모델 호스팅 npm 패키지에 포함 (기본), 커스텀 modelUrl / modelData 가능
지원 런타임 브라우저 ESM, Node.js, Bun, Deno, Electron 등

엔터프라이즈 지원 계약이나 유료 SaaS API가 필요한 조직이라면 전통적 서버형 분석기·상용 NLP API를 병행하는 편이 맞고, 프론트·엣지·오프라인 경로에는 가루가 잘 맞습니다.


경쟁 서비스 비교

비교 항목 가루(Garu) Kiwi / Mecab-ko 계열 클라우드 NLP API
실행 위치 브라우저·JS 런타임 (WASM) 서버·네이티브 바인딩 원격 API
모델 크기 ~1.4MB 수십 MB급 흔함 서버 측
설치 npm i garu-ko 네이티브 빌드/바이너리 API 키
오프라인 초기 로드 후 가능 가능 (로컬 설치 시) 불가
프라이버시 텍스트 외부 전송 없음 자체 호스팅 시 양호 벤더로 전송
검색 연동 MiniSearch·Orama 공식 어댑터 별도 연동 필요 검색 제품과 별개
정확도 경량 대비 높음 (골드 F1 95.8%) 상위권 데스크톱 분석기 모델·언어에 따라 상이
비용 무료(MIT) 무료/오픈소스 다수 호출량 과금

가루를 고를 때: 프론트엔드 검색, PWA, 브라우저 확장, "서버 없이 바로"가 우선일 때.
Kiwi·Mecab 계열을 고를 때: 배치 파이프라인·최고 정확도·기존 Python/Java 스택이 이미 있을 때.
클라우드 API를 고를 때: 운영 부담을 줄이고 다국어·NER 등 상위 기능을 한 번에 살 때.


장단점 요약

장점

  • 초경량 — 1.4MB 모델로 프론트 번들에 실을 수 있는 현실적 크기
  • 서버 불필요 — 인프라 비용·콜드스타트·CORS 이슈를 줄임
  • 프라이버시 — 분석 텍스트가 기기 밖으로 나가지 않음
  • 검색 품질 개선이 쉬움 — MiniSearch·Orama 토크나이저로 조사·활용형 매칭 해결
  • 결정적 출력 — 신경망 없이 규칙·통계 파이프라인이라 재현성이 좋음
  • MIT + 활발한 릴리스 — v0.9.11, GitHub 스타 150+ 규모, 상용 부담 적음

단점

  • 아직 0.x — 프로덕션 전에 도메인 말뭉치로 오분석 케이스를 검증할 필요
  • 데스크톱 풀스택 분석기 대비 한계 — 극단적 전문 용어·희귀 신조어 커버리지는 대형 모델이 유리할 수 있음
  • 번들 용량 트레이드오프 — 1.4MB는 가볍지만, 초경량 랜딩 페이지에는 여전히 부담일 수 있음
  • 한국어 특화 — 다국어 형태소 분석이 필요하면 별도 도구 조합 필요
  • NER·의존 구문 등 상위 NLP는 범위 밖 — 형태소·명사·토큰화에 집중

이런 팀에 추천

  • 한국어 인앱/문서 검색을 MiniSearch·Orama·자체 인덱스로 돌리는 프론트·풀스택 팀
  • 사용자 입력을 서버로 보내기 꺼리는 프라이버시·규제 민감 서비스
  • 오프라인·간헐 연결 환경의 PWA·확장 프로그램·Electron 제품
  • "형태소 분석 서버 하나 더"를 피하고 싶은 스타트업·사이드 프로젝트

반대로 대용량 배치 코퍼스 처리, 법률·의료 특화 사전, 다국어 파이프라인이 핵심이라면 서버형 분석기나 상용 API와 역할을 나누는 편이 안전합니다.


총평

가루(Garu)는 "한국어 형태소 분석을 꼭 서버에서 해야 하나?"라는 질문에 WASM과 1.4MB 모델로 아니오라고 답하는 도구입니다. 정확도를 데스크톱 분석기 근처까지 끌어올리면서도, npm 한 줄과 브라우저 데모만으로 체험·도입이 가능합니다. 특히 MiniSearch·Orama 연동은 한국어 검색 UX를 바로 체감할 수 있는 강점입니다.

newflix에 등록된 한국어 NLP 개발도구 중에서도 프론트엔드 친화적·오프라인 가능·검색 연동 완비라는 조합이 뚜렷합니다. 검색창·챗봇 전처리·키워드 추출을 가볍게 붙이고 싶다면 데모부터 돌려 볼 가치가 충분합니다.

더 자세한 큐레이션 메모와 관련 서비스 추천은 newflix 페이지에서 확인할 수 있습니다.

https://newflix.io/s/zerry

X에 공유하기 newflix 홈