좋습니다. 아래는 **SQS를 포함한 안정적인 이미지 업로드 및 변환 자동화 시스템**의 구조와 함께, **세부 작업 명세서**입니다. 향후 **동영상 변환 워크플로우 확장**도 고려하여 설계하였습니다.
---
## **✅ 최종 시스템 아키텍처 (이미지 기준)**
```
[Google Drive Folder]
│
[Google Apps Script]
│ (Metadata 전송)
▼
[API Gateway (POST /upload)]
│
▼
[AWS Lambda: Presigned URL 생성 + SQS 전송]
│ │
▼ ▼
Presigned S3 URL SQS Queue (변환요청)
│ │
└──▶ User uploads image ▼
[AWS Lambda: 이미지 변환 & Airtable 기록]
│
├─ 원본/변환 이미지 S3 저장
└─ Airtable에 메타데이터 등록
```
---
## **✅ 전체 작업 명세서 (이미지 처리 기준)**
### **1. Google Drive → Apps Script**
- **기능**: 특정 폴더에 업로드된 새 파일을 감지하여 처리 대상인지 확인
- **동작**
- 파일의 fileId, fileName, mimeType, description 등을 수집
- Lambda에 metadata 전송 (Webhook URL)
- 중복 처리 방지를 위해 [PROCESSED] 태그 추가
---
### **2. API Gateway (POST**
### **/upload**
### **)**
- **역할**: Lambda로 안전하게 요청 전달
- **설정**
- POST 메서드에 Lambda 통합
- **CORS 허용**
- 인증 필요 없음 (단, 정해진 Apps Script만 요청 보내도록 제한 가능)
---
### **3. Lambda #1: Presigned URL 생성 + SQS 전송**
- **역할**:
- fileName 기준으로 S3 presigned URL 생성 (PUT)
- metadata + fileName 함께 SQS 큐에 전송 (변환 작업 요청)
- **출력**
```
{
"uploadUrl": "https://s3....",
"s3Key": "original/xxx.png"
}
```
-
- **S3 저장 구조**:
- original/ 폴더에 원본 저장
- 향후 videos/original/도 확장 가능하도록 경로 설계
---
### **4. Apps Script (수정된 버전)**
- **기능**
- Lambda로 presigned URL 요청 → 응답받은 URL에 이미지 업로드
- 업로드 성공 후 fileName, s3Key, description 포함하여 SQS에 메시지 넣은 Lambda가 이미지 변환 처리
---
### **5. SQS (Standard Queue)**
- **역할**: 이미지 변환 요청을 안정적으로 큐잉
- **특징**
- 중복 메시지 방지 (Idempotency Key: fileName)
- 재시도 / 장애 대비 구조 확보
---
### **6. Lambda #2: 이미지 변환 + Airtable 기록**
- **역할**:
- SQS 메시지 수신 → S3에서 원본 이미지 다운로드
- WebP 변환 → webp/ 경로에 저장
- Airtable에 메타데이터 등록
- **처리**
- .png, .jpg, .jpeg 등 지원
- 변환 실패 시 에러 로그만 저장하고 SQS DLQ 설정 가능
---
### **7. Airtable 기록 항목**
|**필드명**|**설명**|
|---|---|
|Name|이미지 이름 (확장자 없음)|
|Original URL|S3 원본 URL|
|WebP URL|변환된 WebP 이미지 S3 URL|
|Description|Google Drive 파일 설명|
|Upload Time|ISO 형식 UTC 시간|
|Status|Converted 또는 Failed|
|Delete URL|추후 삭제 요청을 위한 라우팅 URL|
---
## **✅ 확장 계획: 동영상 지원을 위한 설계 고려사항**
- **영상 MIME 타입 (video/mp4, video/quicktime 등)** 감지
- S3 저장 경로: videos/original/ + videos/compressed/
- Lambda #2에서 ffmpeg를 포함하여 해상도 또는 파일 크기 축소
- Airtable에 영상별 썸네일 URL도 추후 포함 가능
---
## **✅ 보안 및 안정성 고려**
- **Presigned URL 유효 시간 제한** (예: 5분)
- **SQS DLQ(Dead Letter Queue)** 설정
- Lambda 환경변수에 Airtable API Key, Base ID, Table ID 설정
- IAM 역할 최소 권한 부여 (S3, SQS, Lambda, CloudWatch만 허용)
---
필요 시 이 명세서를 바탕으로 **아키텍처 다이어그램**, **CloudFormation/Serverless Framework 구성**, **IAM 역할 설계**도 추가해드릴 수 있어요.
준비되시면 영상까지 포함한 버전으로 확장도 도와드리겠습니다.