더북(TheBook)

resizeAndUpload 함수가 클라우드 펑션스를 호출할 때 실행되는 함수입니다. 매개변수로 datacontext가 주어집니다. data에는 호출 데이터에 대한 정보가 담겨 있고, context에는 실행되는 함수 환경에 대한 정보가 담겨 있습니다. 직접 console.log해서 어떠한 정보들이 들어 있는지 확인해보는 것이 좋습니다.

폴더명이 original이 아니면 리사이징하지 않습니다. 버킷에 이미지가 생성될 때 다시 이 함수가 실행되는데, 리사이징한 이미지 때문에 다시 이 함수가 실행되지 않도록 막는 것입니다.

data 객체로부터 bucket(버킷명), name(경로)을 받아와 파일명과 확장자를 추출합니다. at(-1)은 배열의 마지막 요소를 가져오는 메서드입니다. 확장자는 대문자일 수도 있으니 소문자로 통일합니다.

storage.bucket 메서드로 버킷을 설정한 후 file 메서드로 파일의 경로를 지정합니다. 지정한 파일을 읽거나 쓰는 스트림을 생성할 수 있습니다. original 폴더로부터 파일을 읽어들이고, thumb 폴더로 파일을 써내려갑니다.

readStreamsharp 함수를 pipe로 연결합니다. sharpresize 메서드로는 크기를 지정합니다. 첫 번째와 두 번째 인수는 가로와 세로 너비를 의미합니다. 현재 200, 200으로 주어져 있습니다. 하지만 가로 200px, 세로 200px로 리사이징되는 것은 아니고, 세 번째 인수에 따라 리사이징합니다. 현재 fit: 'inside' 옵션을 주었습니다. 주어진 가로 세로 사이즈 안에 딱 맞게 이미지를 조정하라는 뜻입니다. 이외에도 다른 옵션이 더 있습니다. 다른 옵션을 설명한 공식 문서 링크는 16.6절에 준비해뒀습니다. 리사이징 후 pipe 메서드를 통해 writeStream과 연결됩니다.

writeStream이 성공적으로 마무리되었다면 프로미스를 resolve하고, 에러가 발생했다면 reject합니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.