개요 테스트를 진행하다보니 쓸데없는 로그가 찍히는 경우가 생겼다. 특히 문제가 되는 건 아래와 같이 로그를 사용할 때였다. # some.service.ts import { Injectable, Logger } from '@nestjs/common'; @Injectable() export class SomeService { private readonly logger = new Logger(SomeService.name); } How to 이것도 해결은 간단했는데, 생각보다 문서 찾는데 헤맸다. # some.service.spec.ts import { MockLogger } from '{path}/logger.service.mock'; describe('SomeService', () = { beforeEac..
개요 회사에서 에러 로그 수집 시스템으로 Sentry를 사용하고 있다. 백엔드 테스트 코드 작성중, Sentry를 Mocking할 필요가 생겼고, 약간의 삽질도 한 겸, 정리해본다. 우리 회사는 Nest.js 백엔드를 사용하고 있다. 따라서 아래 문서는 Nest.js를 기준으로 설명한다. How to 우리는 Sentry를 위해 @ntegral/nestjs-sentry 패키지를 사용하고 있다. 테스트 코드에서 아래와 같이 mocking을 할 수 있다. # some.service.spec.ts import { SENTRY_TOKEN, SentryService } from '@ntegral/nestjs-sentry'; import { MockSentryService } from '{path}/sentry.se..
개요 HTTP를 통해 Controller에 전달되는 요청은 종류가 다양하다. HTTP 메서드도 여러가지 있지만, 데이터 전달 방식도 여러가지다. - Route Parameter 방식: localhost:3000/users/1 - Query 방식: localhost:3000/users?name=김만보&gender=male - Body 방식: localhost:3000/users (데이터는 body에 담겨서 전달됨) - 등등. 이 포스트에서는 NestJS에서 흔하게 쓰는 기초적인 방식 3가지 정도를 적어보려고 한다. - Route Parameter - Query - Body Body 방식의 경우, JSON 텍스트 방식만 다루려고 한다. (Multipart나 Graphql은 나중에...) Route Param..
[Provider] 클래스에 @Injectable() 데코레이터를 붙여서 선언한다. 이는 가장 흔한 생성자 기반 의존성 주입을 위한 방법인데, 다른 방법도 있다는 점은 일단 알아두자. Provider는 Nest의 기본 구성요소 중 하나인데, 모듈이나 컨트롤러와 달리 다양한 역할을 가질 수 있다. 대표적인 역할이 Service이고, Repository, Factory, Helper 등등 만들기 나름이다. 기본적으로 Nest에서 Provider란 의존성으로서 Injectable 한 요소다. 스프링에서도 중요한 개념인 Dependency Injection을 위한 요소라고 보면 된다. 가장 흔하게 사용되는 Provider 역할인 Service를 보자. // user.service.ts @Injectable() ..
[Controller] 클래스에 @Controller() 데코레이터를 붙여서 선언한다. Request를 핸들링 하고, Response를 돌려주는 역할. 일단 유저가 요청하면 Controller로 들어온다고 보면 된다. @Controller() 데코레이터는 route path의 prefix를 string 형태로 받을 수 있다. (Optional) 보통 Controller 단위로 라우팅을 그룹화 하기 때문에, prefix는 대부분 넣어주게 된다. 컨트롤러 하위 라우팅 구성요소에 prefix가 자동으로 붙기 때문에, 코드 중복도 줄여준다. // user.controller.ts @Controller('users') export class UserController { constructor( private re..