
고객 서비스, 금융, 인사 및 법무 워크플로에서 사용되는 문서에는 이름, 이메일 주소, 전화번호, 집 주소, 계좌 번호 및 기타 민감한 정보가 포함되는 경우가 많습니다. 이러한 파일을 공유, 보관 또는 분석에 사용하기 전에 식별 가능한 콘텐츠를 제거하거나 교체해야 할 수 있습니다.
전통적인 마스킹 프로그램은 미리 정의된 검색 규칙과 각 문서 형식에 대한 별도의 처리 로직에 의존합니다. AI 에이전트 SDK는 또 다른 접근 방식을 제공합니다. 개발자는 자연어로 마스킹 요구 사항을 설명할 수 있으며, 에이전트가 민감한 정보를 식별하고 해당 Office 문서 요소를 수정할 수 있습니다. 이 문서에서는 원래 구조와 서식을 유지하면서 C#에서 Word, Excel 및 PowerPoint 파일을 마스킹하는 방법을 보여 줍니다.
문서 마스킹이란 무엇인가?
문서 마스킹은 공개해서는 안 되는 정보를 제거하거나 교체하는 프로세스입니다. 일반적인 마스킹 대상은 다음과 같습니다.
- 개인 이름
- 이메일 주소
- 전화 및 팩스 번호
- 집 또는 우편 주소
- 생년월일
- 고객 및 직원 식별자
- 은행 및 계좌 번호
- 기타 기밀 정보 또는 개인 식별 정보
편집 가능한 Office 파일의 경우 마스킹은 단순 텍스트 변경 이상을 포함합니다. 민감한 콘텐츠는 Word 단락과 표, Excel 셀, PowerPoint 도형, 머리글, 바닥글 또는 기타 문서 요소에 나타날 수 있습니다. 유용한 마스킹 워크플로는 주변 레이아웃, 스타일, 이미지, 차트 또는 문서 구조를 불필요하게 변경하지 않으면서 탐지된 값을 제거해야 합니다.
C#에서 Office 문서를 마스킹하는 세 가지 방법
일반적인 구현 접근 방식에는 전통적인 문서 API, 직접 LLM 통합, AI 에이전트 SDK의 세 가지가 있습니다.
전통적인 API 기반 마스킹
전통적인 구현은 일반적으로 정확한 텍스트 교체 또는 정규식으로 시작합니다. 예를 들어, Spire.Doc for .NET은 Word 문서에서 텍스트 찾기 및 바꾸기를 위한 API를 제공합니다.
다음의 단순화된 의사 코드는 규칙 기반 마스킹 워크플로를 보여 줍니다. 의도적으로 불완전하며 애플리케이션이 처리해야 하는 주요 책임만 보여 줍니다.
Document document = new Document();
document.LoadFromFile("Input.docx");
// Patterns must be defined and maintained by the developer.
Regex emailPattern = new Regex("...");
Regex phonePattern = new Regex("...");
Regex accountPattern = new Regex("...");
document.Replace(emailPattern, "[REDACTED]");
document.Replace(phonePattern, "[REDACTED]");
document.Replace(accountPattern, "[REDACTED]");
// Additional logic may still be required for different content containers.
foreach (Section section in document.Sections)
{
ProcessParagraphs(section);
ProcessTables(section.Tables);
ProcessHeadersAndFooters(section.HeadersFooters);
ProcessTextBoxes(section);
}
document.SaveToFile("Redacted.docx", FileFormat.Docx);
이 접근 방식은 민감한 값이 예측 가능한 패턴을 따를 때 잘 작동합니다. 이메일 주소, 전화번호 및 표준화된 식별 번호는 종종 정규식으로 찾을 수 있습니다.
정보가 컨텍스트에 의존할 때 난이도가 높아집니다. 프로그램은 단어가 사람 이름인지, 숫자가 계좌 번호인지 송장 번호인지, 위치가 개인 주소인지 공개 회사 주소인지 판단해야 할 수 있습니다. 또한 개발자는 Word, Excel 및 PowerPoint에 대해 서로 다른 순회 및 교체 로직을 추가해야 합니다.
직접 LLM 통합
대규모 언어 모델은 정규식 모음보다 컨텍스트를 더 효과적으로 이해할 수 있습니다. 예를 들어, 이름이 예측 가능한 패턴을 따르지 않더라도 문장에서 사람 이름을 인식할 수 있습니다.
그러나 LLM은 완전한 Office 문서 처리를 자동으로 제공하지 않습니다. 직접 통합은 일반적으로 애플리케이션이 다음을 수행해야 합니다.
- 모든 관련 문서 요소에서 텍스트를 추출합니다.
- 콘텐츠를 적절한 요청으로 나눕니다.
- 추출된 텍스트를 모델로 보냅니다.
- 모델의 결과를 원래 단락, 셀 또는 도형에 다시 매핑합니다.
- 서식을 잃지 않고 민감한 콘텐츠를 교체합니다.
- 수정된 파일을 원래 형식으로 저장합니다.
문서가 모델로 전송되기 전에 일반 텍스트로 변환되면 표, 텍스트 범위, 글꼴, 정렬 및 기타 레이아웃 속성에 대한 정보가 손실될 수 있습니다. 따라서 개발자는 모델의 의미론적 결과를 Office 문서 개체 모델에 연결할 책임이 있습니다.
AI 에이전트 SDK
AI 에이전트 SDK는 자연어 이해와 문서 처리 기능을 결합합니다. 모든 탐지 규칙을 정의하고 모든 교체 단계를 수동으로 조정하는 대신, 개발자는 문서를 제공하고 원하는 결과를 설명합니다.
Spire.Agent.Office는 Spire.Office for .NET의 기본 기능을 사용하여 Word, Excel 및 PowerPoint 개체와 작업합니다. 예를 들어 Word 문서에서 처리 계층은 섹션, 단락, 텍스트 범위, 표, 셀, 머리글, 바닥글, 이미지, 하이퍼링크 및 해당 서식에 액세스할 수 있습니다. 모델은 민감한 콘텐츠를 식별하고 문서 API는 해당 요소를 수정합니다.
이러한 개체 수준 처리를 통해 문서의 주변 구조와 스타일을 유지하면서 텍스트를 교체할 수 있습니다.
전통적 API vs. LLM vs. AI 에이전트 SDK
| 접근 방식 | 컨텍스트 탐지 | 서식 보존 | 다중 형식 구현 | 개발 노력 | 적합한 용도 |
|---|---|---|---|---|---|
| 전통적 API 및 정규식 | 추가 NLP 로직을 추가하지 않으면 제한적 | 강력하고 제어 가능 | 일반적으로 별도 로직 필요 | 높음 | 고정 패턴 및 매우 결정적인 규칙 |
| 직접 LLM 호출을 사용하는 Office API | 강력함 | 개발자가 구현해야 함 | 각 형식에 대해 추출 및 쓰기 되돌리기 로직 필요 | 매우 높음 | 완전히 사용자 지정된 AI 파이프라인 |
| AI 에이전트 SDK | 강력함 | 문서 인식 처리를 통해 처리됨 | 공통 지침을 여러 Office 형식에 적용 가능 | 낮음 | 적은 오케스트레이션 코드로 컨텍스트 인식 마스킹 |
전통적인 접근 방식은 모든 마스킹 대상이 알려진 패턴을 따르고 애플리케이션이 엄격하게 결정적인 동작을 요구할 때 여전히 유용합니다. Agent SDK 접근 방식은 문서에 다양하고 상황에 맞는 정보가 포함되어 있거나 동일한 워크플로가 여러 Office 형식을 지원해야 할 때 더 매력적입니다.
C# 프로젝트 설정
C# 콘솔 애플리케이션을 만들고 Spire.Agent.Office 및 필요한 종속성을 프로젝트에 추가합니다. 또한 AI 처리를 위한 유효한 SpireToken이 필요합니다.
아래 예제는 다음 형식을 지원합니다.
- Word: DOC 및 DOCX
- Excel: XLS 및 XLSX
- PowerPoint: PPT 및 PPTX
PDF는 이 예제에 포함되지 않습니다.
AI 에이전트로 Word, Excel 및 PowerPoint 문서 마스킹
다음 코드는 확장자에서 원본 형식을 확인하고 적절한 Office 문서 개체를 로드한 후 동일한 마스킹 지침을 AI 프로세서에 전달합니다.
using Spire.Agent.Office.AI;
using Spire.Agent.Office.Extensions;
using Spire.Presentation;
using Spire.Doc;
using Spire.Xls;
string inputPath = @"E:\Documents\Input.docx";
string outputPath = @"E:\Documents\Redacted.docx";
string spireToken = "your spireToken";
string instruction = """
Find personal information such as names, email addresses, phone numbers, addresses,
account numbers, and other sensitive information. Replace the detected content with
“[REDACTED]” while preserving the original document structure and formatting.
""";
// Configure the AI processing options
AIOptions options = new AIOptions();
options.SpireToken = spireToken;
// Select the appropriate document object according to the file extension
string extension = Path.GetExtension(inputPath).ToLower();
if (extension == ".doc" || extension == ".docx")
{
using (Document document = new Document())
{
document.LoadFromFile(inputPath);
AIDocumentProcessor processor = document.AI(options);
processor.ExecuteInstruction(
document,
instruction,
outputPath,
Array.Empty<string>());
}
}
else if (extension == ".xls" || extension == ".xlsx")
{
using (Workbook workbook = new Workbook())
{
workbook.LoadFromFile(inputPath);
AIDocumentProcessor processor = workbook.AI(options);
processor.ExecuteInstruction(
workbook,
instruction,
outputPath,
Array.Empty<string>());
}
}
else if (extension == ".ppt" || extension == ".pptx")
{
using (Presentation presentation = new Presentation())
{
presentation.LoadFromFile(inputPath);
AIDocumentProcessor processor = presentation.AI(options);
processor.ExecuteInstruction(
presentation,
instruction,
outputPath,
Array.Empty<string>());
}
}
프로젝트에서 암시적 전역 using이 비활성화된 경우 Array 및 Path를 위해 using System; 및 using System.IO;도 추가하세요.
입력, 출력 및 지침 정의
inputPath는 원본 문서를 지정하고, outputPath는 마스킹된 파일이 저장될 위치를 지정합니다. 결과가 원래 형식으로 유지되도록 입력 및 출력 확장자가 일치해야 합니다.
자연어 지침은 탐지 범위와 필요한 수정 사항을 모두 정의합니다. 이 예제에서 에이전트는 일반적인 유형의 개인 정보를 검색하고 이를 [REDACTED]로 교체합니다.
더 좁은 워크플로에 맞게 지침을 조정할 수 있습니다. 예를 들어:
Find email addresses, phone numbers, and customer account numbers. Replace each detected value with “[REDACTED]”. Do not redact company names, product names, invoice numbers, or dates. Preserve the original layout and formatting.
문서에 개인 계좌 번호와 유사한 비즈니스 식별자가 포함된 경우 명시적 제외를 추가하면 오탐을 줄일 수 있습니다.
AI 처리 구성
AIOptions는 AI 처리 서비스에서 사용하는 SpireToken을 저장합니다:
AIOptions options = new AIOptions();
options.SpireToken = spireToken;
동일한 옵션 개체를 Word, Excel 또는 PowerPoint 문서 인스턴스와 함께 사용할 수 있습니다.
적절한 문서 유형 선택
프로그램은 파일 확장자를 읽고 해당 개체를 만듭니다:
- Word 파일의 경우
Document - Excel 파일의 경우
Workbook - PowerPoint 파일의 경우
Presentation
각 개체는 AI() 확장 메서드를 노출합니다. 이는 로드된 문서에 대해 자연어 지침을 실행하는 AIDocumentProcessor를 반환합니다.
빈 첨부 파일 배열은 지침에 지원 파일이 필요하지 않음을 나타냅니다:
processor.ExecuteInstruction(
document,
instruction,
outputPath,
Array.Empty<string>());
마스킹 결과
Word 테스트 문서에서 민감한 정보는 일반 단락, 고객 정보 표 및 페이지 바닥글에 나타났습니다. 처리 후 이름, 이메일 주소, 전화번호, 주소 및 계좌 정보가 [REDACTED]로 교체되었습니다.
표 구조, 단락 서식, 제목, 색상 및 바닥글 레이아웃은 그대로 유지되었습니다. 이 결과는 워크플로가 문서를 단순히 일반 텍스트로 추출한 후 처음부터 다시 작성하는 것이 아님을 보여 주기 때문에 중요합니다. 주변 구조를 유지하면서 관련 문서 요소를 수정합니다.

