.NET 엔터프라이즈 앱에서 문서 뷰어 보안을 고려하기
← Back to Blog7 min read

.NET 엔터프라이즈 앱에서 문서 뷰어 보안을 고려하기

Introduction

Doconut과 함께 임베드된 .NET 문서 뷰어의 보안 아키텍처
Doconut과 함께 임베드된 .NET 문서 뷰어의 보안 아키텍처

.NET 기반 문서 뷰어를 구축한다는 것은 처음부터 보안을 고민해야 함을 의미합니다. 엔터프라이즈 .NET 앱에 뷰어를 임베드할 때 가장 큰 질문은 사용자에게 풍부하고 인터랙티브한 경험을 제공하면서 콘텐츠를 어떻게 비밀로 유지할 것인가 입니다. DMS, 고객 포털, 법률‑테크 워크플로우를 구축하든, 보기 파이프라인의 모든 단계에서 지적 재산, 개인 데이터, 규제‑필수 정보를 보호해야 합니다. 이 글에서는 시니어 개발자와 아키텍트를 대상으로 가장 흔한 공격 벡터, 위험을 낮추는 아키텍처 선택, 그리고 Doconut의 범용 문서 뷰어가 어떻게 모든 문서‑중심 .NET 솔루션의 안전한 기반으로 설계되었는지 설명합니다.


1. 임베드된 뷰어에 대한 위협 환경

아름답게 디자인된 UI라도 뷰어가 데이터를 유출하거나 신뢰할 수 없는 코드를 실행한다면 공격 표면이 됩니다. 아래는 가장 흔히 마주하게 될 세 가지 위협 카테고리입니다.

위협일반적인 구현 형태비즈니스 영향
데이터 유출직접 다운로드 링크, 보안되지 않은 API, 혹은 브라우저에 원시 바이트를 전송하는 클라이언트‑사이드 렌더링기밀 계약 손실, 개인 식별 정보(PII) 유출, 규제 벌금
크로스‑사이트 스크립팅(XSS) 및 인젝션PDF 또는 Office 파일 내부에 악성 마크업이 포함되어 렌더링 시 스크립트가 실행세션 탈취, 자격 증명 도난, 랜섬웨어 피벗
무단 조작사용자가 주석을 추가·수정한 뒤 감사 로그 없이 파일을 내보내는 경우법적 분쟁, 위조 기록, 규정 위반

뷰어는 PDF, DOCX, DWG 등 복잡한 포맷을 렌더링하고 주석OCR 같은 기능을 지원해야 하므로 코드 경로가 늘어나고 공격 표면도 커집니다. 첫 번째 방어선은 신뢰할 수 있는 서버‑사이드 처리제어된 클라이언트‑사이드 인터랙션을 명확히 구분하는 것입니다.


2. .NET에서 서버‑사이드와 클라이언트‑사이드 렌더링

왜 서버‑사이드가 중요한가

  • 데이터 노출 제로 – 원본 파일이 신뢰된 백엔드를 떠나지 않으며, 렌더링된 이미지 또는 안전한 HTML 조각만 브라우저로 전송됩니다.
  • 중앙 집중식 정책 적용 – 암호화, 레드액션, 시각적 마킹을 문서가 사용자에게 도달하기 전에 일관되게 적용할 수 있습니다.
  • 확장 가능한 격리 – 무거운 변환(예: CAD DWG를 래스터 이미지로 변환)은 격리된 백그라운드 작업으로 실행되어 침해된 요청이 미치는 영향을 제한합니다.

클라이언트‑사이드가 허용되는 경우

  • 지연 시간이 주요 고려사항인 저감도 프리뷰(공개 브로셔 등)
  • 전체 인프라가 에어‑갭되어 있고 클라이언트가 신뢰된 기업 디바이스에서 실행되는 경우

Doconut의 균형 잡힌 아키텍처

Doconut은 무거운 변환, OCR, 주석 준비를 서버에서 수행하고, 가벼운 HTML5 기반 뷰어를 통해 모든 최신 브라우저에서 동작하도록 제공합니다. 뷰어는 서드‑파티 플러그인이 전혀 필요 없으며, 모든 렌더링은 서버‑사이드 Viewer 컴포넌트에서 생성된 스트림을 통해 전달됩니다. 이 설계는 많은 취약 솔루션이 사용하는 “원본 파일 다운로드” 패턴을 완전히 제거합니다.

ASP.NET Core 파이프라인에 Doconut을 등록하는 방법

코드 스니펫 대신, 등록 과정을 Doconut 이미지 엔드포인트(예: DocImage.axd)에 대한 요청을 가로채는 미들웨어 컴포넌트를 추가하는 것으로 생각하세요. 미들웨어는 기존 인증·인가 로직에 따라 각 요청을 검증한 뒤 이미지 스트림을 클라이언트에 전송합니다. 보안 기준을 충족하지 못하는 모든 요청을 거부하도록 미들웨어를 구성하면, 검증된 문서만 렌더링됩니다.


