AWS와 함께 지능형 문서 처리 파이프라인 구축: 아이디어에서 프로덕션까지의 여정

발행: (2025년 12월 24일 오후 11:45 GMT+9)
13 min read
원문: Dev.to

Source: Dev.to

TL;DR – 이야기를 건너뛰고 싶나요?

레포를 포크하고, 10분 안에 배포하고, 문서 처리를 시작하세요:

git clone https://github.com/Tetianamost/aws-intelligent-document-processing.git
cd aws-intelligent-document-processing
sam build && sam deploy --guided

모든 것이 프로덕션 준비가 되어 있습니다. AWS 자격 증명과 이메일만 추가하면 됩니다. 작동 방식과 구축하면서 배운 점을 알고 싶다면 계속 읽어보세요.

내가 이것을 만든 이유 (그리고 여러분도 필요할 수 있는 이유)

이런 상황을 상상해 보세요: 인보이스, 영수증, 세금 양식, 계약서에 파묻혀 있습니다. 팀은 PDF에서 데이터를 스프레드시트로 수동으로 입력하고 있습니다. 수시간이 낭비되고, 실수가 곳곳에 발생합니다. 익숙한가요?

저는 AWS 서비스를 활용한 자동 문서 처리 시스템을 구축했습니다. 이 시스템은:

  • 텍스트, 표, 양식 데이터를 모든 문서에서 자동으로 추출합니다
  • 문서가 업로드되는 즉시 실시간으로 처리합니다
  • 구조화된 데이터를 저장하여 분석이나 통합에 바로 사용할 수 있게 합니다
  • 처리 완료(또는 실패) 시 알림을 전송합니다
  • 10개에서 10 000개 문서까지 손쉽게 확장됩니다

가장 좋은 점은? 배포 후 문서당 몇 센트의 비용만 들고 유지보수가 전혀 필요 없다는 것입니다. 그리고 처음부터 만들 필요도 없습니다 – 포크하고, 배포하고, 바로 사용하면 됩니다.

아키텍처: 단순하지만 강력함

Document Upload (S3)

Automatic Trigger (S3 Event)

AI Processing (Lambda + Textract)

Structured Storage (DynamoDB)

Notification (SNS Email)

몇 초 만에 마법이 일어납니다

  1. S3에 문서를 업로드합니다
  2. Lambda가 자동으로 실행됩니다
  3. Textract가 모든 내용(텍스트, 표, 양식)을 추출합니다
  4. 데이터가 DynamoDB에 완벽하게 구조화되어 저장됩니다
  5. 이메일 알림을 받습니다

관리할 서버가 없습니다. 유지할 인프라가 없습니다. 순수한 서버리스의 장점만 누리세요.

Source:

이게 왜 멋진가요?

1. 실제로 문서를 이해합니다

