gengminy
갱미니의 코딩일지
gengminy
전체 방문자
오늘
어제
  • 분류 전체보기 (61)
    • 🚀 프로젝트 (16)
      • 🎸 고스락 티켓 (4)
      • 🌞 내친소 (5)
      • 🥁 두둥 (7)
    • 📡 백엔드 (31)
      • 🌱 Spring Boot (13)
      • 🐱 Nest.js (10)
      • ⭐ Node.js (8)
    • 🏭 Infra (11)
      • ⚙ 준비를 위한 준비 (2)
      • 🥑 AWS (3)
      • 🐳 Docker (3)
      • ⚡ Github Actions (3)
    • 🌊 프론트엔드 (1)
      • 🌌 React.js (1)
    • 😎 주저리 (2)

블로그 메뉴

  • 💻Github
  • 📸Instagram
  • ✨Blog

공지사항

인기 글

태그

  • 네스트
  • 스프링부트
  • SlackAPI
  • docker
  • JSON
  • springboot
  • 깃헙액션
  • Spring
  • oauth2
  • nodejs
  • GithubActions
  • nest
  • github
  • JWT
  • AWS
  • OAuth
  • 도커
  • nestjs
  • 슬랙알림
  • 스프링

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
gengminy

갱미니의 코딩일지

[NestJs] 따라하면서 배우는 NestJs - 1 (기본 세팅 및 구조 파악)
📡 백엔드/🐱 Nest.js

[NestJs] 따라하면서 배우는 NestJs - 1 (기본 세팅 및 구조 파악)

2022. 7. 4. 15:14

 

방학 동안 열심히 백엔드 기술 스택 쌓기 위한 노력의 일환

spring 공부하기 + nestjs 공부하기

두개가 비슷한 점이 많아서 아직까지는 할만한 것 같다

무엇보다 곧 진행하는 프로젝트에서 nestjs를 사용하기 때문에

얼른 공부해둬야 싶어서 부랴부랴 강의 들으면서 정리하는 중이다

 

 

 

✅ Nestjs 설치

npm i -g @nestjs/cli

cli를 global 로 설치해서 어떤 디렉토리에서도 쓸 수 있도록 한다

 

 

 

✅ 프로젝트 생성

nest new (project-name)
또는
nest new ./

nest cli 를 설치했기 때문에 nest 명령어를 쓸 수 있다

현재 디렉토리인 ./를 입력하면 현재 위치에 프로젝트를 생성한다

 

 

 

✅ 새 모듈 추가

nest g module (module-name)

처음 공부하면서 이거 보고 되게 신기했다

같은 형식의 코드 복붙하는 것도 귀찮은 일인데

nest는 개발자의 편의성을 많이 배려하는듯 하다

 

src 디렉토리에 모듈네임에 해당하는 디렉토리와 모듈을 동시에 생성해준다

g는 generate의 약자이다

 

 

 

✅ 새 컨트롤러 추가

nest g controller (module-name) --no-spec

컨트롤러 추가도 cli에서 지원해준다

역시나 신기한 점은 파일 생성과 컨트롤러 등록까지 자동으로 해줌...

--no-spec 옵션은 테스트 파일을 생성하지 않는 옵션인데

아직은 테스트 코드를 짤 정도의 복잡한 어플리케이션이 아니기 때문에

일단 테스트 코드는 만들지 않는다

 

CREATE와 UPDATE가 되었다고 나온다 신기방기

 

 

✅ 컨트롤러와 핸들러

 

컨트롤러 내부에 HTTP 메소드를 받는 부분을 핸들러라고 한다

스프링에서는 골뱅이 @를 에노테이션이라고 불렀는데

NestJs 에서는 데코레이터라고 한다

컨트롤러는 @Controller('{module-name}')

핸들러는 @Get('{url}') 이런 식으로

 

 

 

✅ 새 서비스 추가

nest g service (module-name) --no-spec

서비스 코드 파일도 자동으로 만들어줌

서비스는 @Injectable 이라는 데코레이터 감싼다

 

 

📝 ./boards/boards.module.ts

import { Module } from '@nestjs/common';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';

@Module({
  controllers: [BoardsController],
  providers: [BoardsService],
})
export class BoardsModule {}

서비스는 해당 모듈에 해당하는 module 파일의 providers 항목에 등록해주면

의존성 주입이 된다

 

 

 

✅ DI (Dependency Injection)

 

📝 ./boards/boards.controller.ts

import { Controller } from '@nestjs/common';
import { BoardsService } from './boards.service';

@Controller('boards')
export class BoardsController {
  boardsService: BoardsService;

  constructor(boardsService: BoardsService) {
    this.boardsService = boardsService;
  }
}

컨트롤러에 서비스에 대한 의존성을 주입시키는 방법이다

타입스크립트 규칙으로 일단 프로퍼티를 명시해준 후 생성자를 통해 주입시킨다

 

근데 코드를 더 간결하게 쓸 수 있는데

import { Controller } from '@nestjs/common';
import { BoardsService } from './boards.service';

@Controller('boards')
export class BoardsController {
  constructor(private boardsService: BoardsService) {}
}

nest는 typescript 덕에 private 같은 접근제어를 할 수 있다

이 부분도 스프링이랑 비슷한 방법이라서 이해하기는 쉬웠다

 

저작자표시 (새창열림)

'📡 백엔드 > 🐱 Nest.js' 카테고리의 다른 글

[NestJs] 따라하면서 배우는 NestJs - 5 (레포지토리 구현 및 DB 이용 CRUD)  (0) 2022.07.07
[NestJs] TypeORM 사용 시 RepositoryNotFoundError 해결하기  (0) 2022.07.06
[NestJs] 따라하면서 배우는 NestJs - 4 (Postgres, TypeORM 적용)  (0) 2022.07.05
[NestJs] 따라하면서 배우는 NestJs - 3 (pipe와 validation)  (0) 2022.07.04
[NestJs] 따라하면서 배우는 NestJs - 2 (기본적인 CRUD 수행)  (0) 2022.07.04
    '📡 백엔드/🐱 Nest.js' 카테고리의 다른 글
    • [NestJs] TypeORM 사용 시 RepositoryNotFoundError 해결하기
    • [NestJs] 따라하면서 배우는 NestJs - 4 (Postgres, TypeORM 적용)
    • [NestJs] 따라하면서 배우는 NestJs - 3 (pipe와 validation)
    • [NestJs] 따라하면서 배우는 NestJs - 2 (기본적인 CRUD 수행)
    gengminy
    gengminy
    코딩

    티스토리툴바