내배캠 92일차

·2023년 2월 13일
0

내일배움캠프

목록 보기
101/142
post-thumbnail

인프런에서 '따라하며 배우는 NestJS' 수업을 듣고 정리하고자 한다

nest명령어로 생성했을때 기본구조

nest명령어로 생성했을때 기본구조

NestJS 모듈?

NestJS 모듈?

모듈은 @Module() 데코레이터로 주석이 달린 클래스입니다.
@Module() 데코레이터는 Nest가 애플리케이션 구조를 구성하는데 사용하는 메타 데이터를 제공합니다.

각 응용프로그램에는 하나 이상의 모듈(루트 모듈)이 있습니다. 루트 모듈은 Nest가 사용하는 시작점입니다. - 현재 AppModule이 루트 모듈!

모듈은 밀접하게 관련된 기능집합으로 구성요소를 구성하는 효과적인 방법! 기능 별로 만드는게 일반적 - BoardModule, AuthModule...

같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용합니다 - 그림과 같이 BoardModule안에 BoardController, BoardService, BoardRepository..를 넣어줌!

모듈은 기본적으로 싱글 톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유할 수 있습니다.

동일한 인스턴스를 공유

위 사진처럼 하나의 동일한 공유모듈을 여러 모듈에서 사용가능하다는 의미!

Board 모듈 생성

nest g module boards

=> src폴더안에 boards폴더가 생기고 그 안에 boards.module.ts 가 자동으로 생성된다.

Controller?

컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환합니다.

@Controller 데코레이터로 클래스를 데코레이션하여 정의됩니다.

데코레이터는 인자를 Controller에 의해서 처리되는 "경로"로 받습니다.

Handler?

핸들러는 @Get, @Post, @Delete 등과 같은 데코레이터로 장식된 컨트롤러 클래스 내의 단순한 Method입니다.

Board 컨트롤러 생성

nest g controller boards --no-spec

  • --no-spec : 테스트를 위한 소스코드 생성을 안하겠다는 의미

Providers?

프로바이더는 Nest의 기본개념입니다. 대부분의 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼등 프로바이더로 취급될 수 있습니다.

프로바이더의 주요 아이디어는 종속성으로 주입할 수 있다는 것입니다.
즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임될 수 있습니다.

Provider를 사용하기 위해서는 이것을 Nest에 등록해줘야합니다.
등록은 Module파일에서 할 수 있으며, module파일에 providers 항목안에 해당 모듈에서 사용하고자하는 Provider를 넣어주면 됩니다.

Service?

서비스는 소프트웨어 개발내의 공통 개념!
@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리케이션 전체에서 사용 될 수 있다.

서비스는 컨트롤러에서 데이터의 유효성 체크하거나 데이터 베이스에 아이템을 생성하는 등의 작업을 하는 부분을 처리한다.

Dependency Injection

앞서 정리한적이 있는데 의존성주입(DI)는 우리가 service를 controller에서 이용하기 위해 사용하는 방법이다.

의존성주입(DI)

Board 서비스 생성

nest g service boards --no-spec

service 안에서는 데이터베이스에서 데이터를 가져오거나 데이터베이스 안에 게시판 생성할때 그 생성한 게시판 정보를 넣어주는 등의 로직을 처리할 것!

기존 방식

접근제한자를 이용

접근 제한자 (public, protected, private)를 생성자(construnctor) 파라미터에 선언하면 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언됩니다.

접근제한자를 이용

  • private를 사용하면 boardsService 프로퍼티는 BoardsController 클래스 내부에서만 사용 가능!!

전체 게시글을 불러오는 함수생성

BoardsService
BoardsController

localhost:3000/boards
에서 []이 잘 뜨는 모습을 볼 수 있다.

Board Model 파일 생성

게시물에 필요한 데이터가 어떤 것이 있는지 정의해 주기 위해서 게시물의 모델을 만들어 줄 것입니다.

board.model.ts 파일 생성

모델을 정의하기 위해서는 Class나 Interface를 이용하면 된다.

  • Interface : 변수의 타입만을 체크

  • Class : 변수의 타입도 체크하고, 인스턴스 또한 생성가능

게시판모델

타입을 정해주게 되면 원하는 타입과 다른 코드를 사용할 시 에러가 발생하고 코드를 읽는 입장에서 더 코드를 쉽게 이해할 수 있음.

profile
개발자 꿈나무

0개의 댓글