Nest를 알아보자 [0]

BBAKJUN·2021년 11월 26일

NestJS

목록 보기
1/3
post-thumbnail

구조를 이해해보자


나는 포트폴리오용 백서버 구축을 위해 이름을 portfolio-back으로 이름 지었다...

src/app.controller.spec.ts

는 일단 삭제하였는데 나중에 필요하면 다시 만들예정!

src
|--- app.controller.ts
|--- app.module.ts
|--- app.service.ts
|--- main.ts

다필요없고 src디렉토리부터 확인해보려한다.

service -> controller -> module -> main.ts 순서대로 흘러간다고 생각하면 편할듯하다.?..?

CLI 프로젝트 생성파일 분석

main.ts

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

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

포트열어주는건 디폴트로 3000으로 지정되어있던데,,
저는 3000을 프론트포트로 사용해서 4000을 열어주었습니다!

main.ts에서는 bootstrap 함수를 만든뒤 바로 사용하고있고 이 이름은 바꿔도된다.
하지만 main.ts이름은 바꾸면안된다고하네요? 맞나 안맞나는 모르겠음

bootstrap 함수의 존재 이유

NestFactory 클래스를 이용해 app이라는 Nest 어플리케이션 인스턴스를 생성한다. 그리고 4000번 포트를 열어준다
AppModule은 무엇인가? 는 커맨드 좌클릭을 해보자

근데 프론트랑 퍼블리싱하던 나한텐 부트스트랩이 왠지 그게 생각나는걸,,,

app.module.ts

AppModule.ts 커맨드클릭을해보니 이파일에 도착했다.

여기서 선언된 모듈들의 조합으로 nest의 구조가 결정된다고한다..? 아직은 잘몰게씀,,
app.module.ts은 모든 것의 루트 모듈역할을 한다. app module안에는 모든것이 import 되어야한다

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

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

AppModule은 @Module이라는 데코레이터가 달려있는 비어있는 클래스다

이 데코레이터를 통해 모듈에서 사용할 controllers와 providers를 인스턴스화하고 Appmodule로 묶어서 내보낸다

데코레이터가 무엇인지 모르는 난 링크를 걸었다..
쉽게 말하면 클래스에 함수 기능을 추가 할 수있게한다. nestJs에서는 데코레이터가 매우 많이 사용된다.

이제 AppController를 확인해볼 차례다..

app.controller.ts

controller는 url을 가져와서 함수를 실행한다
뭔가 express에서의 router와 비슷한느낌이 드는데 말이지..

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();
  }

  @Get('/hello') // 내가 잠깐 테스트해보냐고 만듬
  sayHello(): string {
    return 'HEY~';
  }
}

해당 localhost:4000으로 http get요청이 들어올경우 getHello 함수를 실행하고 Controller 클래스에서 정의한 appServce의 getHello 함수를 리턴한다.

localhost:4000/hello로 http get 요청이 들어올경우엔 sayHello 함수를 실행한다

Hey~

controller에서 특정 url에 반응하는 함수로직을 짤수있다고한다. 하지만 그러지 않고 service에서 담당한다고한다..
내가 심심해서만든 sayHello함수는 잘못만들었다는것!!!

app.service.ts

service에서는 비지니스 로직을 작성한다. 유저에게 제공되는 로직이라하여 service라고 불린다고한다

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

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

provider는 단순히 @Injectable() 데코레이터 주석이 달린 클래스를 말한다.
provider객체는 런타임에 NestJs에 의해 다른 모듈로 주입될수있다...
21.11.26 나는 지금 이말이 전혀 이해안됨 따로 공부하겠음

provider는 service를 포함해 repository, factory, helper 등이 될수있다.

저는 프론트엔드공부했었기에 제가 가져오는 정보가 정확하지가 않습니다,,,, 이 포스팅은 그냥 공부용이에요

profile
함께 일하고 싶은 환경을 만들어가는 프론트엔드 개발자 박준형입니다. 블로그 이전 [https://dev-bbak.site/]

0개의 댓글