1. 시스템 설계의 철학과 핵심 구성 요소
문서 관리 시스템(DMS) 구축의 핵심은 단순히 파일을 저장하는 것을 넘어, 저장된 데이터를 어떻게 구조화하고 검색 가능하게 만드느냐에 있습니다. 본 설계에서는 Rails 프레임워크를 기반으로 다음과 같은 핵심 구성 요소를 활용하여 시스템을 구축합니다.
- Active Storage: AWS S3나 Google Cloud Storage와 같은 클라우드 저장소와의 연동을 담당하며, 파일 업로드 및 다운로드를 위한 일관된 추상화 계층을 제공합니다.
- Sidekiq: 문서 분석, OCR 처리, 썸네일 생성 등 시간이 오래 걸리는 작업을 비동기적으로 처리하여 웹 서버의 응답성을 유지합니다.
- PostgreSQL & PgSearch: 문서의 메타데이터를 저장하고, GIN 인덱스를 활용하여 수만 권의 문서 내에서도 빠른 전문 검색(Full-text Search) 기능을 구현합니다.
2. 문서 업로드 및 비동기 처리 파이프라인
사용자가 문서를 업로드하면 시스템은 즉각적으로 응답하는 동시에 백그라운드에서 복잡한 처리 과정을 시작합니다. 이 파이프라인은 데이터의 가치를 극대화하는 핵심 단계입니다.
- 파일 검증 및 저장: 업로드된 파일의 MIME 타입을 확인하여 보안 사고를 예방하고, Active Storage를 통해 지정된 스토리지에 안전하게 저장합니다.
- 텍스트 추출 (OCR): PDF나 이미지 파일의 경우,
rtesseract젬을 사용하여 Tesseract OCR 엔진을 호출합니다. 이를 통해 이미지 내의 텍스트를 추출하여 데이터베이스의 별도 컬럼(content_text)에 저장함으로써 검색이 가능하게 만듭니다. - 썸네일 및 미리보기 생성:
image_processing젬을 활용하여 문서의 첫 페이지를 저용량 이미지로 변환합니다. 이는 사용자가 목록에서 문서를 빠르게 식별할 수 있도록 돕습니다.
3. 검색 엔진 최적화 및 메타데이터 관리
DMS의 성패는 사용자가 원하는 문서를 얼마나 빨리 찾느냐에 달려 있습니다. 단순한 파일명 검색을 넘어선 고도화된 검색 전략이 필요합니다.
- 전문 검색(Full-text Search): OCR로 추출된 본문 전체를 대상으로 검색을 수행합니다. PostgreSQL의
tsvector를 활용하면 별도의 검색 엔진 없이도 강력한 검색 기능을 유지할 수 있습니다. - 태깅 및 분류: 문서에 동적인 태그를 부여하고, 업로드 날짜, 부서, 문서 유형 등의 메타데이터를 정규화하여 저장합니다. 이를 통해 다각적인 필터링 기능을 제공합니다.
4. 버전 관리와 보안 및 확장성 전략
데이터의 무결성과 보안은 DMS에서 타협할 수 없는 요소입니다.
- 버전 관리: 기존 문서를 덮어쓰는 대신 새로운 버전을 생성하고,
PaperTrail과 같은 젬을 사용하여 누가, 언제, 무엇을 변경했는지에 대한 이력을 추적합니다. - 접근 제어 및 보안:
Pundit을 활용하여 사용자 권한에 따른 문서 접근을 엄격히 통제합니다. 또한, Active Storage의 서명된 URL(Signed URLs) 기능을 통해 클라우드 저장소에 직접 접근하는 것을 차단하고 만료 시간이 있는 링크만 제공하여 보안을 강화합니다. - 확장성: 문서의 양이 폭발적으로 늘어날 경우, Sidekiq 워커를 분산 배치하여 처리 속도를 유지하며, 필요에 따라 PostgreSQL 검색을 Elasticsearch나 Meilisearch로 마이그레이션할 수 있는 유연한 구조를 유지합니다.