아마존 S3와 람다를 활용한 파일 업로드 및 삭제
F-Lab : 상위 1% 개발자들의 멘토링
AI가 제공하는 얕고 넓은 지식을 위한 짤막한 글입니다!

소개
이번 포스트에서는 아마존 S3와 람다를 활용하여 파일을 업로드하고 삭제하는 방법에 대해 다루겠습니다. 클라우드 스토리지와 서버리스 컴퓨팅을 결합하여 효율적인 파일 관리 시스템을 구축하는 방법을 알아보겠습니다.
아마존 S3는 파일, 영상, 이미지 등을 저장할 수 있는 클라우드 스토리지 서비스입니다. 이를 통해 서버의 저장 공간을 절약하고, 높은 가용성과 내구성을 제공합니다.
아마존 람다는 서버를 관리할 필요 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. 이를 통해 이벤트 기반의 코드를 작성하고, 다양한 AWS 서비스와 연동할 수 있습니다.
이번 포스트에서는 클라이언트가 아마존 S3에 파일을 업로드하고, 이를 삭제하는 과정을 설명하겠습니다. 또한, 이를 위해 필요한 프리사인드 URL과 S3 트리거를 활용하는 방법도 다룹니다.
왜냐하면 이러한 기술들을 활용하면 파일 관리 시스템을 보다 효율적으로 구축할 수 있기 때문입니다.
아마존 S3와 프리사인드 URL
아마존 S3는 파일을 저장할 수 있는 클라우드 스토리지 서비스로, 높은 가용성과 내구성을 제공합니다. 이를 통해 서버의 저장 공간을 절약하고, 파일을 안전하게 보관할 수 있습니다.
클라이언트가 아마존 S3에 파일을 업로드하려면 프리사인드 URL을 생성해야 합니다. 프리사인드 URL은 특정 시간 동안 유효한 URL로, 이를 통해 클라이언트가 직접 S3에 파일을 업로드할 수 있습니다.
프리사인드 URL을 생성하는 방법은 다음과 같습니다:
const AWS = require('aws-sdk'); const s3 = new AWS.S3(); const params = { Bucket: 'your-bucket-name', Key: 'your-file-key', Expires: 60 // URL 유효 시간 (초) }; s3.getSignedUrl('putObject', params, (err, url) => { if (err) { console.log('Error generating pre-signed URL', err); } else { console.log('Pre-signed URL:', url); } });
왜냐하면 프리사인드 URL을 사용하면 클라이언트가 직접 S3에 파일을 업로드할 수 있기 때문입니다.
아마존 람다와 S3 트리거
아마존 람다는 서버를 관리할 필요 없이 코드를 실행할 수 있는 서버리스 컴퓨팅 서비스입니다. 이를 통해 이벤트 기반의 코드를 작성하고, 다양한 AWS 서비스와 연동할 수 있습니다.
S3 트리거는 S3 버킷에서 발생하는 이벤트를 감지하여 람다 함수를 실행할 수 있게 합니다. 이를 통해 파일 업로드, 삭제 등의 이벤트에 대해 자동으로 처리할 수 있습니다.
S3 트리거를 설정하는 방법은 다음과 같습니다:
const AWS = require('aws-sdk'); const lambda = new AWS.Lambda(); const params = { FunctionName: 'your-lambda-function-name', EventSourceArn: 'arn:aws:s3:::your-bucket-name', Events: ['s3:ObjectCreated:*'] }; lambda.createEventSourceMapping(params, (err, data) => { if (err) { console.log('Error creating event source mapping', err); } else { console.log('Event source mapping created:', data); } });
왜냐하면 S3 트리거를 사용하면 파일 업로드 등의 이벤트에 대해 자동으로 람다 함수를 실행할 수 있기 때문입니다.
파일 삭제와 프리사인드 딜리트 URL
파일을 삭제할 때도 프리사인드 URL을 사용할 수 있습니다. 프리사인드 딜리트 URL을 생성하여 클라이언트가 직접 S3에서 파일을 삭제할 수 있게 합니다.
프리사인드 딜리트 URL을 생성하는 방법은 다음과 같습니다:
const params = { Bucket: 'your-bucket-name', Key: 'your-file-key', Expires: 60 // URL 유효 시간 (초) }; s3.getSignedUrl('deleteObject', params, (err, url) => { if (err) { console.log('Error generating pre-signed delete URL', err); } else { console.log('Pre-signed delete URL:', url); } });
왜냐하면 프리사인드 딜리트 URL을 사용하면 클라이언트가 직접 S3에서 파일을 삭제할 수 있기 때문입니다.
구현 예제
이제 앞서 설명한 내용을 바탕으로 파일 업로드와 삭제를 구현하는 예제를 살펴보겠습니다. 이 예제에서는 Node.js와 AWS SDK를 사용하여 프리사인드 URL을 생성하고, 이를 통해 파일을 업로드하고 삭제하는 과정을 다룹니다.
먼저, 프리사인드 URL을 생성하는 코드를 작성합니다:
const AWS = require('aws-sdk'); const s3 = new AWS.S3(); function generatePresignedUrl(bucketName, fileKey, operation) { const params = { Bucket: bucketName, Key: fileKey, Expires: 60 // URL 유효 시간 (초) }; return new Promise((resolve, reject) => { s3.getSignedUrl(operation, params, (err, url) => { if (err) { reject(err); } else { resolve(url); } }); }); }
다음으로, 파일을 업로드하고 삭제하는 코드를 작성합니다:
async function uploadFile(bucketName, fileKey, fileContent) { const url = await generatePresignedUrl(bucketName, fileKey, 'putObject'); // 파일 업로드 로직 } async function deleteFile(bucketName, fileKey) { const url = await generatePresignedUrl(bucketName, fileKey, 'deleteObject'); // 파일 삭제 로직 }
왜냐하면 이러한 예제를 통해 실제로 파일 업로드와 삭제를 구현할 수 있기 때문입니다.
결론
이번 포스트에서는 아마존 S3와 람다를 활용하여 파일을 업로드하고 삭제하는 방법에 대해 다루었습니다. 클라우드 스토리지와 서버리스 컴퓨팅을 결합하여 효율적인 파일 관리 시스템을 구축하는 방법을 알아보았습니다.
프리사인드 URL을 사용하여 클라이언트가 직접 S3에 파일을 업로드하고 삭제할 수 있게 하였으며, S3 트리거를 통해 파일 업로드 등의 이벤트에 대해 자동으로 람다 함수를 실행할 수 있게 하였습니다.
이를 통해 서버의 저장 공간을 절약하고, 파일을 안전하게 보관할 수 있습니다. 또한, 서버를 관리할 필요 없이 코드를 실행할 수 있어 개발 생산성을 높일 수 있습니다.
왜냐하면 이러한 기술들을 활용하면 파일 관리 시스템을 보다 효율적으로 구축할 수 있기 때문입니다.
앞으로도 다양한 AWS 서비스를 활용하여 효율적인 시스템을 구축하는 방법을 계속해서 탐구해보겠습니다.
이 컨텐츠는 F-Lab의 고유 자산으로 상업적인 목적의 복사 및 배포를 금합니다.