Nest JS 란?

Pyo·2023년 12월 8일
0

얼마전 js,ts 문법을 공부한후 express를 선택해야할지 nestjs를 선택해야할지 고민이 많았다. 옛날에 express를 해보기도 했고 최근 배운 ts를 적용하기에는 nestjs가 더 괜찮다고 생각했고 무엇보다 스프링을 살짝 배워보고 express를 배울때 가장 낯설었던건 뭔가 비어있는 듯한 느낌? 구조화 되어있지 않았던 코드였던것 같다. 물론 장점이자 단점이 될수 있지만 실력이 부족한 나에게는 단점이 될수도 있겠다 싶어서 nestjs를 선택했다.

Nest JS

NestJS는 TypeScript를 기반으로 하는 프레임워크로, 서버 사이드 애플리케이션을 빌드하기 위한 것 이다. 다양한 서버 사이드 어플리케이션을 개발하고 유지보수하기 쉽도록 도와준다. NestJS는 Express와 같은 서버 프레임워크로, Express는 굉장히 쉽게 서버를 만들 수 있지만 구조화 되지 않는 문제를 해결하고자 나온 프레임워크가 NestJS이다.

Nest JS 사용하는 이유

  • 모듈화 : NestJS 애플리케이션은 모듈 기반으로 구조화되어 있다. 코드의 모듈화를 촉진하고 재사용성을 향상시키고. 각 모듈은 관련된 기능을 캡슐화하고 있다.

  • 의존성 주입 : NestJS는 의존성 주입 시스템을 기반으로 하여, 클래스 간의 의존성을 관리하여 코드를 테스트하거나 모듈 간의 상호 작용을 쉽게 구현할 수 있다.

  • 확장성 : GraphQL, Mongoose, TypeORM, Elasticsearch같은 라이브러리가 자체적으로 지원합니다.

  • 캡슐화 : 객체지향프로그래밍 OOP의 특성 중 하나인 캡슐화를 쉽게 할 수 있는데, NestJS는 비슷한 기능을 하는 컨트롤러, 서비스 등을 묶어 module 내에서 모두 관리한다.

Nest JS 프로젝트 생성

  • Nest JS CLI 전역 설치 : npm i -g @nestjs/cli
  • 프로젝트 생성 : nest new crud-api(프로젝트명)
    나는 crud-api라는 프로젝트를 생성할 것이다.

Nest JS 구조

처음 nest js 프로젝트를 생성하면 src 내부 파일들을 유심히 봐야 한다.

app.module.ts

전체 어플리케이션의 루트 모듈로 어플리케이션에서 사용하는 모듈,엔티티등을 정의한다.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports:[],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

app.contoller.spec.ts

app.controller.ts에 대한 유닛 테스트를 위한 파일이다.

import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [AppService],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('root', () => {
    it('should return "Hello World!"', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});

app.controller.ts

API의 path를 정의하고 의존성 주입을 통해 생성자를 service로 하여 service에서 정의한 비즈니스로직을 사용하는 파일이다.

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';

@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }
}

app.service.ts

구현해야할 비즈니스 로직을 함수로 구현하는 파일이다.

import { Injectable } from '@nestjs/common';

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello World!';
  }
}

main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

Nest JS 애플리케이션의 진입점으로 서버를 구축하는 파일이다.

실행해보기

이제 서버를 시작하면 된다. 나는 yarn을 사용하기 때문에 yarn start:dev를 터미널에 입력하면 된다.

  • 서버 실행 : yarn start:dev


이렇게 서버가 잘 실행 되었다.

0개의 댓글

관련 채용 정보