서버를 거쳐 s3에 이미지를 업로드하는 방식
기존에 알았던 s3에 이미지를 업로드하던 방식은, 클라이언트에서 서버api를 호출하여 파일 객체를 서버로 전송하여 서버에서 버킷에 업로드하는 방식이었다. 이 방식의 문제점이 있다는 것을 배우게 되었고, 간략히 정리해보자면 아래와 같다.
문제점
- 서버 부하 증가
파일 객체가 서버를 거쳐가기 때문에 서버 네트워크 대역폭과 CPU 자원이 더 많이 소모된다. 서버가 많은 요청을 처리해야 하는 경우 병목현상을 일으킬 수 있다.
- 응답 시간 증가
'클라 -> 서버 -> 버킷' 경로 이기 때문에, 클라이언트가 완료 응답을 받을 때까지의 시간이 서버가 없을 경우보다 더 걸린다.
- 비용 증가
서버의 네트워크 대역폭을 많이 사용할수록 추가 비용이 발생할 수 있다.
- 로직 복잡성 증가
서버에서 파일을 받아서 S3에 업로드 하는 로직이 구현되어야 하므로 이에 대한 추가 개발과 유지보수 및 디버깅에 더 많은 시간과 노력이 필요할 수 있다.
이러한 문제점들을 개선하기 위해 사용되는 방식이 pre-signed URL이다.
pre-signed URL

개념
'미리 서명된 url'이라는 뜻으로, 말 그대로 어떤 서명이 된 url을 사용함으로써 AWS 보안 자격 증명이나 권한이 없어도 S3 버킷에 객체를 업로드 하는 것을 가능하게 한 기술이다.
장점
- 서버 부하 감소
파일이 서버를 거치지 않고 클라이언트에서 바로 S3로 업로드 되기 때문에 서버의 부하가 줄어든다.
- 응답 시간 단축
클라가 S3에 직업 업로드하기 때문에 업로드 속도가 빨라지고 응답시간이 단축된다.
- 비용 절감
서버의 네트워크 대역폭 사용이 줄어들어 비용이 절감된다
- 로직 단순화
이 업로드 과정에 관한 로직이 단순해지고, 서버에서는 pre-signed URL을 생성하는 작업만 하면 된다.
- 유효기간 설정
생성시 설정된 유효기간동안만 pre-signed URL 사용이 가능하기 때문에, 유출되더라도 유효기간이 지나면 사용할 수 없게 된다. 또한, 특정작업(업로드, 다운로드)에 대해서만 권한을 부여할 수 있기 때문에 이런한 점들로 인해 불필요한 권한 남용을 방지 할 수 있다.