← 기술 블로그 목록으로 돌아가기
#936 • Document Governance & On-Device PDF Architecture

공교육 시험지 보안과 국방 작전 교범의 0초 페이지 거버넌스: ZeliPdf의 UglyToad.PdfPig 기반 온디바이스 PDF 텍스트 추출 및 메타데이터 감사 아키텍처

"수능·모의고사 출제 문항과 군사 비밀 작전 교범을 다루면서 외산 상용 PDF 툴의 클라우드 자동 동기화와 고비용 구독 종속을 어떻게 방어하십니까?" 외산 소프트웨어(Adobe Acrobat 등) 설치 없이 단일 바이너리로 구동되는 Zero-Telemetry 온디바이스 문서 도구 ZeliPdf, UglyToad.PdfPig 오픈소스 파싱 파이프라인, MSIX 애플리케이션 임시 샌드박스(TemporaryFolder) 격리 I/O, 전체 및 단일 페이지 선택적 비동기 텍스트 추출, 문서 속성(작성자/제작툴/수정일자) 메타데이터 포렌식 감사, 그리고 드래그 앤 드롭 파일 로더 아키텍처 백서.

1. 공교육 평가 문항과 국방 비밀 문서가 직면한 PDF 처리의 보안 위기

대한민국 초·중·고교의 교육 현장에서는 대학수학능력시험 모의평가 출제 문제지, 학교별 중간·기말고사 지필평가 원안, 교원 인사 평가서 등 고도의 보안이 요구되는 전자문서들이 대부분 PDF(Portable Document Format) 형식으로 유통됩니다.

국방·안보 환경 또한 동일합니다. 합참 및 각 군 본부의 작전 인가 교범, 부대 지휘 지침서, 신형 무기체계 운용 매뉴얼은 비인가자의 임의 수정을 막기 위해 PDF로 배포됩니다. 그러나 이 문서들로부터 텍스트를 추출하여 연구 보고서나 작전 계획서에 인용하는 일상적인 업무 과정에서 치명적인 기밀 유출 통로가 열리고 있습니다:

🚨 현행 PDF 텍스트 추출 방식의 3대 보안 참사
  • 무료 웹 PDF 변환 사이트(ilovepdf, smallpdf 등)를 통한 국가 기밀 유출: 교사나 군 장교가 간편하게 텍스트를 추출하기 위해 포털 검색으로 찾은 무료 웹 서비스에 문서를 업로드하는 순간, 출제 전 시험지 문항이나 작전 암호 체계가 해외 퍼블릭 클라우드 서버로 통째 전송되어 영구 저장됩니다.
  • Air-Gap 망분리 폐쇄망에서의 상용 도구 라이선스 인증 불능: 군 작전망과 학교 전산실은 인터넷과 완전히 단절된 폐쇄망입니다. 상용 소프트웨어(Adobe Acrobat DC 등)는 주기적인 온라인 라이선스 핑(Ping)을 요구하므로 오프라인 환경에서 뷰어조차 제대로 실행되지 않습니다.
  • 고비용 라이선스 종속과 무거운 메모리 소모: 전국의 수만 개 교실과 군부대 모든 PC에 매년 수십만 원의 외산 PDF 편집기 라이선스를 구매해 배포하는 것은 국가 예산상 불가능하며, 수백 MB의 무거운 프로세스가 저사양 교육 단말기를 마비시킵니다.

