ASP.NET Core에서 대용량 문서 렌더링 최적화
← Back to Blog2 min read

ASP.NET Core에서 대용량 문서 렌더링 최적화

속도는 기능이다

사용자가 "문서 보기"를 클릭하면 즉시 로드되길 기대합니다. 3페이지 메모든 5,000페이지 분량의 법률 브리프든, 대기 시간은 허용되지 않습니다. Doconut은 속도를 위해 설계되었지만, 엔터프라이즈 규모 워크로드에서는 구현을 최적화하는 것이 핵심입니다.

1. 스마트 캐싱 전략

  • Disk Caching: 빠른 NVMe 스토리지를 갖춘 싱글 서버 환경에 적합합니다. 렌더링된 페이지는 App_Data에 저장되고 이후 요청 시 정적으로 제공됩니다.
  • Distributed Caching (Redis): 로드 밸런싱된 팜에 필수적입니다. 서버 A가 페이지 5를 렌더링하면 서버 B가 재렌더링 없이 이를 제공할 수 있어야 합니다. Doconut은 Redis 또는 Memcached에 직접 연결할 수 있는 사용자 지정 ICache 구현을 지원합니다.

2. 레이지 로딩 및 가상화

전체 문서를 한 번에 전송하지 마세요. Doconut은 virtualized scrolling 접근 방식을 사용합니다.

  • 보이는 페이지(플러스 작은 버퍼)만 서버에 요청됩니다.
  • 사용자가 스크롤할 때 새로운 페이지를 요구에 따라 가져옵니다.

이렇게 하면 100MB PDF를 열 때 초기 로드 시간이 약 1MB 파일과 비슷하게 유지됩니다.

3. 동시성 및 스레딩

ASP.NET Core에서 리소스 관리는 매우 중요합니다.

  • Parallel Processing: 사용자가 현재 페이지를 읽는 동안 Doconut은 다중 코어 CPU를 활용해 인접 페이지를 미리 렌더링할 수 있습니다.
  • Token Management: 더 이상 필요하지 않을 때 문서 핸들(objDoc.Close())을 즉시 닫으세요(또는 using 블록을 사용)하여 메모리 사용량을 낮게 유지합니다.

4. 포맷별 최적화

  • PDFs: Doconut은 서버에서 렌더링하므로 "Fast Web View"(Linearization)가 반드시 필요하지는 않지만, 최적화된 내부 구조가 도움이 됩니다.
  • Images: 대용량 TIFF/JPEG의 경우 Doconut의 tiled rendering을 활성화하면 이미지를 청크 단위로 처리해 OutOfMemory 예외를 방지할 수 있습니다.

확장

수천 명의 동시 사용자를 지원하는 애플리케이션의 경우 Doconut은 stateless-ready 상태입니다. 스토리지(S3/Azure Blob)와 캐시(Redis)를 추상화하면 컴퓨트 인스턴스를 수평으로 확장(Kubernetes/App Service Plan)하여 트래픽 급증을 처리할 수 있습니다.

Deliver 번개처럼 빠른 문서 보기 with a tuned Doconut implementation.

#Performance#ASP.NET Core#Caching#Optimization#Scalability