Cookidge 프로젝트를 만들다가 레시피 생성이 안되는 오류를 만나게 되었다. 로컬 환경에서는 잘 동작하지만 배포 환경에서 오류가 발생하는 것이다.
배포 환경에서의 오류라는 점에서, Vercel의 문제인가 확인해 보기 위해 구글링을 해보았다. 그리고 다음과 같은 정보를 얻었다.
Vercel 서버리스는 한 번의 요청 본문 크기에 제한이 있으며, 한 요청 본문 당 4.5MB의 사이즈로 제한한다는 것이다.
Cookidge 레시피 생성 폼을 확인해 보면, 이미지가 들어가는 항목이 많다.
multiple
대표 사진정상적인 요리 레시피를 생성한다고 가정했을 때, 한 번의 create
요청에 적어도 5개의 이미지가 들어갈 것이다.
폼 onSubmit
할 때, 이미지들을 browser-image-compression
라이브러리를 통해 압축하여 제공하는 것이다.
onSubmit
에 압축하는 로직이 포함되어 로딩 시간이 더 오래 걸린다.현재는 한 개의 레시피 폼에서 요리 과정 이미지를 모두 처리하는데, 각각의 요리 과정 저장을 개별 요청으로 하는 것이다. 이렇게 하면 이미지는 4.5MB를 넘을 확률이 줄어든다.
Cloudinary Api는 리액트에서 바로 저장소에 접근하는 것이 가능하다. 이를 통해 이미지의 URL 또는 Public ID를 요청 본문에 포함 시키면서 4.5MB를 넘기지 않을 수 있다.
백엔드의 multer
를 사용하지 않아도 된다. 따라서 요리 사진과 요리 과정 사진을 처리하기 위한 복잡한 로직을 제거할 수 있다.
해결 방법으로는 1번을 골랐다. 이유는 1번이 장점이 많다기 보다는 2번, 3번의 단점이 크게 작용하기 때문이다. 2번은 딱히 장점이랄 것은 없고, 3번은 이미지 미리보기 로딩이 UX를 크게 저하 시키고, 로직도 꽤나 많이 바꿔야 하기 때문이다.
😑 이번 계기로, Vercel 서버리스의 특징을 새로 알게되고 이에 맞서 싸우는 경험이 생겨 나는 더 강해졌다.