해결된 질문
작성
·
2.2K
2
기존의 user -> server -> s3 flow로 이미지 업로드를 진행 할 경우 Presigned url를 사용해 구현할 경우와 대비해서
'네트워크 대역폭'이 증가하여 속도적인 측면에서 단점을 가진다고 설명해주셨습니다.
즉 Presigned url을 사용하면 서버에서는 Presign url만 클라이언트에게 던져주고, 실제 파일 업로드는
클라이언트에서 진행되기 때문에 '트래픽 및 대역폭'을 신경쓰지 않아도 된다인거 같은데 여기서 '대역폭의 상관관계(Presigned url 사용 유무에 따른)'가 잘 와닿지 않아서 보충 설명 부탁드려도 될까요?
감사합니다!
답변 1
2
Dev님 안녕하세요 :)
이미지 업로드는 매우 부하가 큰 작업이에요. JSON을 주고 받는 일반 API요청에 비하면 훨씬 부하가 큽니다. 이미지 파일 용량 자체가 매우 크니깐요. 따라서 이미지 업로드가 백엔드 서버를 거치게 되면 백엔드 서버가 금방 죽을 수 있어요. 혹은 동시 업로드 요청수를 제한해야될텐데 이건 유저경험이 별로죠.
프론트에서 바로 S3와 같은 파일저장소나 데이터베이스로 데이터를 보내지 않고 백엔드를 거치는 이유를 생각해봐야 되요. 보안문제 때문이죠. 아무나 업로드하고 삭제하면 안되니깐요. 저희가 정해둔 규칙 안에서 데이터가 관리되어야겠죠.
일반적인 API요청은 전달되는 데이터양이 적기 때문에(많아야 킬로바이트 단위) 백엔드를 거쳐서 디비에 저장되어도 괜찮아요. 하지만 이미지는 보통 메가바이트 단위죠?
PresignedUrl을 이용하면 이미지를 업로드할 때 백엔드 서버를 거치지 않고 클라이언트에서 바로 S3로 업로드가 가능해져요. 원래는 이미지를 백엔드가 이미지를 S3로 전달함과 동시에 보안절차(aws sdk secret key활용해서 aws s3 접속)도 같이 한번에 진행이 되죠. 이 과정을 분리시키는거에요. 백엔드는 presignedUrl 생성으로 보안절차 작업만 해주는겁니다. Client가 AWS S3로 바로 업로드할 수 있도록요.
퍼즐이 맞춰지는 기분이네요.
답변 감사합니다 :)