3. 접근 제어, 인증 및 인가 관리

접근 제어 전략

정적 파일 경로나 공개 URL을 노출하는 대신 Doconut을 기존 아이덴티티 제공자와 통합합니다. 사용자가 문서를 요청하면 서버‑사이드 코드는 다음을 수행해야 합니다.

  1. 표준 ASP.NET Core 인증 파이프라인을 통해 사용자의 신원과 역할을 확인합니다.
  2. 추가 비즈니스 로직 검증을 수행합니다(예: 사용자가 올바른 부서에 속해 있는지, 특정 클레임을 가지고 있는지).
  3. 검증이 통과되면 Doconut 뷰어를 호출해 보안 스트림을 생성하고 요청된 문서 페이지를 반환합니다. 이 스트림은 현재 HTTP 요청에 묶여 있어 세션이 종료되면 재사용할 수 없습니다.

주석 권한

Doconut의 Annotation Plugin은 페이지 단위로 동작합니다. 사용자의 권한이 확인된 후 서버는 요청된 페이지에 대해 AnnotationManager를 생성합니다. 사용자가 CanAnnotate와 같은 적절한 클레임을 보유하지 않으면 서버는 읽기 전용 뷰를 반환하고, 주석 변경 시도는 403 응답으로 거부됩니다. 이를 통해 권한이 있는 인원만 리뷰 코멘트를 추가·수정할 수 있습니다.


4. 데이터 유출 방지: 암호화, 시각적 마킹 및 제어된 인쇄

종단 간 암호화

Doconut이 처리하는 모든 문서 스트림은 HTTPS를 통해 전송되며, 저장소(Azure Blob, SQL Transparent Data Encryption 등)에서 암호화됩니다. 뷰어는 래스터화된 페이지만 받으며 원본 파일에 직접 접근할 수 없으므로 클라이언트는 소스 문서를 절대 얻지 못합니다.

주석을 이용한 시각적 마킹(워터마크)

렌더링이 서버에서 수행되므로, 페이지가 브라우저로 전송되기 전에 사용자별 주석(예: 반투명 텍스트 오버레이에 사용자 이름, 이메일, 타임스탬프 포함)을 삽입할 수 있습니다. 이 방식은 스크린샷을 억제하고, 유출 시 포렌식 증거를 제공하며 Doconut이 검증한 주석 기능 내에서 이루어집니다.

제어된 인쇄

많은 기업이 문서를 인증된 디바이스에서만 혹은 복사 횟수를 제한하여 인쇄하도록 요구합니다. Doconut의 Controlled Printing 기능은 서버에서 인쇄 명령을 가로채 사용자의 역할을 검증하고, 필요 시 생성된 PDF에 “Printed on” 메모를 삽입합니다. 인쇄 작업이 서버‑사이드에서 이루어지므로 클라이언트는 마크가 없는 원본을 받지 않습니다.


5. OCR 및 주석에 대한 감사, 로깅, 규정 준수

불변 감사 로그

주석 추가·수정·삭제 각각은 XML 페이로드를 생성하며, 이를 Azure Append Blob이나 불변 테이블에 저장할 수 있습니다. Doconut의 GetAnnotationXml() 메서드는 각 변경 후 정확한 상태를 반환하므로, XML을 타임스탬프와 사용자 식별자와 함께 영구 보관하면 누가 언제 무엇을 어떻게 보았는지를 재구성할 수 있습니다.

안전한 OCR 처리

OCR은 검색 가능한 PDF에 필수이지만, OCR 엔진이 원시 텍스트를 클라이언트에 노출할 위험이 있습니다. Doconut은 OCR을 서버‑사이드에서 수행하고 검색 가능한 인덱스 데이터만 반환합니다. 원본 스캔 이미지는 암호화된 채 유지되며, 검색 텍스트는 읽기 전용 캐시에 저장돼 뷰어와 동일한 요청 수명 주기 규칙을 따릅니다.

규제 준수

모든 처리가 온프레미스(또는 관리형 프라이빗 클라우드)에서 이루어지므로 Doconut은 GDPR, HIPAA, PCI‑DSS와 같이 보호된 데이터를 제3자 SaaS 엔드포인트로 전송하는 것을 금지하는 규정을 충족합니다. 또한 제품 아키텍처는 감사 준비 로그를 지원해 재무·법무·헬스케어 분야의 컴플라이언스 보고서를 크게 간소화합니다.


6. Doconut이 보안 요구사항을 경쟁력으로 전환하는 방법

