이번 국비교육의 최종 프로젝트를 NestJS로 진행하게 되었습니다.
NodeJS 환경에서 동작하는 프레임워크 중 Express만 사용해보았기에, 프로젝트 시작에 앞서 NestJS를 익혀보려고 합니다.
1. NestJS란?
NestJS는 NodeJS 환경에서 적용가능한 웹 프레임워크로 다음과 같은 특징을 가지고 있습니다.
- 타입스크립트 지원: 코드의 안정성을 높여주고 유지보수성을 올려줍니다.
- 모듈 아키텍처: 모듈 기반의 구조를 통하여 코드의 재사용성을 높여줍니다.
- 유연성: Express나 Fastify를 내부적으로 사용할 수 있습니다.
- 강력한 CLI: 프로젝트 생성과 설정 자동화를 지원합니다.
2. NestJS 설치
공식 문서에 나와있는 단계를 따라하면 쉽게 애플리케이션을 생성할 수 있습니다.
2-1. NestJS CLI 설치
npm install -g @nestjs/cli
2-2. 새 프로젝트 생성
nest new project-name
2-3. 애플리케이션 실행
생성된 프로젝트 폴더로 이동 후
npm run start
3. NestJS의 핵심 개념
NestJS는 공식문서가 학습하기에 매우 충분하다고 느꼈습니다.
이 프레임워크에서 사용하는 몇 가지 주요 개념들을 살펴보겠습니다.
3-1. 모듈
모듈은 애플리케이션을 구성하는 주요 단위입니다.
NestJS 애플리케이션은 여러 개의 모듈로 나뉘며, 각 모듈은 하나의 기능을 담당합니다.
예를 들어서 사용자 관리, 게시글 관리, 댓글 관리와 같은 기능별로 모듈을 나눠서 관리할 수 있습니다.
모듈은 @Module이라는 데코레이터를 사용해 정의합니다.
이 데코레이터 안에는 모듈에 사용하는 컨트롤러와 서비스를 설정할 수 있습니다.
import { Module } from '@nestjs/common';
import { PostsController } from './posts.controller';
import { PostsService } from './posts.service';
@Module({
controllers: [PostsController],
providers: [PostsService],
})
export class PostsModule {}
3-2. 컨트롤러
컨트롤러는 클라이언트의 요청을 처리하는 역할을 합니다.
사용자가 웹 애플리케이션에 요청을 보내면, 해당 요청을 적절히 처리하고 응답을 반환하는 역할을 합니다.
컨트롤러는 각 HTTP 요청에 대해 적절한 메서드를 실행하여 클라이언트에게 응답합니다.
컨트롤러는 @Controller 데코레이터로 정의합니다.
import { Controller, Post } from '@nestjs/common';
import { PostsService } from './posts.service';
import { CreatePostDto } from './dto/create-post.dto';
@Controller('posts')
export class PostsController {
constructor(private postsService: PostsService) {}
@Post()
create(@Body() createPostDto: CreatePostDto) {
this.postsService.create(createPostDto);
}
}
3-3. 서비스
서비스는 비즈니스 로직을 처리하는 부분입니다.
데이터베이스에 접근하거나 외부 API와 통신하는 등의 작업을 맡습니다.
컨트롤러는 사용자의 요청을 받아 서비스를 호출하고, 서비스는 데이터를 처리한 후 반환합니다.
서비스는 @Injectable 데코레이터로 정의하며, 다른 모듈이나 컴포넌트에서 의존성 주입을 통해 사용할 수 있습니다.
import { Injectable } from '@nestjs/common';
import { Post } from './interfaces/posts.interface';
@Injectable()
export class PostsService {
private readonly posts: Post[] = [];
create(post: Post) {
this.posts.push(post);
}
}
새로운 개념에 다소 낯설지만, 타입스크립트와 강력한 구조화를 통해 효율적인 개발을 가능하게 한다고 느꼈습니다.
프로젝트의 간단한 기능부터 추가하면서 복잡한 애플리케이션으로 확장해보겠습니다.
글을 끝까지 봐주셔서 감사합니다.
틀린 내용이 있다면 댓글로 지적 부탁드립니다.
'JavaScript' 카테고리의 다른 글
[React] Context 알아보기 (1) | 2024.11.11 |
---|---|
[Redux] 개념과 React에서의 활용 (0) | 2024.11.04 |
[React] 리액트의 useState (1) | 2024.11.01 |
[React] 리액트의 동작 원리 (0) | 2024.10.30 |
[TypeScript] 클래스 알아보기 (0) | 2024.10.29 |