콘텐츠로 이동

DynamoDB

DynamoDB는 검색용 데이터베이스가 아닌 워크플로우 상태 관리 용도로 사용됩니다. 프로젝트, 문서, 워크플로우, 세그먼트, 분석 단계의 모든 상태를 하나의 테이블에서 관리하는 One Table Design 패턴을 적용했습니다.


항목
과금On-Demand
Partition KeyPK (String)
Sort KeySK (String)
GSI1GSI1PK / GSI1SK
GSI2GSI2PK / GSI2SK
StreamNEW_AND_OLD_IMAGES

PK: PROJ#{project_id}
SK: META
필드설명
data.name프로젝트 이름
data.language언어 (기본값: en)
data.document_prompt문서 분석용 커스텀 프롬프트
data.ocr_modelOCR 모델 (기본값: pp-ocrv5)
PK: PROJ#{project_id}
SK: DOC#{document_id}

프로젝트에 속한 문서 목록을 조회할 때 begins_with(SK, 'DOC#')로 쿼리합니다.

프로젝트-워크플로우 연결 (PROJ# / WF#)

섹션 제목: “프로젝트-워크플로우 연결 (PROJ# / WF#)”
PK: PROJ#{project_id}
SK: WF#{workflow_id}
필드설명
data.file_name파일 이름
data.status워크플로우 상태

워크플로우 메타데이터 (DOC# 또는 WEB#)

섹션 제목: “워크플로우 메타데이터 (DOC# 또는 WEB#)”
PK: DOC#{document_id} (또는 WEB#{document_id})
SK: WF#{workflow_id}
필드설명
data.project_id소속 프로젝트
data.file_uriS3 경로
data.file_name파일 이름
data.file_typeMIME 타입
data.execution_arnStep Functions 실행 ARN
data.statuspending / in_progress / completed / failed
data.total_segments총 세그먼트 수
data.preprocess전처리 단계별 상태 (ocr, bda, transcribe, webcrawler)
PK: WF#{workflow_id}
SK: STEP
GSI1PK: STEP#ANALYSIS_STATUS
GSI1SK: pending | in_progress | completed | failed

워크플로우의 각 처리 단계 상태를 추적합니다. GSI1을 통해 현재 분석 중인 워크플로우를 빠르게 조회합니다.

단계설명
segment_prep세그먼트 준비
bda_processorBedrock Document Analysis
format_parser포맷 파싱
paddleocr_processorPaddleOCR 처리
transcribe음성 변환
webcrawler웹 크롤링
segment_builder세그먼트 구성
segment_analyzerAI 분석 (Claude)
graph_builder그래프 구축
document_summarizer문서 요약

각 단계는 status, label, started_at, ended_at, error 속성을 가집니다.

PK: WF#{workflow_id}
SK: SEG#{segment_index:04d} ← 0001, 0002, ...
필드설명
data.segment_index세그먼트 인덱스
data.s3_keyS3 경로 (세그먼트 데이터)
data.image_uri이미지 URI
data.image_analysis이미지 분석 결과 배열

조회인덱스키 조건
프로젝트 문서 목록PrimaryPK=PROJ#{proj_id}, SK begins_with DOC#
프로젝트 워크플로우 목록PrimaryPK=PROJ#{proj_id}, SK begins_with WF#
워크플로우 메타데이터PrimaryPK=DOC#{doc_id}, SK=WF#{wf_id}
단계 진행 상태PrimaryPK=WF#{wf_id}, SK=STEP
세그먼트 목록PrimaryPK=WF#{wf_id}, SK begins_with SEG#
특정 세그먼트PrimaryPK=WF#{wf_id}, SK=SEG#{index}
진행 중인 분석 조회GSI1GSI1PK=STEP#ANALYSIS_STATUS, GSI1SK=in_progress

  • 단일 트랜잭션: 워크플로우 생성 시 메타데이터와 단계 상태를 batch_write로 원자적으로 생성
  • 효율적 조회: 프로젝트의 모든 문서/워크플로우를 단일 쿼리로 조회
  • 비용 절감: 테이블 하나로 관리하여 운영 복잡도 최소화

DynamoDB는 상태와 메타데이터만 저장하고, 실제 데이터(세그먼트 콘텐츠, 분석 결과)는 S3에 저장합니다.

DynamoDB S3
├─ 워크플로우 상태 ├─ 세그먼트 원본 데이터
├─ 단계별 진행 상태 ├─ 분석 결과 (JSON)
├─ 세그먼트 메타데이터 (s3_key) ├─ 엔티티 추출 결과
└─ WebSocket 연결 정보 └─ 문서 요약

Step Functions의 페이로드 제한(256KB)으로 인해 DynamoDB를 중간 저장소로 활용합니다. 3000페이지 이상의 문서도 세그먼트 인덱스만 전달하여 처리할 수 있습니다.