본문 바로가기

book

NestJS로 배우는 백엔드 프로그래밍

요즘 새로운 기술들이 많이 나타납니다. node 진영에서는 간단히 node동작을 확인해본 경험만 있어서

평소 궁금했던 next.js에 대해서 살펴보려 합니다.

next.js  / nest.js 2개 모두 다른 기술이니, 혼돈 되시면 안됩니다.

2개의 기술 모두 javascript를 기반으로 사용하는 언어이고, 그래서 자연스럽게 typescript 구문으로도 사용이 가능합니다.

간단하게 정리해보면

next.js는 Frontend쪽에서 사용되며, SSR에 장점이 많이 있습니다.

nest.js는 Backend쪽에서 사용되는 기술이며, 웹 API프레임워크 입니다.

 

■ 평소에 궁금했던 사항

js로 구성된 프레임워크 중에 backend는 node.js가 있고 기반으로 express가 있다는 것은 알고 있었는데

next.js의 포지션이 어떻게 되는지 궁금했습니다.

☞ node와의 관계는 있을까?

node, express와 무관한것일까?

 → 해당 궁금했던 사항이 1줄로 잘 정리되어 있습니다.

 → node.js기반!!, Express프레임워크 매핑!!

 → 여기서 눈에 들어오는 단어가 "웹 API프레임워크" 입니다.

     ☞ REST-API기반의 기능에만 특화된 것인가?

     ☞ Python의 Fast-API와 같은 Concept의 프레임워크인가?

    

이러한 궁금증은 책을 통해서 살펴보려고 합니다.

■ 모든 웹 프레임워크에서 사용되어지는 중요한 사항입니다.

· 해당 항목들은 언어가 java, python, js이든 기본적으로 프레임워크에서 지원해야 하는 사항으로 정의해주셨습니다.

  이러한 항목들이 nest.js에서 잘 구성되어 있습니다.

  각 언어별로 정의된 이름은 다르지만, nest를 처음 학습하기 쉽게 잘 설명되어 있습니다.

  예를 들어 횡단관심사라고 표현하는 (python, ts에서는 데커레이터라고 정의되어 있고 java에서는 어노테이션으로 정의되어 있습니다.)

 

■ 도움이 되는 샘플 예제

책에서는 "유저 서비스"라는 것을 만들어 봅니다.

구성요소로 (회원가입 / 이메일 인증 / 로그인 / 회원정보 조회)의 핵심 기능을 가지고 있고

아래 그림 옆에 있는 요소들 (환경변수설정, 유효성 검사, 인증, 로깅, 헬스 체크, CQRS) 및 DB저장까지

nest.js를 통해서 구성합니다.

아래 사항을 보면 backend개발시 전부 필수적으로 가져가야 하는 항목인것을 아실수 있습니다.

 

· 실습환경은 아래 같습니다.

→ Nestjs(node.js, express  nest는 아래 환경 위에서 동작합니다. express대신에 fastify도 가능은 합니다.) 

→ Typescript(nest에서는 기본적으로 ts가 기본이고, js도 사용은 가능합니다.)

→ mysql8 (docker로 설치함)

→ orm을 구현하기 위해서 TypeORM을 사용합니다.

→ 인증을 위해서 JWT를 사용합니다.

 

■ 내용 소개

· node.js, typescript에 대해서 책을 보는데 문제가 없도록 중요한 원리 및 문법에 대해서 설명합니다. 

· 컨트롤러

  MVC패턴에 대해서, 한번쯤은 들어보셨을거 같습니다. 

  당연히 사용자 요청에 대한 handling을 위해서 nest에서도 관련 기능이 있습니다.

  아래 소스 코드를 보면, Spring하고 매우 비슷한 구조를 가지고 있습니다.

  ※ 언어/프레임워크의 차이만 있지 동작원리의 큰 구조는 비슷해서 한개를 잘 알고 있으면, 확장해서 사용하기 쉽게 됩니다.

  @Post() : Spring, FastAPI등 직관적으로 Http Method타입을 정의합니다.

  @Body() : Request의 Body영역에 대한 data를 사용하기 위해서 정의합니다. 

                    Spring에서는 @RequestBody의 역활입니다.

  @DTO : Data Transfer Object의 개념이 nest에서도 동일하게 사용되어서 신기했습니다.

                사용자가 전송한 데이터를 정의해서 객체로 활용하기 위해서 정의합니다. 

# DTO구조는 Java와 비슷합니다.
export class CreateUserDto{
	name : string;
    email : string;
}

<샘플코드>

· 비지니스 로직을 개발하기 위한 프로바이더

  ServiceLayer 부분으로 생각하시면 될거 같습니다.

  여러가지 실제 수행되어야 할 로직을 prividers로 등록하고 class를 정의하고 개발합니다.

@Module({
   ...
   prividers : [UsersService]
})
export class UsersModule{}

· 각종 환경에 맞는 구성을 분리하여서 프로젝트 설정을 해봅니다.

 (production / development / stage) 영역으로 구분해서 운영 및 테스트 환경을 구분합니다.

· 기본적으로 제공하는 @nest/common 패키지의 다양한 Validation용 내장 파이프 내용

· 미들웨어/인터셉터에 대한 개념 및 활용

· JTW연동을 통한 실습

 

■ 현업에서 고민해볼 사항과 심도있는 내용 추가

· 서비스를 운영하면서, 고민해봐야 하는 내용이 추가되어 있습니다. 

· 특정 언어에 종속적이지 않게 일반적인 내용 (ex : JWT유효성) 들도 많아서 유익합니다.

 

■ 책에서 얻은 좋은 인사이트

· 전반적인 Backend의 기술에 대해서 현업에서 고민하는 사항들이 잘 녹아져 있습니다.

· nest.js의 핵심적인 내용이 친절한 설명과 함께 잘 구성되어 있습니다.

· 다양한 언어의 비교 예시도 있어서 이해하는데 도움이 됩니다.

· 쉬어가는 페이지 / 심화학습을 통해서 조금 더 깊이 있는 부분을 전달하려고 합니다.

 

 

"제이펍에서 책을 제공받아 작성된 서평입니다."