보안 요구사항Doconut 기능비즈니스 이점
데이터 유출 제로서버‑사이드 변환 및 스트림 기반 렌더링기밀 파일이 신뢰된 환경을 벗어나지 않음
XSS 방지정제된 HTML 출력, 문서에서 클라이언트‑사이드 스크립트 실행 없음추가 코딩 없이 공격 표면 감소
세분화된 권한 부여클레임 인식 미들웨어, 페이지별 주석 매니저기존 RBAC 모델과 일치하고 관리 부담 감소
제어된 인쇄 및 시각적 마킹주석 기반 오버레이가 포함된 인쇄 워크플로우데이터 유출 억제 및 포렌식 추적 가능
감사 가능성GetAnnotationXml(), 요청 스코프 스트림, 서버 로그재무·법무·헬스케어 컴플라이언스 보고서 간소화
확장 가능한 OCR서버‑사이드 OCR 플러그인, JSON 형태 검색 인덱스 반환원시 텍스트 노출 없이 수백만 페이지 즉시 검색
크로스‑플랫폼 제공HTML5 뷰어가 모든 브라우저에서 동작, React, Angular, Vue, Blazor와 통합 가능데스크톱·모바일·키오스크 전반에 걸친 투자 미래 보장

서버에서 무거운 작업을 담당하게 함으로써 Doconut은 비즈니스 로직에 집중할 수 있게 합니다—예를 들어 계약을 다단계 승인 워크플로우로 라우팅하거나 엔지니어링 도면을 안전한 포털에 공개하는 경우 등. 동일 코드베이스가 .NET 6, .NET Core, 최신 .NET 8을 모두 지원하므로 벤더 락‑인 없이 경험을 유지할 수 있습니다.

직접 체험해 보세요 – Doconut은 무료 체험을 제공하며, 여기에는 뷰어, 주석, OCR, 변환 플러그인이 모두 포함됩니다. 몇 분 안에 샘플 ASP.NET Core 앱을 띄우고 보안 모델이 실제로 어떻게 동작하는지 확인해 보세요.


핵심 정리

  • 서버‑사이드 렌더링 및 스트림 기반 전송은 오래된 링크 공격을 방지하고 원본 파일을 신뢰된 경계 안에 유지합니다.
  • 중앙 집중식 정책 적용(암호화, 레드액션, 주석 기반 마킹)은 데이터가 클라이언트에 도달하기 전에 수행됩니다.
  • 세분화된 클레임 검사는 문서 열기 및 주석 활성화 전에 이루어져 기업 RBAC 정책과의 일치를 보장합니다.
  • 제어된 인쇄와 주석 기반 오버레이는 데이터 유출을 억제하고 포렌식 증거를 제공합니다.
  • 불변 감사 로그GetAnnotationXml()을 통해 생성되어 규제 보고를 단순화합니다.
  • HTML5 뷰어는 모든 최신 브라우저에서 동작하므로 React, Angular, Vue, Blazor 프런트엔드와 완벽히 호환됩니다.
  • Doconut의 무료 체험을 통해 보안, 성능, 개발자 경험을 직접 검증한 뒤 도입을 결정할 수 있습니다.

자주 묻는 질문

Q1: Doconut이 Word 또는 Excel 변환을 위해 서버에 Microsoft Office를 설치해야 하나요?
A: 아닙니다. Doconut의 Converter Plugin은 로컬 Office 설치 없이도 모든 Office‑to‑PDF 및 기타 포맷 변환을 서버에서 수행합니다.

Q2: Doconut을 에어‑갭 환경에서 사용할 수 있나요?
A: 가능합니다. Doconut은 문서를 완전히 온프레미스에서 처리하고 외부 SaaS 서비스에 의존하지 않으므로 격리된 네트워크에서도 동작합니다.

Q3: 대용량 파일은 어떻게 처리하나요?
A: Doconut은 필요 페이지만 온디맨드로 스트리밍하므로 메모리 사용량을 최소화합니다. 이 페이지 기반 접근 방식은 백그라운드 작업 및 대규모 워크로드에 적합합니다.

Q4: 뷰어가 장애인 접근성을 지원하나요?
A: HTML5 뷰어는 표준 접근성 관행을 따르며, ARIA 속성을 추가해 WCAG 가이드라인을 충족하도록 확장할 수 있습니다.

Q5: 무료 체험은 어디서 받을 수 있나요?
A: 공식 Doconut 사이트(공식 Doconut 사이트 방문)에서 체험 라이선스를 요청하세요. 체험에는 뷰어, 주석, OCR, 변환 등 모든 핵심 플러그인이 포함됩니다.

#document viewer#security#.NET#enterprise architecture#OCR#annotation#문서 뷰어#보안#엔터프라이즈 아키텍처#주석