Pre-signed URL 이란?
쉽게 말해서 미리 서명된 URL입니다. 서버에서 AWS S3에 요청하여 Presigned URL을 발급받을 수 있습니다.
이렇게 발급받은 Presigned URL을 이용하여 클라이언트에서 직접 S3로 파일을 업로드할 수 있습니다.
그럼 SDK를 이용한 업로드 방법은 뭘까?
원래는 구현하려 했던 SDK방식은 다음과 같습니다.
-
클라이언트에서 파일을 서버로 넘깁니다.
-
서버는 파일 수신 및 처리를 합니다.
-
서버에서 S3로 파일을 업로드 합니다.
-
S3에서 저장된 영상 URL 주소를 반환합니다.
-
영상 주소를 DB에 저장 합니다.
AWS SDK는 서버 또는 클라이언트에서 AWS S3와 직접 상호작용할 수 있는 라이브러리입니다. 이를 사용하면 파일을 S3로 업로드하는 과정에서 AWS 자격 증명을 사용하여 직접 접근할 수 있습니다.
장점:
- 서버에서 직접 파일 관리: 서버가 클라이언트로부터 받은 파일을 처리하고, 이후 S3에 직접 업로드합니다. 따라서 서버에서 업로드 상태를 실시간으로 추적하고 관리할 수 있습니다.
- 복잡한 파일 처리 가능: 파일 처리, 압축, 변환 등의 추가 작업을 서버에서 처리한 후 S3에 업로드할 수 있습니다.
- 파일 업로드 과정 제어 가능: 서버에서 업로드 상태를 추적하고 제어할 수 있어 에러 핸들링이나 업로드 중간 상태 등을 다룰 수 있습니다.
단점:
- 서버 부하: 서버가 클라이언트에서 받은 파일을 먼저 저장한 후 S3로 다시 업로드해야 하므로 서버에 부하가 걸립니다. 특히 대용량 파일의 경우 서버 리소스를 많이 소모할 수 있습니다.
- 파일 전송 지연: 서버가 중간에서 파일을 받아서 S3로 업로드하는 방식이기 때문에 파일 전송 속도나 지연 시간에 영향을 미칠 수 있습니다.
Pre-signed URL을 사용한 영상 업로드
해당하는 사진과 같이 서버는 S3측에 Presigned URL 요청과 클라이언트로 해당하는 URL을 전달 하기만 하면 클라이언트가 바로 영상을 업로드 할 수 있게 됩니다.
장점
- 서버 부하 감소: 서버는 단지 Pre-signed URL을 생성하고 클라이언트에게 전달하는 역할만 합니다. 클라이언트는 직접 S3에 업로드하므로 서버는 파일을 처리할 필요가 없습니다.
- 속도 향상: 클라이언트가 직접 S3에 업로드하므로 서버를 거치지 않기 때문에 파일 업로드 속도가 빠르고, 서버의 리소스를 절약할 수 있습니다.
- 보안 향상: S3와 클라이언트 간의 직접 통신이 이루어지므로 서버는 파일 전송 과정에서 중개되지 않아 보안상 이점이 있습니다.
단점
- URL 유출 위험: Pre-signed URL이 외부에 유출되면 악용될 수 있습니다. 따라서 HTTPS를 사용하여 URL을 암호화해서 전송하고, URL의 유효 기간을 짧게 설정하는 것이 좋습니다.
- 업로드 상태 추적 어려움: 클라이언트가 직접 업로드하므로, 서버에서 업로드 진행 상태를 추적하거나 실시간으로 제어하기 어렵습니다. (단, 업로드 완료 후 URL을 통해 확인은 가능합니다)
- 짧은 유효 기간 문제: Pre-signed URL의 유효 기간이 너무 짧으면 클라이언트가 파일을 업로드하기 전에 URL이 만료될 수 있습니다. 따라서 업로드 예상 시간에 맞게 적절한 기간을 설정해야 합니다.
Pre-signed URL 사용 이유
서버 부하 감소 및 성능 향상
서버 부하가 중요한 문제로, 클라이언트에서 직접 파일을 업로드하도록 하여 서버 리소스를 절약할 수 있습니다.
서버에서 파일을 처리하지 않으므로 대용량 파일 업로드 시에도 서버의 부하를 최소화할 수 있습니다.
보안 측면 고려
Pre-signed URL을 사용하면 서버가 클라이언트에게 제공하는 일시적인 URL을 통해 인증된 사용자만 S3에 파일을 업로드할 수 있습니다. 이 URL은 만료 시간을 설정하여 보안성을 강화할 수 있으며, HTTPS를 통해 전송하여 중간자 공격을 예방할 수 있습니다.
속도 및 확장성
서버를 거치지 않고 클라이언트가 직접 S3에 업로드함으로써, 속도가 향상되고, 서버의 확장성이 향상됩니다. 서버가 직접 파일을 처리하는 방식에 비해 빠르고 효율적인 업로드가 가능합니다.
단점 보완
업로드 상태 추적이 어려운 단점은, 업로드 후 파일이 S3에 성공적으로 저장되었는지 확인하는 방식으로 보완할 수 있습니다. S3 객체의 메타데이터를 확인하거나, 추가적인 모니터링 툴을 사용하여 상태를 추적할 수 있습니다.
결론
- Pre-signed URL을 사용하는 방식은 서버 부하를 줄이고 성능을 향상시키는 데 유리하며, 보안도 잘 관리하면 충분히 안전하게 사용할 수 있습니다.
- 또한, 서버가 클라이언트와 직접 S3 간의 파일 업로드를 중개하지 않기 때문에 시스템의 확장성도 좋아집니다.