본문 바로가기

Backend

(5)
[Spring Boot]GlobalExceptionHandler (Feat. @ControllerAdvice) 코드를 작성하다 보면 중복으로 작성하는 코드가 생기기 마련이다. 그 중에서도 예외 처리 코드의 경우가 대표적이다. 중복되는 코드를 방지하기 위해 ExceptionHandler를 별도로 관리하는 전용 패키지를 생성해 준다. Resource가 없을 때 발생 시키는 ExceptionHandler와 전역으로 관리할 GlobalExceptionHandler 클래스를 생성했다. ResourceNotFoundException ResponseStatus value로 NOT_FOUND 상태를 받는다. RuntimeException클래스로부터 'message' 변수를 참조해서 메시지를 구성했다. @ResponseStatus(value = HttpStatus.NOT_FOUND) public class ResourceNot..
[Nest.js]핫 리로딩(Hot Reload) 설정 개발을 할 때 코드를 작성하고, 새로 작성한 코드를 적용하기 위해서는 서버를 멈추고 재시작을 반복해야 한다. 매 번 서버를 멈추고 다시 시작하는 것은 매우 번거로운 일이다. Nest.js를 사용하기 전에는 nodemon 모듈을 주로 사용했는데, Nest.js 에서는 Hot Reload 기능을 추가해서 사용할 수 있다. 공식문서에 Nest CLI를 설치 / 미설치 상황을 나누어서 정리가 돼 있는데, 난 CLI를 설치했기 때문에 설치한 경우를 기준으로 정리했다. 먼저 아래 명령어로 필요한 패키지들을 설치한다. npm i --save-dev webpack-node-externals run-script-webpack-plugin webpack 패키지들을 설치 한 후 프로젝트 폴더에 webpack-hmr.conf..
[Nest.js(Node.js)]Naver Cloud Platform 으로 문자 서비스(SMS) API 구현 현재 진행 중인 프로젝트에 갑자기 문자서비스를 추가할 계획이라고 해서 급하게 문자 api 서비스 제공업체를 알아보기 시작했다. 문자서비스 제공업체들 대부분이 정액제로 운영이 되더라. 다행히 네이버 클라우드 플랫폼(NCP)에서도 문자서비스를 제공하고 있고, SMS 50건까지 무료라고 하니 테스하기에도 적당할 듯 해서 NCP SENS(Simple & Easy Notification Service) API를 이용하기로 했다. 인증키 생성 문자서비스 구현을 위해서 먼저 Access Key ID와 Secret Key, 서비스 ID가 필요했다. 로그인 후 콘솔 우측 상단의 계정Icon → 계정관리 → 인증키 관리로 이동해서 신규 API 인증키 생성을 클릭하면 API 인증키를 발급받을 수 있었다. 서비스 ID는 콘솔..
[Nest.js]Parsing error: cannot read file tsconfig.json 실행할 때는 전혀 문제가 안되지만 상당히 거슬렸던 경고표시 Parsing error: cannot read file tsconfig.json 기본적으로 프로젝트의 parserOptions는 현재 작업 디렉토리 기준으로 확인되는데, eslint가 포함된 폴더와 다른 작업 디렉토리에서 실행하면 tsconfig.json @typescript-eslint/parser가 파일을 찾을 수 없다고 한다. .eslintrc.js 에 tsconfigRootDir을 __dirname 으로 설정하면 위 경고가 사라진다. parser: '@typescript-eslint/parser', parserOptions: { project: 'tsconfig.json', tsconfigRootDir: __dirname, // 추가 s..
[Nest.js] TypeError: (0 , cookie_parser_1.default) is not a function Nest.js 초기 세팅 중 아래와 같은 에러가 발생했다. (node:33324) UnhandledPromiseRejectionWarning: TypeError: (0 , cookie_parser_1.default) is not a function 찾아보니 import 때문에 발생한 문제라고 한다. tsconfig.json에 "esModuleInterop": true를 추가해주고 다시 시작하니 잘 된다. 결과물