Why?

MSA 구조로 작업을 하다보니 단순한 FileUpload도 Nest.js 에 레퍼런스가 있는데 Gateway를 통과해서 전달해줘야하니 작업의 양이 2배가 되었다. microservice에서 클라이언트가 원하는 서비스를 제공하는데 초점을 두어야 하기에 Gateway에서 파일을 클라우드로 업로드 하는 로직을 구현하지 않았다.

어떤 어려움이 존재하는가

Nest.js 에서 Gateway와 Microservice 간 통신을 할 때 @MessagePattern, @EventPattern으로 데이터를 주고받는데 하필 multi/form-data 타입은 모듈로 주고 받을 수 없다. 따라서 Gateway와 Microservice 간 multi/form-data를 주고받을 수 있는 새로운 방법이 필요하다!!

How?

  1. microservice 이외에 core 서비스에 접근할 수 있는 또다른 port를 연동해놓는다.
  2. core 서비스에서 Cloud로의 파일 업로드 기능을 구현한다.
  3. Client가 Gateway에게 파일을 넘길 수 있는 url을 제공해준다.
  4. Gateway 내부에서 Client가 보내준 파일을 정형화한다.
  5. Gateway가 정형화한 파일 형식을 기반으로 core 서비스 url을 통해 업로드를 진행한다.

What?

위 how와 1대1로 대응하여 구체적인 방안을 설명하겠다.

  1. core 서비스를 하이브리드 어플리케이션의 형태로 구현한다.
  2. Multer-S3와 NCloud를 연결하여 @FilesInterceptor에 정의해놓는다.
  3. Gateway에서도 @UploadedFile을 정의해놓는다.
  4. Client가 보내준 파일을 Server-Side FormData로 저장한다.
  5. Gateway 내부에서 core 서비스 url로 FormData를 post 한다.