Wednesday, June 10, 2020

Flutter에서 AWS S3로 파일 업로드 Presigned URL과 Lambda Cold Start 문제 해결

Flutter에서 AWS S3로 파일 업로드: Pre-signed URL과 Lambda Cold Start 문제 해결

이 글에서는 Flutter에서 AWS S3로 파일을 직접 업로드하는 방법 및 Lambda Cold Start 문제 해결에 대해 설명합니다.

기존의 방식과 문제점

기존에는 앱에서 서버를 거쳐 S3로 파일을 업로드하는 방식을 사용하였습니다. 이 방식은 비효율적이므로, 앱에서 직접 S3로 파일을 업로드하는 방식을 도입하였습니다. 하지만 Flutter에서는 아직 AWS SDK가 제공되지 않아, 서버에서 Presigned URL을 받아야 했습니다.

우리 서비스는 Serverless를 지향하고 있어서 이 기능도 Lambda에 구현하였습니다. SDK를 활용해 URL을 생성 후 내려주고 테스트해보니 잘 동작하였으나, 예상치 못한 문제가 발생하였습니다.

Lambda Cold Start 문제 발생

일정 시간 동안 사용하지 않다가 Presigned URL을 담당하는 Lambda 함수를 다시 호출하면, 기존과 다른 URL을 반환하는 문제가 발생하였습니다. 이로 인해 파일 업로드가 정상적으로 이루어지지 않았습니다.

임시방편 해결방법

임시방편으로 최초 요청은 더미 요청으로 처리하고, 2번째 요청부터 반환된 URL을 사용하도록 하였습니다. 하지만 이 방법이 올바른 해결 방법인지에 대한 확신은 없었습니다.

Lambda Cold Start 문제 해결

구글링 결과 람다의 Cold Start 문제일 수 있다는 정보를 얻었습니다. 이를 해결하기 위해, 아래와 같은 IAM 정책을 Lambda 함수에 추가하였습니다:


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::버킷명",
                "arn:aws:s3:::버킷명/*"
            ]
        }
    ]
}

이렇게 함으로써 Lambda Cold Start 문제를 해결할 수 있었습니다.


0 개의 댓글:

Post a Comment