[GCP 부하분산] enableVersioning을 사용하여 에러 해결

gwanhun·2023년 4월 27일
0
post-custom-banner

현재 미국, 유럽, 한국 서버를 운영중인데 호주에도 납품이 진행 되었었다. 하지만 1곳 밖에 없기 때문에 호주 서버를 따로 오픈하기에는 비용적인 부담이 있어서 미국 서버로 우회 하도록 하였다.

gcp에서 부하 분산 서비스로 서버 3곳을 묶어 놓으면 자체적으로 가까운 대륙리전에 있는 vm서버로 보내지는데 호주는 가까운 대륙리전이 한국이기 때문에 /us를 붙여 라우팅 규칙으로 미국 서버로 보내지도록 하였다.

예전에 미국서버가 터져서 지우고 다시 복구한적이 있었는데 한국기준으로 복구하여 로컬에서 수정한 부분은 따로 기록이나 백업이 되어있지 않아서 문제가 발생 되었다.

문제는 예를 들어 /user/login, /us/user/login이 같은 user컨트롤러의 login 으로 가야 하는데 /us부분이 문제가 되어 발생 되었다.
/us로 시작되는 요청이 들어오면 무시하도록 설정 하였는데 관련 설정을 따로 기록하지 않아서 찾는데 오랜 시간 소모 하였다

하여 여러 가지 방법을 찾아봤는데 버져닝 코드를 사용하여 모든 컨트롤러에 추가 하는 방법을 알려줬는데 양이 너무 많고 일일이 수정 하기에는 문제가 생길 가능성이 높기 때문에
예전에 main.ts에서 한 번에 처리했던것 같아서 그 방법을 찾아 헤매던중 결국 찾아 냈다.

결론은 enableVersioning을 사용하여 api 요청 맨앞에 ‘’, ‘us’가 오면 무시되고 ‘’으로 처리 되도록 하였다.

/////main.ts에서 
async function init(): Promise<void> {
  const server = await NestFactory.create<NestExpressApplication>(AppModule, {
    // logger: new AppLoggingService(),
  });

  server.useStaticAssets(join(__dirname, '..', 'public'));
  server.setBaseViewsDir(join(__dirname, '..', 'views'));
  server.setViewEngine('hbs');
  ///////////////////////////////// 추가된 코드
  server.enableVersioning({
    //us -- us 서버 url로 설정 위해
    type: VersioningType.URI,
    defaultVersion: ['', 'us'],
    prefix: '',
  });
  ///////////////////////////////////
  const app = new Application(server);
  await app.bootstrap();

  app.startLog();
}

참고
비슷한 질문 : https://stackoverflow.com/questions/70740246/how-to-make-uri-versioning-optional-in-a-nestjs-rest-application
NestJS 공식문서: https://docs.nestjs.com/techniques/versioning

profile
주니어 백앤드 개발자
post-custom-banner

0개의 댓글