전체 글

전체 글

    Express에서 DI 프레임워크 만들어보기

    Nodejs 진영에서 DI/IoC를 사용해 서버를 구축하기 위해선 DI 프레임워크인 Nestjs를 사용하거나 Express에서 typedi를 활용해 서버를 구축해야 한다. Nestjs에선 데코레이터(@)와 Module을 활용해 의존성들의 관계만 신경 써주면 쉽게 주입받아 관리할 수 있고, Express에서 typedi로 의존성을 관리하는 것도 비슷하다. (@Service 데코레이터를 통해서 IoC 컨테이너에 자동으로 등록되고 런타임 때 typedi를 통해 알아서 주입받아 사용하는 형태다) 최근 들어 Nestjs에서 데코레이터를 커스텀해 사용할 일이 많아지다 보니 도대체 데코레이터의 동작원리가 어떻게 된 건지 궁금해졌다. 하지만 Nestjs에서 제공하는 커스텀 데코레이터 메서드들은 한번 더 추상화된 메서드..

    Nest.js에서 모듈간의 의존성 관리하기

    Nest.js를 사용해서 개발하게 되면 도메인 모델을 기준으로 수많은 모듈이 생기게 된다. 도메인 모델 별로 나누기 때문에 해당 파일이 어떤 역할을 하는지 명시적으로 알 수 있어 매우 편리하지만 서로 다른 모듈끼리 의존성을 관리해줘야 한다. 서로 다른 모듈의 의존 관계 설정 아래는 예시 코드이다. // user.module.ts import { Module } from '@nestjs/common'; import { UserService } from './user.service'; @Module({ providers: [UserService], exports: [UserService], }) export class UserModule {} // auth.module.ts import { Module } ..

    AuthGuard 예외처리 조건 만들기

    AuthGuard는 Nestjs에서 제공하는 미들웨어이다. AuthGuard는 Strategy와 사용되는데 보통 Passport 라이브러리를 활용하여 다양한 인증 전략을 구성할 수 있게 해 준다. 아래는 예시 코드이다. 보통 Controller layer에서 데코레이터를 활용해 사용할 수 있다. (라우터에서도 사용 가능함) 여기서 'jwt'는 Passport를 활용해 작성된 Strategy이고, 거기에 decorator로 만든 user.decorator까지 사용하게 되면 http 통신이 올 때 먼저 토큰 검증부터 진행할 수 있다. // Controller layer @Controller('example') export class ExampleController { constructor(private ex..