외부활동/JSCODE 서버[Nest]

3회차 API 서버 배포[ CORS세팅,에러처리]

softmoca__ 2024. 2. 29. 13:29
목차

학습 목표

  • 환경 변수 분리
  • CORS 셋팅
  • 예상치 못한 에러에 대한 처리
  • AWS의 Elastic Beanstalk를 활용한 서비스 배포

✅ 요구 사항

  1. 환경 변수를 분리해라.
    • 로컬 환경, 배포 환경 2가지로 환경 변수를 분리해라.
    • Node.js에서는 .env를 활용해라.
    • Spring Boot에서는 application.yml(또는 application.properties)를 활용해라.
  2. CORS를 설정해라.
  3. 예상치 못한 에러에 대해, 상태 코드 500과 에러 메시지로 응답하는 전역 예외 처리 설정을 해줘라.
  4. AWS의 Elastic Beanstalk를 활용해서 서비스를 배포해라.

 

환경 변수를 분리는 이전 시간에 데이터베이스를 연결하고 따로 이미 설정해 주었다.

 

CORS

main.ts에서 cors세팅을 해주었다.

 

 

예상치 못한 에러에 대해, 상태 코드 500과 에러 메시지로 응답하는 전역 예외 처리 설정

http-exception.filter.ts에서 에러 발생시 필터링 할수 있게 세팅하였다.

 

 

필터에 대한 적용은 두가지가 있다.

1. 각각에 적용

2 전역에 적용

 

1. 각각에 적용

@Post()
@UseFilters(HttpExceptionFilter)
async create(@Body() createCatDto: CreateCatDto) {
  throw new ForbiddenException();
}

 

이후 이렇게 UserFilters를 사용해서 해당하는 필터(HttpExceptionFilter)를 인자로 넘겨주고  create함수 안에서 Exceiptiion이 발생하면  exception에 대한 내용이 필터(HttpExceptionFilter)로 넘어 가서 반환이 된다.

 

위와 같이 errorr객체에서 인자로 준 메세지를 받아 올 수 있다.

컨트롤러의  클래스 단이나 함수 단에서 걸어서 사용할 수 있다.

 

 

2 전역에 적용

main.ts

  app.useGlobalFilters(new HttpExceptionFilter());

 

error가 string일 경우 아닐경우 분기 처리를 해준뒤(string일경우 함수or컨트롤러별로 필터를 씌워 준 인자 아닐경우 전역에서 예상치 못한 에러에 대한 경우) url을 이상하게준 경우 원래 nest에서 자동으로 응답하는 에러 처리가 아닌 내가 커스텀한 에러 응답을 만들었다.