AWS와 함께 지능형 문서 처리 파이프라인 구축: 아이디어에서 프로덕션까지의 여정
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)
몇 초 만에 마법이 일어납니다
- S3에 문서를 업로드합니다
- Lambda가 자동으로 실행됩니다
- Textract가 모든 내용(텍스트, 표, 양식)을 추출합니다
- 데이터가 DynamoDB에 완벽하게 구조화되어 저장됩니다
- 이메일 알림을 받습니다
관리할 서버가 없습니다. 유지할 인프라가 없습니다. 순수한 서버리스의 장점만 누리세요.
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. 어느 규모에서도 비용 효율적
| Service | Pricing (approx.) |
|---|---|
| Textract | $1.50 per 1 000 pages (first 1 M pages/month) |
| Lambda | First 1 M requests free, then $0.20 per 1 M |
| S3 | $0.023 per GB |
| DynamoDB | First 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는 버킷 이름이 필요하며, 그 권한은 두 가지 모두를 요구합니다 – 전형적인 닭‑달걀 문제.
해결 방법:
- S3 이벤트 알림 없이 인프라를 배포합니다.
- 이후 AWS CLI를 사용해 S3 알림을 추가합니다.
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 이미지를 먼저 사용해 보세요. 이 점은 꼭 기억하세요.
질문이 있거나 비슷한 것을 만들었나요? 댓글을 남기거나 연락 주세요.