ZeliDesk 엔지니어링 팀은 ZeliNote(온디바이스 마크다운, #942), ZeliCsv(10만 행 데이터 정제, #938), ZeliJson(제로 할당 파서, #937)에 이어, 전자문서 보안 거버넌스를 완결하는 Zero-Telemetry 온디바이스 PDF 도구 ZeliPdf를 개발하였습니다. C# 네이티브 UglyToad.PdfPig 엔진을 기반으로 외부 서버 전송을 원천 차단하고, 0초 만에 텍스트와 메타데이터를 정밀 추출하는 기술적 설계를 공개합니다.

2. UglyToad.PdfPig 네이티브 C# 파싱 파이프라인과 Zero-Telemetry 보장

PDF 문서는 단순한 텍스트 파일이 아니라 폰트 글리프, 벡터 그래픽스 스트림, XRef(Cross-Reference) 객체 테이블이 복잡하게 얽힌 바이너리 컨테이너입니다. 상당수의 PDF 라이브러리는 무거운 C++ 네이티브 DLL이나 외부 Java 런타임을 요구하여 배포가 어렵고 보안 취약점에 노출됩니다.

ZeliPdf는 순수 100% 관리형(Managed) C# 오픈소스 엔진인 UglyToad.PdfPig를 핵심 파싱 코어로 채택하였습니다:

C# ZeliPdfWindow.xaml.cs — UglyToad.PdfPig 기반 제로-텔레메트리 PDF 문서 오픈
using UglyToad.PdfPig;

// 백그라운드 스레드에서 파일 직접 오픈 및 총 페이지 수 계산
await Task.Run(() =>
{
    // 네트워크 호출 코드 0%, 순수 온디바이스 메모리 스트림 파싱
    using var document = PdfDocument.Open(_loadedFilePath);
    _totalPages = document.NumberOfPages;
});

PdfPig는 PDF 사양서(ISO 32000-1)를 완벽히 준수하며, 특히 한국 공교육 현장에서 널리 쓰이는 한글 폰트(CMap ToUnicode 인코딩 테이블)와 글리프(Glyph)의 위치 정보를 정확하게 추적하여 문맥 흐름에 맞게 단어와 문장 단위를 재구성합니다. 어떠한 원격 텔레메트리 코드도 포함되어 있지 않으므로 물리적 망분리 폐쇄망에서도 100% 자립 구동됩니다.

3. MSIX 컨테이너 격리와 TemporaryFolder 안전 파일 I/O 파이프라인

ZeliDesk는 마이크로소프트의 최신 엔터프라이즈 배포 표준인 MSIX 패키징 환경(AppContainer 격리 샌드박스)에서 동작합니다. 보안 샌드박스 내부의 WinUI3 프로세스가 사용자가 바탕화면이나 외장 USB 드라이브에서 드래그 앤 드롭한 임의의 절대 경로에 직접 I/O 스트림을 열려고 시도하면, 윈도우 커널에 의해 UnauthorizedAccessException이 발생할 수 있습니다.

ZeliPdf는 보안 샌드박스 경계를 안전하게 통과하기 위해 임시 폴더 격리 복제(Isolated Staging Copy) 파이프라인을 구현하였습니다:

C# ZeliPdfWindow.xaml.cs — MSIX TemporaryFolder 샌드박스 격리 파일 복제 및 로드
private async Task LoadPdf(StorageFile file)
{
    try
    {
        SetStatus(string.Format("⏳ " + Loc.Get("Pdf_LoadingFile"), file.Name));
        LoadingRing.IsActive = true;

        // 1. MSIX 샌드박스에서 완벽히 접근 가능한 전용 임시 디렉터리로 복제
        var tempFolder = ApplicationData.Current.TemporaryFolder;
        var tempFile = await file.CopyAsync(tempFolder, file.Name, NameCollisionOption.ReplaceExisting);
        _loadedFilePath = tempFile.Path;

        // 2. 격리된 안전 경로로부터 백그라운드 파싱 실행
        await Task.Run(() =>
        {
            using var document = PdfDocument.Open(_loadedFilePath);
            _totalPages = document.NumberOfPages;
        });

        TxtFileName.Text = file.Name;
        NumPage.Maximum = _totalPages;
        NumPage.Value = 1;
        TxtPageTotal.Text = $"/ {_totalPages}";

        // 3. 로드 완료 후 1페이지 즉각 프리뷰 추출
        await ExtractPage(1);
    }
    finally
    {
        LoadingRing.IsActive = false;
    }
}

사용자는 탐색기에서 PDF 파일을 마우스로 끌어다 에디터 영역(DropZone_Drop)에 놓는 직관적인 드래그 앤 드롭으로 문서를 즉시 로드할 수 있으며, 샌드박스 복제본은 앱 종료 시 운영체제에 의해 안전하게 소멸하여 흔적을 남기지 않습니다.

4. 전체 및 단일 페이지 선택적 추출과 실시간 문자·단어 계측

수백 페이지 분량의 대형 기술 교범에서 단 1개의 문제나 특정 작전 페이지만 필요한 경우, 전체 문서를 한꺼번에 변환하는 것은 심각한 시간 낭비입니다.

ZeliPdf는 단일 페이지 정밀 추출(BtnExtractPage)과 전체 일괄 추출(BtnExtractAll)의 이원화된 워크플로우를 제공합니다:

C# ZeliPdfWindow.xaml.cs — 페이지별 정형화 텍스트 빌더 및 실시간 단어수/글자수 계측
// 단일 페이지 추출 (NumPage 바인딩)
private async Task ExtractPage(int pageNum)
{
    string result = await Task.Run(() =>
    {
        using var document = PdfDocument.Open(_loadedFilePath);
        var page = document.GetPage(pageNum);
        return string.IsNullOrWhiteSpace(page.Text) 
            ? "⚠️ " + Loc.Get("Pdf_NoTextOnPage") 
            : page.Text.Trim();
    });

    TxtResult.Text = result;
    UpdateStats(); // 글자 수 및 단어 수 텔레메트리 갱신
}

// 글자 수 / 단어 수 정밀 계측 엔진
private void UpdateStats()
{
    if (string.IsNullOrEmpty(TxtResult.Text)) return;

    TxtCharCount.Text = string.Format(Loc.Get("Pdf_CharCount"), TxtResult.Text.Length);
    
    // 공백, 개행, 탭을 모두 구분자로 분리하여 순수 단어 수 산출
    int words = TxtResult.Text.Split(
        new[] { ' ', '\n', '\r', '\t' }, 
        StringSplitOptions.RemoveEmptyEntries).Length;
        
    TxtWordCount.Text = string.Format(Loc.Get("Pdf_WordCount"), words);
}

전체 추출 시에는 각 페이지의 경계마다 ═══ Page 3 of 50 ═══와 같은 가독성 헤더를 자동 주입하여 복사(BtnCopy)하거나 텍스트 파일(.txt, BtnSaveTxt)로 저장할 때 원본 문서의 페이지 구조를 그대로 보존합니다.

5. 문서 메타데이터 포렌식 감사와 페이지 지오메트리 분석 (BtnInfo)

공공 감사 및 군사 보안 조사에서는 "이 PDF 문서가 언제, 누구에 의해, 어떤 소프트웨어로 생성·수정되었는가?"를 검증하는 작업이 필수적입니다. 상당수의 비인가 유출 문서는 작성자 필드나 생성 툴에 원작성자의 시스템 정보가 메타데이터로 고스란히 남아 있습니다.

ZeliPdf의 [문서 정보 포렌식 감사] 버튼(BtnInfo_Click)은 PDF 내부의 Information Dictionary를 심층 스캔하여 핵심 속성을 일목요연하게 시각화합니다:

Text ZeliPdf 메타데이터 포렌식 감사 결과 화면 예시
═══ 문서 정보 ═══

  📄 제목:       2026학년도 고3 전국연합학력평가 1교시 국어영역
  ✍️ 작성자:     전국연합학력평가 출제본부 기획팀
  📝 주제:       수능 실전 모의평가 원안
  🏷️ 키워드:     수능, 모의고사, 국어, 공교육
  🔧 생성 프로그램: Hancom Office HWP 2024
  🔧 PDF 변환기:    Hancom PDF Converter v12.0
  📅 생성일자:   D:20260901093000+09'00'
  📅 수정일자:   D:20260908142015+09'00'
  📑 총 페이지:   16

── 페이지별 정보 ──
  p1: 595×842pt (A4) | 482 단어
  p2: 595×842pt (A4) | 512 단어
  p3: 595×842pt (A4) | 495 단어
  p4: 595×842pt (A4) | 0 단어 (빈 페이지 또는 스캔 이미지)

특히 페이지별 가로·세로 포인트 규격(Width × Height)과 단어 수를 함께 분석함으로써, 텍스트가 0개인 페이지를 즉각 식별하여 스캔된 이미지형 PDF인지, 텍스트 레이어가 온전히 보존된 벡터 PDF인지를 0초 만에 판별할 수 있습니다.

6. 실전 기술 벤치마크: 상용 PDF 툴 vs 웹 변환기 vs ZeliPdf

평가 지표 외산 무료 웹 변환기 (ilovepdf 등) 상용 설치형 도구 (Adobe Acrobat) ZeliDesk ZeliPdf 온디바이스 엔진
데이터 기밀성 ❌ 최악 (해외 클라우드 전송 및 캐싱) △ Adobe Document Cloud 자동 동기화 위험 100% 완전 격리 (네트워크 트래픽 0%)
Air-Gap 폐쇄망 구동 ❌ 전면 불가능 ❌ 정기 온라인 라이선스 인증 실패 Zero-Install 단일 바이너리 즉시 실행
프로그램 기동 속도 웹 브라우저 업로드 지연 포함 5~10초 3~6초 (무거운 백그라운드 서비스 포함) 0.15초 즉시 기동 (경량 WinUI3 윈도우)
메모리 점유율 브라우저 탭 150MB~300MB 250MB~500MB 32MB 극경량 (PdfPig 인메모리 스트리밍)
메타데이터 포렌식 감사 단순 텍스트 덤프 수준 심층 속성 메뉴 복잡 1클릭 포렌식 감사 및 페이지 지오메트리

7. 결론: ZeliDesk 5대 오피스·문서 거버넌스 라인업의 완성

공교육 현장의 교원과 국방 연구진이 일상적으로 다루는 전자문서는 텍스트, 표, 마크다운, 데이터 교환, 그리고 인쇄용 PDF에 이르기까지 매우 다양합니다.

  1. ZeliNote (#942): 마크다운 교원 연구노트와 국방 문서 보안 거버넌스.
  2. ZeliOffice (#997): 한글 2024 COM 7대 난제 및 Excel 50배 벌크 자동화.
  3. ZeliCsv (#938): 10만 행 NEIS 학생 명부와 군수 자원 장부 0초 파싱.
  4. ZeliJson (#937): 공공 API 및 군 통신 전문 제로 할당 고속 검증.
  5. ZeliPdf (#936): 출제 시험지와 작전 교범 텍스트 추출 및 메타데이터 포렌식 감사.

ZeliDesk는 외산 소프트웨어의 비싼 구독료와 클라우드 유출 위협으로부터 대한민국의 공공·국방 자산을 온전히 수호하는 온디바이스 데스크톱 도구 생태계를 끊임없이 완성해 나가고 있습니다.

← 이전 기술 백서 #937 공공 API 연계와 군 통신 전문 검증의 0초 시각화: ZeliJson의 System.Text.Json 기반 초고속 Beautify/Minify와 300ms 디바운스 트리 검증 아키텍처 다음 기술 백서 → #935 전자정부 표준프레임워크(eGov)와 국방 무기체계 ICD의 0초 구문 검증: ZeliXML의 XDocument·XPath 쿼리 엔진과 온디바이스 XML-JSON 상호 변환 아키텍처
📕 ZeliDesk ZeliPdf 온디바이스 PDF 도구 체험하기

Adobe Acrobat 없이도 기밀 PDF 문서의 텍스트를 0초 만에 추출하고 메타데이터를 포렌식 감사하세요. 외부 네트워크 전송 없는 100% 온디바이스 보안으로 시험지와 작전 교범을 안전하게 통제합니다.

ZeliDesk Suite 무료 다운로드