저번 포스트에서 사용한 코드에서 조금 수정하여서 사용하였으니 저번
이미지 업로드 포스트를 참고해주시면 감사하겠습니다 ~
2024.11.08 - [TIL] - GCS를 이용한 이미지 업로드 기능 구현
Pre-signed url 이란
클라우드 스토리지 서비스에서 제공하는 기능으로, 사용자가 생성한 URL을 통해 지정된 시간동안 서버의 자원에접근할 수 있게 해주는 임시 링크이다. 해당 링크를 통해 이미지를 업로드, 다운로드 할 수 있다.
다만, url의 정해둔 유효 시간이 지나면 해당 url을 통해 더 이상 접근이 불가능하다.
사용방법
구글에 검색을 해봐도 S3를 이용한 케이스들이 대부분이라 아래 링크를 참고해서 구현해봤다.
public String generateImageUrl(String fileName) {
if (fileName == null) {
return null;
}
String uuid = UUID.randomUUID().toString();
BlobInfo blobInfo = BlobInfo.newBuilder(bucket,
uuid)
.setContentType("image/*")
.build();
URL url = storage.signUrl(blobInfo,
1,
TimeUnit.MINUTES,
SignUrlOption.httpMethod(HttpMethod.PUT),
SignUrlOption.withV4Signature());
return url.toString();
}
구글 스토리지에 저장될 path 정보(blobInfo), url의 유효시간(1분), PUT Method를 받을 것이고, V4 Signature를 사용한다.
포스트맨으로 테스트
포스트맨으로 요청을보내면 아래처럼 url을 반환해준다.
반환받은 해당 url로 PUT Method로 image 형태의 파일을 보내면
정상적으로 구글 스토리지에 저장이 되는걸 확인할 수 있다.
여기서 주의해야할 점은 binary로 보내주어야한다.
이번에 파일 업로드를해보고 Pre-signed url을 이용한 업로드까지 경험해봤는데, signed url을 사용하기 전에는
이미지 업로드 처리시간이 1100ms? 정도 나왔던 것 같은데 해당 방법으로하니 100ms 초반대로 나오니까
처리시간이 빨라진게 체감이 확실히 됐다 또한 버킷에 직접 접근 권한을 부여하는게 아니라 특정 객체에 대한 일시적인
접근을 허용하는 것이기 때문에 보안적으로도 안전하다는 생각이 들었다.
'TIL' 카테고리의 다른 글
Service와 ServiceImpl 왜 나누는거지? (1) | 2024.11.13 |
---|---|
JPA - 복합키와 식별 관계 매핑 (0) | 2024.11.12 |
GCS를 이용한 이미지 업로드 기능 구현 (2) | 2024.11.08 |
AOP (0) | 2024.10.31 |
기능 개선 과제 (0) | 2024.10.31 |