Graphql FileUpload 방식으로 그리고 GCP를 활용하여 파일 업로드를 구현하는 작업을 하였다.
역시 수업시간에 따라 쓰는 입장이어서 이번에 차근 차근 잘근잘근 하려고 노력했다.
우선, nestjs Docs에 File Upload 형식이랑은 달랐다. 그리고 다른 File Upload 방식을 봐도 수업시간에 배운것은 짬뽕 처럼 느껴졌다. 아무래도 프론트에서 graphql 방식으로 그리고 react를 통해서 파일을 받기 때문에 이렇게 배우는 것이 아니가 싶었다.
그러면 graphql-upload라는 라이브러리를 npmjs.com 에서 찾아 보았다. 그렇게 가보니 git-hub
형식의 홈페이지가 있었고, 거기 예시 코드는 또 수업시간에 배웠던 것과는 차이가 있어 보였다.
그럼 GCP Docs 를 찾아보자. 그러고 보니 @google-cloud/storage라는 라이브러리도 사용하였다. pipe니, .on이니 이런것도 처음 접해봤다. GCP에는 뭔가 있겠지 찾아갔지만 장황한 설명... 버킷?..이 뭐였더라..? creatReadStream?, creatWriteStream...? 하나 하나 찾아보니 모르는 것 투성이었다.
그래도 배웠던 것과는 유사하게 나와 있어서 이해가 조금 수월한 편이었다. 수업시간에 배웠던 것과 같이 요약해보자.
graphql-upload라이브러리를 사용하여 라이브러리에서 지원하는 FileUpload type으로 외부에서 파일을 받는다.
google-cloud 에서 지원하는 라이브러리를 사용 하여 google-cloud에 자신의 storage를 연결하고 해당 파일을 업로드 한다.
이 모든 것이 끝나면 저장된 URL 주소를 반환한다.
전체적이 형식은 graphql upload방식을 따르지만 그안에 있는 파일 업로는 google-cloud 방식을 사용했기 때문에 개인적으로 어렵게 이해했다.
결제를 등록할 때는 Isolation level을 최대로 올려, DB에 혼선을 막고자 했다(전문적인 단어는 추후에 정리해서 올리도록 하겠다!!). 그렇다면 조회하는 로직은 비교적 수월해 되지 않을까 라고 생각했다. 더구나 이번 팀프로젝트에서는 마이페이제서 결제 내역만 보는 것이기 때문에 DB 상으로 충돌이 더욱 적을 것이라고 예상한다. 이미 등록할 때 Isolation level을 최대로 올렸기 때문에 조회할 때는 굳이 올리지 않아도 되지 않을까라고 이해하고 있다. 이건 나중에 좀더 정리하면서 이해해보자.
동시에 QueryBuilder를 사용하여 조회 로직을 짰는데, TypeORM Docs를 보면 이렇게 설명 되어 있다.
QueryBuilder is one of the most powerful features of TypeORM - it allows you to build SQL queries using elegant and convenient syntax, execute them and get automatically transformed entities.
오전에 FileUpload를 끝내려고 했는데 생각보다 막히는 것이 많았다. 특히 postman에서 string 파일을 하다 더 보내려고 했는데 ㅠㅠ 그건 끝내 어떻게 하는지 못 찾았다.