Presigned URL 방식은 클라우드 스토리지 서비스에서 파일을 업로드하거나 다운로드할 때 자주 사용되는 접근 방법이다.
이 방식은 서버가 특정 시간 동안 유효한 URL을 생성하여 클라이언트에게 제공한다.
이 URL을 사용하면 해당 시간 동안 인증 없이도 파일에 접근할 수 있다.
주로 AWS S3와 같은 서비스에서 많이 사용된다.어떤 이점이 있는건가?
1. 보안 강화
제한된 접근: Presigned URL은 특정 기간 동안만 유효하다.
이 기간이 지나면 URL이 만료되어 더 이상 접근할 수 없다고 한다.
이를 통해 파일에 대한 접근을 제한할 수 있다.
노출 최소화: 클라이언트는 직접적인 인증 정보를 갖지 않고도 파일에 접근할 수 있다.
서버에서 생성된 presigned URL을 사용하기 때문에 인증 토큰이나 비밀번호를 노출할 필요가 없다.2. 클라이언트와 서버 간의 부담 분산
서버 부담 감소: 파일 업로드나 다운로드 요청을 서버가 직접 처리하지 않고, 클라이언트가 클라우드 스토리지와 직접 통신한다. 이를 통해 서버의 부담을 줄일 수 있다.
대역폭 효율성: 클라이언트가 직접 파일을 업로드하거나 다운로드하기 때문에 서버와 클라이언트 간의 데이터 전송 대역폭을 효율적으로 사용할 수 있다.3. 간편한 사용
단순한 구현: 서버 측에서 presigned URL을 생성하여 클라이언트에 전달하기만 하면 되므로, 클라이언트 측에서는 복잡한 인증 절차를 거치지 않고 URL을 사용해 파일을 전송할 수 있다.
다양한 사용 사례 지원: 파일 업로드, 다운로드뿐만 아니라 특정 파일에 대한 일시적인 읽기 권한을 제공하는 등 다양한 시나리오에서 활용할 수 있다.4. 일시적 권한 부여
임시 접근 권한: 특정 파일에 대해 일시적인 접근 권한을 부여할 수 있어, 예를 들어 제한된 시간 동안만 파일을 공유하고 싶은 경우에 유용하다.
5. 적용 사례
파일 업로드: 사용자가 파일을 업로드할 때 presigned URL을 사용하여 직접 클라우드 스토리지에 업로드하도록 할 수 있다.
파일 다운로드: 사용자가 특정 파일을 다운로드할 때 presigned URL을 사용하여 다운로드 링크를 제공할 수 있다.
파일 공유: 특정 기간 동안만 파일을 공유하고자 할 때 presigned URL을 사용할 수 있다.Flutter에서 사용 예시:
AWS S3를 예로 들면, Flutter 애플리케이션에서 서버로부터 presigned URL을 받아와 해당 URL을 사용하여 파일을 업로드하거나 다운로드할 수 있다.
http 패키지를 사용하여 HTTP 요청을 보내 presigned URL을 받을 수 있으며, 받은 URL을 통해 파일 전송 작업을 수행한다.
import 'package:http/http.dart' as http;
Future<void> uploadFile(String filePath, String presignedUrl) async {
final file = File(filePath);
final response = await http.put(
Uri.parse(presignedUrl),
headers: {
'Content-Type': 'application/octet-stream',
},
body: await file.readAsBytes(),
);
if (response.statusCode == 200) {
print('File uploaded successfully');
} else {
print('File upload failed');
}
}
위 예제는 presigned URL을 사용하여 파일을 업로드하는 간단한 예제다.
비슷한 방식으로 파일 다운로드도 가능하다.
깊이가 없어 본 글에 알맹이가 없지만, 결론적으로 Presigned URL 방식은 Flutter와 같은 클라이언트 애플리케이션에서 파일 전송 작업을 안전하고 효율적으로 처리할 수 있도록 도와준다.