AWS S3의 Presigned URL이란?
업로드에 대한 의미도 있지만
진행하고 있는 백엔드 부분(이미지 요청시 Presigned URL 반환)만 구현하기에
다운로드에 대한 의미만 전합니다.
서버는 S3에 대한 권한을 가지고 있지만 클라이언트는 S3에 대한 권한이 없기에 이미지에 대한 접근 권한이 없습니다.
그렇기에 이 '유효기간'을 가진 URL을 알고 있으면 누구나 접근할 수 있는 경로를 서버가 클라이언트에게 반환해주어 이미지에 접근할 수 있도록 하는 기술입니다.
AWS S3 웹 콘솔 상의 다음 메뉴(미리 서명된 URL과 공유)를 누르면 공유 시간을 정할 수 있습니다.
목표는 배포된 서버의 이미지 조회 API에 GET 요청을 보낼 때 presigned url을 반환 해주는 것입니다.
aws-java-sdk-s3 라이브러리의 AmazonS3Client를 사용하여 Presigned URL을 생성하게 됩니다.
여기서 bucket은 생성한 S3 버킷의 이름이고 key의 경우에는 위 이미지의 '키' 부분과 같은데
폴더+파일명을 말합니다.
여기서는 user 테이블에 imagePath라는 문자열 필드를 추가해 그 경로에 '키'를 저장해주었습니다.
.withMethod(HttpMethod.GET)은 presigned url 을 통해 객체를 다운로드 시 사용 합니다.
public String getProfileImage(AuthUser authUser) {
User user = userRepository.findById(authUser.getId())
.orElseThrow(() -> new InvalidRequestException("User not found"));
if(user.getImagePath()==null) {
throw new InvalidRequestException("등록한 프로필 이미지가 없습니다.");
}
return generateGETPresignedUrl(user.getImagePath(), getPreSignedUrlExpiration());
}
private String generateGETPresignedUrl(String key, Date expiration) {
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucket, key)
.withMethod(HttpMethod.GET)
.withExpiration(expiration);
URL url = amazonS3Client.generatePresignedUrl(generatePresignedUrlRequest);
return url.toString();
}
전체 코드는 아래 글에 포함되어 있습니다.
[AWS] S3 기능으로 유저 이미지 저장 기능 구현하기
[AWS] S3 기능으로 유저 이미지 저장 기능 구현하기
해당 글은 AWS 에 github actions로 빌드하는 과정이 다른 글에 포함 되어있습니다.[AWS] aws에 배포하기 [AWS] aws에 배포하기AWS에서 ec2 생성 ec2에 docker, docker compose github secretkey 기능을 활용하여 actio
heehyun0221.tistory.com
'Docker AND Cloud' 카테고리의 다른 글
AWS 프리티어 EC2 빌드 실패, 메모리 부족, 스왑메모리 설정 (0) | 2025.03.27 |
---|---|
[AWS] S3 기능으로 유저 이미지 저장 기능 구현하기 (0) | 2025.01.22 |
[AWS] aws에 배포하기 (0) | 2025.01.20 |