NestJs 찍먹

nero·2023년 4월 23일
0
post-thumbnail

개인적인 학습을 기록한 글이며, 정확하지 않을 수 있습니다.
틀린점은 지적해주시고, 참고만 해주시기 바랍니다

취준 준비하다 일탈..

난 자바 스프링이 주종인데 뭔가 MZ한 스타일 스타트업은 Nest + TypeScript 사용하는 듯.. JS 잘하는 편은 아니지만 TS에도 관심이 많았기 때문에 한번 찍먹해보려고 했다. 도커나 다듬을거나 아직 배울께 많지만 잠깐에 휴식할겸 Nest+ TypeScript 한번 잠깐 땡땡이 쳐보자

https://docs.nestjs.com/

그냥 공식문서 따라하기...이다..

Setting

$ npm i -g @nestjs/cli
$ nest new project-name

패키지 매니저 선택

? Which package manager would you ❤️  to use? 
  npm 
  yarnpnpm 

pnpm 궁금하긴했지만 웬지 마이너한 패키지 관리자 일꺼 같아서 yarn 을 선택하기로 했다. !

yarn run srart 

실행하구 localhost:3000

짜잔 !

구조

src 구조를 보자 !

소스
|----app.controller.spec.ts
|----app.controller.ts
|----app.module.ts
|----app.service.ts
|----main.ts
  • app.controller.ts: 단일 경로가 있는 기본 컨트롤러
  • app.controller.spec.ts: 컨트롤러에 대한 테스트
  • app.module.ts: 루트 모듈
  • app.service.ts: 기본 서비스
  • main.ts: Nest application 인스턴스를 생성하는 엔트리 파일

실행

nset g controller post

요롷게 하면 cotroller 틀을 만들어준다 편하다 !

Provider

  • Spring 에서 componet 기능이라고 할까
  • service, reposiotry, factory 들이 관계 DI 할수 있으며 Nest 런타임 시스템에 위임한다.

1. Service

  • postService 클래스를 만들어 보자.
$ nest g service post
  • 빠르게 클래스를 만들어주는 명령어이다

post.service.ts


//post.service.ts
import { Injectable } from '@nestjs/common';
import { Post } from './interfaces/post.interface';

@Injectable()
export class PostService {
  private readonly posts: Post[] = [];

  create(post: Post) {
    this.posts.push(post);
  }

  findAll(): Post[] {
    return this.posts;
  }
}
  • @Injectable()
    - Nest Ioc 컨테이너에서 관리할 수 있는 클래스임을 선언

2. 간단한 인터페이스

export interface Post {
  name: string;
  title: string;
  content: string;
}

3. controller에 DI 해보자

post.controller.ts

import { Body, Controller, Get, Param, Post, Query } from '@nestjs/common';
import { CreatePostDto } from './create-post.dto';
import { PostService } from './post.service';
import { Posts } from './interfaces/posts.interface';

@Controller('post')
export class PostController {
  constructor(private postService: PostService) {}

  @Get()
  async findAll(): Promise<Posts[]> {
    return this.postService.findAll();
  }

  @Post()
  async create(@Body() createPostDto: CreatePostDto) {
    console.log(createPostDto);
    this.postService.create(createPostDto);
  }
}
  • constructor에 postService를 DI해주면된다.

4.Module.ts 등록

  • 아마 명령어로 클래스를 만들었으면 자동으로 등록되어 있을 것이다.
    app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { PostController } from './post/post.controller';
import { PostService } from './post/post.service';

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

5. 최종확인

마지막으로 Postman, insomia같은 툴로 확인해보자

잘 동작한다!.

2부로 해볼것

  • 공식문서엔 Modules, Middleware, Excption fiters, Pipes, 등등 더있긴한데 일단은 시간날때마다 문서랑 만드는거 병행하면서 해봐야겠다
  • 근데 일단 그냥 sping같은 느낌이다. Js에 Mz한 맛은 잘 모르겠다..!
profile
겸손하게 배우는 개발자입니다

0개의 댓글