AI 마스킹 시 중요한 고려 사항
공유하기 전에 결과 검토
AI 마스킹은 완벽하게 결정적이지 않습니다. 모델이 드문 식별자를 놓치거나 일반 콘텐츠를 민감한 정보로 잘못 분류할 수 있습니다. 외부 배포용 문서는 처리 후 검토해야 하며, 특히 법률, 금융, 의료 또는 규정 준수에 민감한 워크플로에서는 더욱 그렇습니다.
지침을 구체적으로 작성
지침은 제거해야 할 항목과 유지해야 할 항목을 모두 설명해야 합니다. 송장 번호, 회사 이름, 제품 코드 또는 공공 기관 주소를 마스킹하지 않아야 한다면 해당 제외 항목을 명시적으로 기재하세요.
표시되는 교체가 항상 완전한 정리인 것은 아님
표시되는 텍스트를 교체한다고 해서 파일에서 해당 정보의 모든 복사본이 반드시 제거되는 것은 아닙니다. 민감한 데이터는 다음에도 나타날 수 있습니다.
- 주석 및 변경 내용 추적
- 문서 속성 및 메타데이터
- 숨겨진 워크시트 또는 숨겨진 슬라이드
- PowerPoint 발표자 노트
- 포함된 파일 및 개체
- 텍스트가 포함된 이미지
- 이전 버전 또는 백업 복사본
고보안 워크플로의 경우 이러한 위치를 별도로 검사해야 합니다. 문서에 스캔한 페이지나 스크린샷이 포함된 경우 이미지 내부의 텍스트를 평가하기 전에 OCR이 필요할 수 있습니다.
원본 파일 보존
원본 문서를 덮어쓰지 말고 마스킹된 결과를 새 경로에 저장하세요. 파일을 별도로 유지하면 출력을 비교하고, 누락된 콘텐츠를 조사하고, 개선된 지침으로 프로세스를 반복하기가 더 쉽습니다.
결론
전통적인 API 기반 마스킹은 정밀한 제어를 제공하지만, 개발자는 탐지 규칙을 정의하고 다양한 문서 형식과 콘텐츠 컨테이너에 대해 별도의 순회 로직을 유지해야 합니다. 직접 LLM 통합은 컨텍스트 인식을 개선하지만, Office 서식을 보존하기 위해 상당한 추출, 매핑 및 쓰기 되돌리기 계층이 여전히 필요합니다.
AI 에이전트 SDK는 이러한 기능을 하나로 모읍니다. 하나의 자연어 지침과 소량의 C# 코드로 동일한 워크플로가 Word, Excel 및 PowerPoint 파일을 처리하고, 컨텍스트에 맞는 민감한 정보를 식별하며, 원래 문서 구조 내에서 이를 교체할 수 있습니다. 결과는 여전히 검토해야 하지만, 전체 탐지 및 문서 오케스트레이션 파이프라인을 수동으로 구축하는 것보다 구현이 훨씬 간단합니다.
자주 묻는 질문
동일한 코드로 Word, Excel 및 PowerPoint 파일을 마스킹할 수 있나요?
예. 예제는 입력 파일 확장자에 따라 Document, Workbook 또는 Presentation을 선택하고 각 형식에 동일한 자연어 지침을 적용합니다.
AI 에이전트가 원본 서식을 보존하나요?
에이전트는 기본 Office 문서 개체와 함께 작동하므로 주변 구조와 서식을 유지하면서 단락, 셀, 표 및 도형 내의 민감한 텍스트를 교체할 수 있습니다. 매우 복잡한 레이아웃은 추가 확인이 필요할 수 있으므로 최종 출력은 여전히 확인해야 합니다.
다른 마스킹 레이블을 사용할 수 있나요?
예. 지침의 [REDACTED]를 [PRIVATE], [REMOVED] 또는 [EMAIL REDACTED]와 같은 범주별 값으로 변경하세요.
전통적인 API가 AI 마스킹보다 더 나은 경우는 언제인가요?
모든 민감한 값이 고정 패턴을 따르고, 규칙이 거의 변경되지 않으며, 결과가 완전히 결정적이어야 할 때 전통적인 API가 더 바람직할 수 있습니다. 정규식 교체는 표준화된 이메일 주소, 전화번호 또는 식별 번호에 종종 충분합니다.
텍스트를 교체하면 문서를 게시해도 안전한가요?
아니요. 표시되는 텍스트 교체는 주석, 변경 내용 추적, 메타데이터, 숨겨진 콘텐츠, 포함된 개체, 이미지 내부 텍스트 또는 이전 파일 버전을 자동으로 제거하지 않습니다. 보안에 민감한 문서는 게시 전에 추가 검사와 검증이 필요합니다.