좋습니다. 아래는 **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 역할 설계**도 추가해드릴 수 있어요. 준비되시면 영상까지 포함한 버전으로 확장도 도와드리겠습니다.