➊ resizeAndUpload 함수가 클라우드 펑션스를 호출할 때 실행되는 함수입니다. 매개변수로 data와 context가 주어집니다. data에는 호출 데이터에 대한 정보가 담겨 있고, context에는 실행되는 함수 환경에 대한 정보가 담겨 있습니다. 직접 console.log해서 어떠한 정보들이 들어 있는지 확인해보는 것이 좋습니다.
➋ 폴더명이 original이 아니면 리사이징하지 않습니다. 버킷에 이미지가 생성될 때 다시 이 함수가 실행되는데, 리사이징한 이미지 때문에 다시 이 함수가 실행되지 않도록 막는 것입니다.
➌ data 객체로부터 bucket(버킷명), name(경로)을 받아와 파일명과 확장자를 추출합니다. at(-1)은 배열의 마지막 요소를 가져오는 메서드입니다. 확장자는 대문자일 수도 있으니 소문자로 통일합니다.
➍ storage.bucket 메서드로 버킷을 설정한 후 file 메서드로 파일의 경로를 지정합니다. 지정한 파일을 읽거나 쓰는 스트림을 생성할 수 있습니다. original 폴더로부터 파일을 읽어들이고, thumb 폴더로 파일을 써내려갑니다.
➎ readStream과 sharp 함수를 pipe로 연결합니다. sharp의 resize 메서드로는 크기를 지정합니다. 첫 번째와 두 번째 인수는 가로와 세로 너비를 의미합니다. 현재 200, 200으로 주어져 있습니다. 하지만 가로 200px, 세로 200px로 리사이징되는 것은 아니고, 세 번째 인수에 따라 리사이징합니다. 현재 fit: 'inside' 옵션을 주었습니다. 주어진 가로 세로 사이즈 안에 딱 맞게 이미지를 조정하라는 뜻입니다. 이외에도 다른 옵션이 더 있습니다. 다른 옵션을 설명한 공식 문서 링크는 16.6절에 준비해뒀습니다. 리사이징 후 pipe 메서드를 통해 writeStream과 연결됩니다.
➏ writeStream이 성공적으로 마무리되었다면 프로미스를 resolve하고, 에러가 발생했다면 reject합니다.