콘텐츠로 이동

사전 갱신·품질 관리

사전 갱신 주기와 품질 관리 — 어떻게 최신성을 유지하나

바른의 내장 사전들은 서버가 직접 만들어내지 않습니다. 학습 트랙에서 사전을 생성한 뒤 배포 과정을 거쳐 서버에 실려 옵니다. 이 글은 사전이 어떻게 갱신되고, 빠른 시작과 품질을 위해 어떤 장치를 두는지 설명합니다.

생성 → 배포 — 두 트랙의 분업

바른은 사전을 만드는 학습 트랙과 사전을 읽어 추론하는 서비스(서버)가 나뉘어 있습니다. 새 어휘를 반영하려면 학습 트랙에서 사전을 다시 만들어 배포해야 합니다.

graph LR
  SRC[말뭉치·사전 원본] --> BUILD[학습 트랙에서 사전 생성];
  BUILD --> DEPLOY[배포 목록에 등록];
  DEPLOY --> FETCH[서버가 기동 시 내려받기];
  FETCH --> SERVER[서버가 사전 로드];
  SERVER --> INFER[형태소 분석·교정];

사전은 설치 파일에 들어 있지 않습니다

모델과 사전은 설치 파일에 담기지 않고, 서버가 처음 실행될 때 자기 버전에 맞는 것을 내려받아 데이터 영역에 저장합니다. 그래서 새 사전이 나와도 다시 설치할 필요가 없습니다. 지금 무엇을 쓰고 있는지 확인하거나 새 모델로 바꾸는 방법은 모델 업데이트를 보세요.

사전 생성 원천
dict.res 학습된 토큰 색인
ext-dict.fb 성씨·수량·위키 등 확장 어휘
urimal-dict.fb 우리말샘 어휘
onterm-dict.fb 온용어 전문용어
word-freq.gob 말뭉치 빈도 집계(10시간+ 소요)

왜 서버가 직접 안 만드나요

사전을 만드는 일은 큰 말뭉치를 다루는 무거운 작업입니다. 빈도 사전 하나만 해도 빌드에 10시간이 넘게 걸립니다. 이런 작업을 추론 서버가 떠안으면 서비스가 느려지므로, 무거운 생성은 학습 트랙이 맡고 서버는 완성된 사전만 빠르게 읽습니다.

빠른 시작을 위한 저장 형식

사전은 크기가 커서 매번 처음부터 읽어 자료구조를 만들면 서버 시작이 느립니다. 바른은 저장 형식과 캐싱으로 시작을 빠르게 합니다.

  • FlatBuffer + mmap: 내장 사전은 .fb(FlatBuffer) 형식으로 저장되고 mmap으로 매핑됩니다. 파일을 통째로 읽어 들이는 과정이 없어, 사전이 커져도 시작 시간이 늘지 않습니다. 확장(ext-dict.fb)·한자(hanja-dict.fb)·외래어(foreign-exam-dict.fb)·비표준어 (non-std-dict.fb)·우리말샘(urimal-dict.fb)·온용어(onterm-dict.fb) 사전이 모두 이 방식입니다.
  • 굽는 시점에 미리 정리: 정렬·색인처럼 조회에 필요한 준비를 사전을 만드는 단계에서 끝내 둡니다. 서버는 준비된 구조를 그대로 조회만 합니다.
  • gob 캐싱: 오타 후보를 찾는 BK-tree처럼 사전에서 파생되는 보조 자료는 gob으로 캐싱해, 다음 시작 때 다시 만들지 않고 불러옵니다.

BK-tree 버전 관리

오타 후보를 찾는 BK-tree는 우리말샘을 바탕으로 만들어지며, 버전을 함께 관리합니다(예: v1.2.0). 사전이나 트리 구조가 바뀌면 버전을 올려, 캐시된 옛 트리를 새것으로 바꾸도록 합니다.

최신성과 안정성의 균형

어휘는 학습 트랙에서 말뭉치·원본 사전을 갱신해 최신성을 유지하고, 서버는 캐싱과 버전 관리로 빠르고 일관된 동작을 보장합니다. 생성과 추론을 나눈 구조가 이 균형을 가능하게 합니다.

자주 묻는 질문

Q. 사전은 누가, 어떻게 갱신하나요?

학습 트랙이 말뭉치와 사전 원본을 바탕으로 사전을 다시 만들고, 배포 과정을 거쳐 서버에 실립니다. 추론 서버는 완성된 사전을 읽기만 합니다.

Q. 사전이 커서 서버 시작이 느리지 않나요?

내장 사전은 FlatBuffer(.fb) 형식이라 mmap으로 매핑만 하고 바로 조회합니다. 파일을 통째로 읽어 자료구조를 다시 만드는 과정이 없어, 사전이 커져도 시작 시간이 늘지 않습니다. 사전에서 파생되는 보조 자료(BK-tree 등)는 gob 캐시에서 불러옵니다.

Q. BK-tree는 어떻게 최신 상태를 유지하나요?

BK-tree는 우리말샘 사전 기반으로 만들어지고 버전(예: v1.2.0)으로 관리됩니다. 구조가 바뀌면 버전을 올려 캐시된 옛 트리 대신 새 트리를 사용하도록 합니다.

Q. 새 어휘나 신조어를 사전에 반영하려면 어떻게 하나요?

내장 사전의 어휘를 늘리려면 학습 트랙에서 말뭉치·원본 사전을 갱신해 사전을 다시 만들고 배포해야 합니다. 당장 특정 단어를 인식시켜야 한다면, 사용자 사전을 CustomDictionaryService API로 등록하는 방법이 빠릅니다. 사용자 사전 파일은 바이너리이므로 UpdateCustomDictionary로 반영합니다.

Q. 사전을 갱신하면 형태소 분석과 맞춤법 검사기가 모두 영향을 받나요?

dict.res·ext-dict.fb처럼 모든 빌드에 들어가는 사전은 형태소 분석에 영향을 주고, 우리말샘·비표준어·외래어·한자·온용어·빈도 사전은 맞춤법 검사기를 포함하는 빌드에서만 쓰이므로 교정 동작에 영향을 줍니다.

도움이 되었나요?