이것은 단순 OCR이 아닙니다. Amazon Textract는 머신러닝을 활용해 문서 구조를 파악합니다:

  • Tables – 행과 열을 관계 그대로 추출
  • Forms – 키‑값 쌍을 식별 (예: Invoice #: 12345, Date: Dec 23)
  • Text – 모든 단어와 신뢰도 점수를 반환

비즈니스 인보이스(4개의 라인 아이템, 계산식, 회사 정보 포함)로 테스트했습니다. Textract는 155개의 텍스트 블록을 추출하고 전체 테이블 구조를 완벽히 재구성했습니다. 예시 출력:

{
  "fields": {
    "Invoice #": "INV-2024-001234",
    "Date": "December 23, 2024",
    "Total": "$30,922.50"
  },
  "tables": [
    {
      "rows": 8,
      "columns": 4,
      "data": [
        ["Description", "Quantity", "Price", "Total"],
        ["AWS Cloud Setup", "1", "$5,000", "$5,000"],
        ["DevOps Consulting (80 hrs)", "80", "$175/hr", "$14,000"],
        ...
      ]
    }
  ]
}

2. 인프라 관리가 필요 없습니다

서버를 프로비저닝하고, 로드밸런서를 설정하고, 자동 스케일링을 구성하던 시절이 기억나요? 저도 기억 안 나요. 서버리스 아키텍처 덕분에:

  • Lambda – 필요할 때만 실행되는 컴퓨팅
  • S3 – 이벤트를 자동으로 트리거
  • DynamoDB – 무한히 확장
  • CloudWatch – 모든 것을 모니터링

그냥 배포하고, 문서를 업로드하고, 떠났습니다. 자동으로 동작합니다.

3. 어느 규모에서도 비용 효율적

ServicePricing (approx.)
Textract$1.50 per 1 000 pages (first 1 M pages/month)
LambdaFirst 1 M requests free, then $0.20 per 1 M
S3$0.023 per GB
DynamoDBFirst 25 GB free

실제 예시: 월 1 000개의 인보이스를 처리하는 비용은 약 $1.50 정도입니다. 끝입니다.

4. 프로덕션 수준 오류 처리

문제는 언제든 발생합니다. 네트워크가 끊기고, 문서가 손상될 수도 있죠. 저는 다음을 구현했습니다:

  • Dead‑Letter Queue – 처리 실패 시 보관
  • CloudWatch Alarms – 오류 모니터링
  • SNS notifications – 성공·실패 모두 알림
  • Automatic retries – 지수 백오프 방식 재시도
  • Status tracking – DynamoDB에 상태 저장

무언가가 중단되면 즉시 알 수 있습니다.

도전 과제 (그리고 해결 방법)

도전 과제 #1 – CloudFormation의 순환 종속성

첫 번째 SAM 배포가 다음 오류와 함께 실패했습니다:

Circular dependency between resources: [DocumentBucket, DocumentProcessorFunction, DocumentProcessorFunctionPermission]

문제: S3 버킷은 Lambda 권한이 필요하고, Lambda는 버킷 이름이 필요하며, 그 권한은 두 가지 모두를 요구합니다 – 전형적인 닭‑달걀 문제.

해결 방법:

  1. S3 이벤트 알림 없이 인프라를 배포합니다.
  2. 이후 AWS CLI를 사용해 S3 알림을 추가합니다.
  3. DependsOn을 명시적으로 지정하여 Lambda 권한을 유지합니다.

교훈: 때때로 CloudFormation을 여러 단계로 나누어야 합니다.

도전 과제 #2 – PDF 형식 호환성 지옥

Python의 reportlab 라이브러리로 아름다운 PDF를 생성했지만 Textract가 모든 파일을 거부했습니다:

UnsupportedDocumentException: Request has unsupported document format

공식 IRS Form 1040 PDF조차도 실패했습니다!

조사 내용:

  • Textract는 PDF를 지원합니다 (AWS 문서 기준) ✅
  • PDF는 Preview에서 정상적으로 열립니다 ✅
  • 파일 크기는 5 MB 이하였습니다 ✅
  • 여전히 거부됨 ❌

돌파구: 모든 PDF가 동일하게 만들어지는 것은 아닙니다. Textract는 내부 PDF 구조에 민감합니다. reportlab, fpdf로 만든 PDF와 일부 정부 양식은 Textract가 지원하지 않는 형식을 사용합니다.

해결 방법: PDF를 먼저 PNG/JPG 이미지로 변환합니다.

# poppler의 pdftoppm 사용
pdftoppm -png -singlefile document.pdf output

결과

원본 문서결과추출된 블록
IRS Form 1040 (PDF)❌ 실패
IRS Form 1040 (PNG)✅ 성공1 412 블록
Reportlab 인보이스 (PDF)❌ 실패
Reportlab 인보이스 (PNG)✅ 성공155 블록

이미지 형식으로 변환하면 PDF 구조 문제를 회피할 수 있어 Textract가 정상적으로 동작합니다.

도전 과제 #3 – IAM 권한 미로

SAM 배포에는 예상보다 많은 AWS 권한이 필요합니다:

  • CloudFormation – 스택 생성
  • Lambda – 함수 배포
  • IAM – 실행 역할 생성
  • S3 – 아티팩트 및 문서 저장
  • DynamoDB – 테이블 생성
  • SNS – 토픽 생성
  • CloudWatch – 로그 그룹 및 알람 생성
  • X‑Ray – 트레이싱

베스트 프랙티스: 필요한 모든 관리형 정책을 포함한 IAM 사용자 그룹을 만든 뒤, 배포 사용자를 해당 그룹에 추가합니다. 이렇게 하면 권한 관리가 더 깔끔하고 재사용 가능해집니다.

실제 결과: 실제 추출된 내용

테스트 1: 비즈니스 인보이스

입력: 회사 헤더, 청구‑수신자 정보, 4개의 라인 아이템 및 계산이 포함된 PNG 이미지

추출된 내용:

  • 8개의 키‑값 쌍(인보이스 번호, 날짜, 주소 등)
  • 모든 라인 아이템이 포함된 8 × 4 테이블 전체
  • 소계, 세금 및 총계 계산
  • 총 155개의 텍스트 블록

처리 시간: 약 2 초

테스트 2: IRS 양식 1040 (세금 양식)

입력: PNG로 변환된 공식 IRS 양식

추출된 내용:

  • 1,412개의 텍스트 블록
  • 모든 양식 필드 라벨
  • 양식 구조 및 레이아웃
  • 양식에 있는 모든 텍스트

처리 시간: 약 3 초

Deployment: From Zero to Production in 10 Minutes

# 1. Build the application
sam build

# 2. Deploy to AWS
sam deploy --stack-name doc-processing-dev \
  --region us-east-1 \
  --capabilities CAPABILITY_IAM \
  --parameter-overrides NotificationEmail=your@email.com \
  --resolve-s3 \
  --no-confirm-changeset

# 3. Configure S3 event notifications
aws s3api put-bucket-notification-configuration \
  --bucket your-bucket-name \
  --notification-configuration file://s3-notification-config.json

# Done!

CloudFormation created:

  • 1 S3 버킷
  • 1 Lambda 함수
  • 1 DynamoDB 테이블
  • 이메일 구독이 포함된 1 SNS 토픽
  • 2 CloudWatch 알람
  • 1 SQS 데드‑레터 큐
  • 모든 IAM 역할 및 권한

Total deployment time: 3 분

내가 다르게 할 점

  • 첫날부터 PNG/JPG 사용 – PDF 디버깅에 소요되는 시간을 절약할 수 있었음
  • 비동기 처리 조기 도입 – 다중 페이지 문서의 경우 비동기 Textract 작업이 더 좋음
  • 비용 알림 포함 – 배포 전에 청구 알람을 설정
  • API Gateway 추가 – HTTP를 통해 처리를 트리거하기 쉬워짐
  • 문서 버전 관리 구현 – 처리된 문서의 변경 사항을 추적

결론

이 작업을 구축하면서 서버리스가 단순한 유행어가 아니라 문서 처리 워크플로우에 진정으로 혁신을 가져온다는 것을 배웠습니다.

얻을 수 있는 것

  • 몇 초 만에 자동 문서 처리
  • AI 기반 데이터 추출 (단순 OCR이 아님)
  • 서버 관리 불필요
  • 사용량 기반 요금
  • 프로덕션 수준 오류 처리
  • 무한 확장성

비용

  • ≈ 1,000문서당 $1.50
  • 설정에 몇 시간
  • 지속적인 유지보수 없음

절감 효과

  • 수백 시간의 수동 데이터 입력
  • 무수한 전사 오류
  • 서버 인프라 비용
  • DevOps 오버헤드

사용 준비가 되었나요?

전체 프로젝트는 프로덕션 준비 완료이며 GitHub에서 오픈 소스로 제공됩니다:
aws‑intelligent‑document‑processing

빠른 시작

# 1. Clone the repo
git clone https://github.com/Tetianamost/aws-intelligent-document-processing.git
cd aws-intelligent-document-processing

# 2. Deploy to AWS (takes ~3 minutes)
sam build
sam deploy --guided

# 3. Upload a document
aws s3 cp your-document.png s3://your-bucket-name/incoming/

# 4. Check DynamoDB for extracted data

필요한 모든 것이 포함되어 있습니다:

  • ✅ Lambda 함수 코드
  • ✅ CloudFormation 템플릿
  • ✅ 샘플 문서 (청구서 + 세금 양식)
  • ✅ IAM 권한 템플릿
  • ✅ 단계별 배포 가이드

프로 팁: PDF 대신 PNG 이미지를 먼저 사용해 보세요. 이 점은 꼭 기억하세요.

질문이 있거나 비슷한 것을 만들었나요? 댓글을 남기거나 연락 주세요.

Back to Blog

관련 글

더 보기 »

Stars를 이용한 GitHub Repository Embeddings 학습

데모 – 100 % 클라이언트‑사이드 KNN WASM 데모: 데모. 100 % 클라이언트‑사이드. KNN을 위한 WASM https://puzer.github.io/github_recommender/ - 귀하의 …를 기반으로 스킬 레이더를 생성합니다.