1. 서론: 군사 작전망과 초·중·고 시험 출제 현장의 치명적 위협 — 번역 SaaS를 통한 기밀 유출
정보화 시대의 공공 기관, 국방 부대, 그리고 초·중·고등학교에서 번역 작업은 일상적인 업무입니다. 국방 작전 교범, 연합 훈련 브리핑, 해외 방산 기술 문서, 그리고 일선 학교의 중간·기말고사 외국어 시험지 출제 과정에서 교사와 군 장교들은 끊임없이 외국어 문서를 다룹니다.
그러나 구글 번역(Google Translate), 딥엘(DeepL), 파파고(Papago), 챗GPT(ChatGPT)와 같은 퍼블릭 클라우드 SaaS 번역기를 사용하는 순간, 사용자가 복사해 붙여넣은 텍스트는 암호화되지 않은 페이로드로 글로벌 클라우드 서버에 전송되며, 인공지능 모델의 재학습 데이터셋으로 저장될 수 있습니다. 실제로 국가정보원과 교육청 감사에서 시험지 출제 문항 및 군사 기밀이 퍼블릭 AI 웹사이트로 전송되어 보안 사고로 적발되는 사례가 매년 반복되고 있습니다.
ZeliDesk의 온디바이스 지능형 번역기인 ZeliTranslate는 이러한 국가적 안보 위협을 근본적으로 해결하기 위해 탄생했습니다. LAN 선을 완전히 뽑은 물리적 폐쇄망(Air-Gapped) 환경에서도 완벽히 구동되며, 로컬 NPU/GPU 및 CPU만을 활용하여 텍스트를 인메모리에서 직접 번역하는 완전 격리 아키텍처를 제공합니다.
2. ZeliTranslate 하이브리드 토폴로지: 온디바이스 완전 격리 vs 클라우드 폴백 체계
ZeliTranslate는 사용자의 하드웨어 사양과 네트워크 보안 등급에 맞춰 두 가지 구동 엔진을 유연하게 스위칭할 수 있는 듀얼 토폴로지(Dual Topology)를 채택했습니다.
🛡️ ZeliTranslate 2대 번역 파이프라인
- 온디바이스 로컬 엔진 (기본값, Zero-Network):
llama-cli.exe상주 프로세스를 기반으로 로컬에 다운로드된 GGUF 양자화 모델(Qwen2.5, Llama-3.2 등)을 직접 추론합니다. 물리적 소켓 연결이 전무하며 네트워크 패킷 발생량 0바이트를 보장합니다. - 클라우드 AI 엔진 (선택형 옵션): 사용자가 직접 발급받은 프라이빗 API 키(OpenAI, Bedrock 등)를 입력했을 때만 활성화되는 고정밀 번역 엔진입니다.
AiService.ChatStreamAsync를 통해 SSE(Server-Sent Events) 스트리밍 청크를 수신합니다.
특히 일선 학교 및 군부대의 기본 배포 프로필에서는 네트워크 송수신이 원천 차단된 온디바이스 로컬 엔진이 기본값으로 강제 설정되어 보안 관리자의 안심을 보장합니다.
3. 3계층 모델 레지스트리(Model Registry) 동적 프로빙: AppContext ➔ LocalAppData ➔ DevTree
로컬 번역 엔진이 작동하려면 2~4GB 크기의 최적화된 양자화 GGUF 모델과 이에 대한 메타데이터가 필요합니다. 하지만 패키징 배포(MSIX), 일반 압축 풀기(Unpackaged), 개발자 빌드 환경(Visual Studio / IDE)마다 실행 파일과 데이터 경로가 완전히 상이합니다.
ZeliTranslate는 단일 경로 하드코딩으로 인한 런타임 Null 크래시를 방지하기 위해 3계층 계단식 모델 레지스트리 프로빙(3-Tier Fallback Model Registry Probing)을 구현했습니다.
// ZeliTranslateWindow.xaml.cs 발췌
private static Dictionary<string, (string DisplayName, string Url, string FileName, long SizeBytes)> LoadModelRegistry()
{
string exeDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
?? AppContext.BaseDirectory;
// 1순위: 앱 BaseDirectory (MSIX 및 배포 패키지 루트)
string jsonPath = System.IO.Path.Combine(AppContext.BaseDirectory, "model_registry.json");
// 2순위: %LOCALAPPDATA%\ZeliDesk\model_registry.json (사용자 정의 커스텀 오버라이드)
if (!System.IO.File.Exists(jsonPath))
jsonPath = System.IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),
"ZeliDesk", "model_registry.json");
// 3순위: 소스 트리 상대 경로 (개발 및 디버그 환경 전용)
if (!System.IO.File.Exists(jsonPath))
jsonPath = System.IO.Path.GetFullPath(
System.IO.Path.Combine(exeDir, "..", "..", "..", "ZeliTranslate", "model_registry.json"));
// JSON 무결성 역직렬화 및 불변 딕셔너리 구성...
}
뿐만 아니라 이미 다운로드된 GGUF 모델을 탐색할 때도 %LOCALAPPDATA%\ZeliDesk\sLM, %LOCALAPPDATA%\ZeliDesk\models, 심지어 외부 개발자 도구인 LM Studio의 캐시 디렉터리(~/.cache/lm-studio/models)까지 중복 없이 자동 스캔하여 사용자가 이미 보유한 가중치를 즉시 재활용할 수 있도록 지원합니다.
4. 상주 세션(-cnv)과 Stdin UTF-8 파이프 스트리밍: 모델 재로딩 없는 0초 번역
온디바이스 LLM/sLM을 데스크톱 유틸리티에서 구동할 때 가장 치명적인 성능 병목은 모델 로딩 시간(Cold Start)입니다. 매번 사용자가 번역 버튼을 누를 때마다 3GB 크기의 GGUF 가중치를 디스크에서 RAM/VRAM으로 읽어 들이면 3~7초의 끔찍한 지연이 발생합니다.
ZeliTranslate는 llama-cli를 단순 일회성 커맨드로 실행하지 않고, 대화 모드 플래그(-cnv)를 지정하여 백그라운드 상주 추론 세션(Resident Inference Session)으로 유지합니다.
// 상주 세션 재활용 판별 로직
if (_sessionActive && _inferenceProcess != null && !_inferenceProcess.HasExited && _sessionModelPath == modelPath)
{
AppendLog($"[{Loc.Get("Trans_LogSession")}] {Loc.Get("Trans_ReuseSession")}
---
");
await SendPromptAndWaitAsync(prompt);
return;
}
// 최초 실행 시에만 프로세스 생성 (온도 0.1, 컨텍스트 4096, GPU 99레이어 오프로딩)
var psi = new ProcessStartInfo
{
FileName = llamaPath,
Arguments = $"-m "{modelPath}" -cnv -n 2048 -t 4 -c 4096 --temp 0.1 --repeat-penalty 1.1 -ngl 99 -sysf "{sysFile}"",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
CreateNoWindow = true,
StandardOutputEncoding = Encoding.UTF8
};
모델이 한 번 메모리에 적재되고 나면(출력 스트림의 > 프롬프트 감지), 이후의 모든 번역 요청은 프로세스 재생성 없이 proc.StandardInput.BaseStream.WriteAsync() 파이프를 통해 0.001초 만에 인메모리로 전송됩니다. 여러 줄의 텍스트가 입력되더라도
을 \
(줄 끝 역슬래시 이스케이프)으로 정규화하여 -cnv 대화 모드가 문맥을 온전히 인식하도록 완벽하게 처리했습니다.
5. 비동기 캔슬레이션과 TOCTOU 경쟁 상태 방어: 세션 수명주기 샌드박스
멀티스레드 기반의 WinUI 3 데스크톱 앱에서 외부 프로세스를 제어할 때 가장 빈번하게 발생하는 버그는 TOCTOU(Time-Of-Check to Time-Of-Use) 경쟁 상태와 좀비 프로세스 누수입니다.
사용자가 긴 텍스트 번역을 시작한 직후 [취소] 버튼을 누르거나 번역 창을 닫아버리면, 백그라운드의 llama-cli가 CPU/GPU를 100% 점유한 채 시스템 자원을 고갈시킬 위험이 있습니다. ZeliTranslate는 이를 방어하기 위해 4중 안전망을 구축했습니다.
🔒 ZeliTranslate 세션 수명주기 4중 방어막
- 로컬 변수 캡처(Local Capture): 클래스 멤버
_inferenceProcess를 즉시 로컬 변수var proc = _inferenceProcess;로 복사한 후 null 검사를 수행하여 비동기 스레드 간 참조 해제 레이스를 완벽 차단합니다. - CancellationToken 전파: 사용자가 취소를 요청하면
_cts.Cancel()이 즉시 파이프 쓰기 및 대기 루프(Task.Delay(200, token))로 전파되어 최대 120초의 블로킹 지연 없이 즉시 제어권을 반환합니다. - 전체 프로세스 트리 종료(Kill Entire Process Tree): 창 종료 이벤트(
Window.Closed) 발생 시_inferenceProcess.Kill(entireProcessTree: true)를 호출하여 파생된 콘솔 서브프로세스까지 남김없이 소멸시킵니다. - 일시적 파일 자동 정돈: 시스템 프롬프트(
zeli_translate_sys.txt)와 다운로드 임시 파일(.downloading)을finally및 취소 블록에서 즉각 삭제하여 디스크 찌꺼기를 남기지 않습니다.
6. 4대 언어 유니코드 판별 휴리스틱과 실시간 스트림 파서(CleanStreamOutput)
사용자가 출발 언어를 [자동 감지]로 설정했을 때, 외부 웹 API를 호출하지 않고도 입력 텍스트의 언어를 판별해야 진정한 폐쇄망 격리 번역이 완성됩니다.
ZeliTranslate는 외부 머신러닝 라이브러리의 무거운 오버헤드 없이, 순수 유니코드 코드포인트 빈도 카운팅(Unicode CodePoint Heuristics)을 통해 0.0001초 만에 언어를 판별합니다.
// 초고속 인메모리 언어 자동 감지 알고리즘
private static string DetectLanguage(string text)
{
if (string.IsNullOrEmpty(text)) return "en";
int kor = 0, eng = 0, jpn = 0, chn = 0;
foreach (char c in text)
{
if (c >= 0xAC00 && c <= 0xD7AF) kor++; // 한글 완성형
else if (c >= 0x3040 && c <= 0x30FF) jpn++; // 일본어 히라가나·가타카나
else if (c >= 0x4E00 && c <= 0x9FFF) chn++; // 한자(CJK 통합 한자)
else if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z')) eng++;
}
int max = new[] { kor, eng, jpn, chn }.Max();
if (max == 0) return "en";
if (max == kor) return "ko";
if (max == jpn) return "ja";
if (max == chn) return "zh";
return "en";
}
또한 llama-cli의 표준 출력에는 터미널 ANSI 색상 코드, 프롬프트 에코, 토큰 생성 속도 통계([ 18.52 t/s ]), 시스템 토큰(<|im_end|>) 등 번역 본문 외의 불필요한 메타 문자열이 혼입됩니다. ZeliTranslate의 스트림 파서(CleanStreamOutput)는 정규식과 슬라이딩 윈도우 필터를 통해 이를 실시간으로 정제하여 사용자 인터페이스에는 오직 순수한 번역문만을 출력합니다.
7. 결론: 단 1바이트의 패킷도 남기지 않는 공공·국방 보안 번역의 미래
ZeliTranslate는 단순한 번역기를 넘어, 국가 안보와 공교육의 핵심 자산을 지키는 최후의 프라이버시 방어선입니다.
인터넷이 차단된 작전 상황실이나 시험 출제 본부에서도 고성능 온디바이스 NMT·sLM 모델을 통해 완벽한 다국어 번역을 수행할 수 있으며, 상주 세션(-cnv) 기반의 프로세스 파이프라인 덕분에 상용 웹 번역기 수준의 빠른 응답성을 경험할 수 있습니다.
ZeliDesk 팀은 앞으로도 72종 데스크톱 유틸리티 생태계 전반에 걸쳐 외부 클라우드 의존성을 최소화하고, 모든 데이터가 사용자의 로컬 머신 안에서 안전하게 처리되는 온디바이스 퍼스트(On-Device First) 엔지니어링 철학을 변함없이 지켜나갈 것입니다.