끄적이는 개발노트
NestJS 연습 프로젝트(Movie) - Service 기본 사용법 본문
이번 포스트에서는 service를 다뤄본다.
NestJS의 이전 포스트를 봤으면 알겠지만, controller는 url을 매핑하고, 리퀘스트를 받고, query를 넘기고 함수를 리턴하는 역할을 한다.
그렇다면 service는 무슨 역할을 할까?
바로 로직을 관리하는 역할을 한다.
이 때, Single-responsibility principle 정책을 통해 하나의 module, class는 반드시 하나의 기능을 담당해야 한다는 정책이다. 이를 명심하고 service를 만들어본다.
1. service 생성
controller를 생성할 때와 마찬가지로 nest g 를 통해 생성한다.
$> nest g s
이름을 똑같이 movies로 설정해주면 다음과 같이 자동 파일 생성과 import를 해준다.
2. 사용할 가짜 데이터 생성
일단 이번 프로젝트에서는 controller와 service에 대한 사용법을 익히는 것이 초점인 간단한 프로젝트이기 때문에 가짜 데이터베이스를 생성한다.
다음과 같이 movies 폴더 아래 entities 폴더를 만들고, 그 안에 movies.entity.ts 파일을 만든다.
안에 내용은 다음과 같이 만들어준다.
물론, 보통의 경우, entities에 실제 데이터베이스의 모델을 만들어줘야하지만, 지금은 가짜 데이터이므로 Object를 만들어준다.
export class Movie {
id: number;
title: string;
year: number;
genres: string[];
}
3. service 코딩
다음으로 movies.service.ts 파일을 다음과 같이 코딩한다.
import { Injectable } from '@nestjs/common';
import { Movie } from './entities/movie.entity';
@Injectable()
export class MoviesService {
private movies: Movie[] = [];
getAll(): Movie[] {
return this.movies;
}
getOne(id: string): Movie {
return this.movies.find(movie => movie.id === +id);
}
}
먼저, 생성한 movie.entity.ts를 import 한다.
그리고 movies라는 변수를 Movie array 타입으로 설정한다.
이번 포스트에서 만들어볼 service는 controller에서 설정한 getAll()과 getOne()에 해당하는 service로
getAll() 은 movies의 값들을 배열 형태로 가져온다.
getOne() 은 id를 string 타입으로 가져와서 +id를 통해 number로 변경하여 조회를 진행한다.
이러면 간단한 service 기능이 완성되었다.
4. controller에서 service로 접근 설정
이제 controller에서 직접 return을 하던 부분을 service로 연결시키기 위해 코드를 다음과 같이 수정한다.
import { Controller, Get, Param } from '@nestjs/common';
import { MoviesService } from './movies.service';
import { Movie } from './entities/movie.entity';
@Controller('movies')
export class MoviesController {
constructor(private readonly moviesService: MoviesService) {}
@Get()
getAll(): Movie[] {
return this.moviesService.getAll();
}
@Get(':id')
getOne(@Param('id') movieId: string) {
return this.moviesService.getOne(movieId);
}
}
우선, movies.service.ts와 movie.entity를 import한다.
service에 접속하기 위해서 NestJS에서는 단순히 수동으로 import 하는 것이 아니라 요청을 해야한다.
생성자를 읽기전용으로 하여 moviesService라는 타입을 가지는 moviesService 클래스를 갖게끔 한다.
이를 통해 아래 getAll()과 getOne()에서 service의 내용에 접근하여 가져올 수가 있게 된다.
기본 사용법을 익히기 위해 controller와 service, entity를 만들어보았다.
물론, 위에 코드들을 실행해보면 알겠지만,
현재는 기본 사용법을 익히기 위해 조회를 위한 Get만 만들어져있어서 getAll은 빈 배열을, getOne은 빈 값을 출력한다.
다음은 CRUD가 존재하는 movie 프로젝트에 dto를 적용한 전체코드를 통해 NestJS에 대해 좀 더 자세히 알아보도록 한다.
'JavaScript > NestJS' 카테고리의 다른 글
NestJS 연습 프로젝트(Movie) - DTO와 유효성검사 (0) | 2021.10.01 |
---|---|
NestJS 연습 프로젝트(Movie) - 전체코드(CRUD) (0) | 2021.10.01 |
NestJS 연습 프로젝트(Movie) - Controller 기본 사용법 (0) | 2021.09.30 |
NestJS 설치 및 구조이해 (0) | 2021.09.30 |
NestJS 소개 (0) | 2021.09.30 |