인프런에서 '따라하며 배우는 NestJS' 수업을 듣고 정리하고자 한다
모듈은 @Module() 데코레이터로 주석이 달린 클래스입니다.
@Module() 데코레이터는 Nest가 애플리케이션 구조를 구성하는데 사용하는 메타 데이터를 제공합니다.
각 응용프로그램에는 하나 이상의 모듈(루트 모듈)이 있습니다. 루트 모듈은 Nest가 사용하는 시작점입니다. - 현재 AppModule이 루트 모듈!
모듈은 밀접하게 관련된 기능집합으로 구성요소를 구성하는 효과적인 방법! 기능 별로 만드는게 일반적 - BoardModule, AuthModule...
같은 기능에 해당하는 것들은 하나의 모듈 폴더안에 넣어서 사용합니다 - 그림과 같이 BoardModule안에 BoardController, BoardService, BoardRepository..를 넣어줌!
모듈은 기본적으로 싱글 톤이므로 여러 모듈간에 쉽게 공급자의 동일한 인스턴스를 공유할 수 있습니다.
위 사진처럼 하나의 동일한 공유모듈을 여러 모듈에서 사용가능하다는 의미!
nest g module boards
=> src폴더안에 boards폴더가 생기고 그 안에 boards.module.ts 가 자동으로 생성된다.
컨트롤러는 들어오는 요청을 처리하고 클라이언트에 응답을 반환합니다.
@Controller 데코레이터로 클래스를 데코레이션하여 정의됩니다.
데코레이터는 인자를 Controller에 의해서 처리되는 "경로"로 받습니다.
핸들러는 @Get, @Post, @Delete 등과 같은 데코레이터로 장식된 컨트롤러 클래스 내의 단순한 Method입니다.
nest g controller boards --no-spec
--no-spec
: 테스트를 위한 소스코드 생성을 안하겠다는 의미프로바이더는 Nest의 기본개념입니다. 대부분의 기본 Nest 클래스는 서비스, 리포지토리, 팩토리, 헬퍼등 프로바이더로 취급될 수 있습니다.
프로바이더의 주요 아이디어는 종속성으로 주입할 수 있다는 것입니다.
즉, 객체는 서로 다양한 관계를 만들 수 있으며 객체의 인스턴스를 "연결"하는 기능은 대부분 Nest 런타임 시스템에 위임될 수 있습니다.
Provider를 사용하기 위해서는 이것을 Nest에 등록해줘야합니다.
등록은 Module파일에서 할 수 있으며, module파일에 providers 항목안에 해당 모듈에서 사용하고자하는 Provider를 넣어주면 됩니다.
서비스는 소프트웨어 개발내의 공통 개념!
@Injectable 데코레이터로 감싸져서 모듈에 제공되며, 이 서비스 인스턴스는 애플리케이션 전체에서 사용 될 수 있다.
서비스는 컨트롤러에서 데이터의 유효성 체크하거나 데이터 베이스에 아이템을 생성하는 등의 작업을 하는 부분을 처리한다.
앞서 정리한적이 있는데 의존성주입(DI)는 우리가 service를 controller에서 이용하기 위해 사용하는 방법이다.
nest g service boards --no-spec
service 안에서는 데이터베이스에서 데이터를 가져오거나 데이터베이스 안에 게시판 생성할때 그 생성한 게시판 정보를 넣어주는 등의 로직을 처리할 것!
접근 제한자 (public, protected, private)를 생성자(construnctor) 파라미터에 선언하면 접근 제한자가 사용된 생성자 파라미터는 암묵적으로 클래스 프로퍼티로 선언됩니다.
private
를 사용하면 boardsService 프로퍼티는 BoardsController 클래스 내부에서만 사용 가능!!
localhost:3000/boards
에서 []이 잘 뜨는 모습을 볼 수 있다.
게시물에 필요한 데이터가 어떤 것이 있는지 정의해 주기 위해서 게시물의 모델을 만들어 줄 것입니다.
board.model.ts
파일 생성
모델을 정의하기 위해서는 Class나 Interface를 이용하면 된다.
Interface : 변수의 타입만을 체크
Class : 변수의 타입도 체크하고, 인스턴스 또한 생성가능
타입을 정해주게 되면 원하는 타입과 다른 코드를 사용할 시 에러가 발생하고 코드를 읽는 입장에서 더 코드를 쉽게 이해할 수 있음.