낙서장이자 오답 노트이자 컨닝 페이퍼

패스트캠퍼스 환급챌린지 1일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기 본문

NestJS

패스트캠퍼스 환급챌린지 1일차 : 코드팩토리의 백엔드 아카데미 : 한 번에 끝내는 NestJS 패키지 - 기초부터 MSA까지 강의 후기

NangIn 2025. 4. 1. 16:54

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

 

강의 내용 정리                                                                                                                    

NestJS소개

 

NestJS를 배워야 하는 이유

  • 자바스크립트의 인기: NestJS는 자바스크립트로 작성되어 있으며, 자바스크립트는 가장 인기 있는 프로그래밍 언어로 선정됨
  • NodeJS의 인기: NestJS는 NodeJS 엔진을 기반으로 하고, NodeJS는 가장 인기 있는 웹 기술로 선정됨
  • NestJS의 관심: 많은 개발자들이 NestJS를 배우고 싶어 함, 이는 향후 큰 시장 점유율을 예고함

 

NestJS의 기본 개념

  • 서버 프레임워크: NestJS는 효율적이고 확장 가능한 NodeJS 기반 서버 프레임워크로, 서버 개발을 위한 강력한 도구
  • 타입스크립트 지원: NestJS는 타입스크립트를 완전 지원하여 강력한 타이핑과 유지보수 편리성을 제공
  • OOP, FP, FRP: 객체지향 프로그래밍, 함수형 프로그래밍, 반응형 프로그래밍을 활용하여 개발할 수 있음

 

NestJS의 주요 특징

  • 모듈라 아키텍처: 소프트웨어 확장과 관리가 유연하고, 팀워크에서 강점을 가짐
  • 의존성 주입 시스템: 네스트제이스는 강력한 의존성 주입 시스템을 제공, 효율적인 의존성 관리 가능
  • REST API와 GraphQL 지원: REST API와 GraphQL을 기본적으로 지원, 널리 사용되는 두 가지 통신 방법을 모두 지원
  • 마이크로서비스 아키텍처(MSA): NestJS는 마이크로서비스 아키텍처를 고려하여 설계되어, 분산 시스템 설계가 매우 강력함

 

NestJS 와 익스프레스 비교

  • 아키텍처: NestJS는 자체 아키텍처와 모듈 시스템을 제공, 익스프레스는 이를 직접 만들어야 함
  • 의존성 주입: NestJS는 의존성 주입을 기본 제공, 익스프레스는 제공하지 않음
  • 마이크로서비스 기능: NestJS는 기본적으로 마이크로서비스 기능을 제공, 익스프레스는 기본적으로 제공하지 않음

 

HTTP와 REST API

 

HTTP

  • 클라이언트와 서버 간의 통신 방법
  • 클라이언트가 요청을 보내면, 서버는 응답을 반환
  • 요청과 응답은 보통 JSON 형식으로 데이터를 주고받음
  • JSON : 데이터를 키-값 쌍으로 표현, 키는 문자열, 값은 숫자, 문자열, 중첩된 JSON, 리스트 등 가능

 

HTTP URL 구성

  • 스킴 (Scheme): http:// 또는 https://
  • 호스트 (Host): 도메인 (예: codefactory.ai)
  • 패스 (Path): 요청하는 리소스 경로 (예: /javascript)
  • 쿼리 파라미터 (Query Parameters): ?key=value 형식으로 추가 정보 전달

 

HTTP 요청 요소

  • URL: 요청을 보내는 주소
  • 메서드: 요청의 종류 - 같은 URL에 여러개의 메서드가 존재할 수 있음
    • GET: 데이터 조회
    • POST: 데이터 생성
    • PUT: 데이터 업데이트/생성
    • PATCH: 데이터 부분적 업데이트
    • DELETE: 데이터 삭제
  • 헤더: 요청의 메타데이터 (데이터에 대한 데이터)
    • key/value 형태로 정의 (모두 string 형태)
    • 라이브러리/프레임워크/환경에 의해 자동 생성되는 값이 많음
      • 직접 값을 변경하는 경우가 body 보다 적음
    • 예: 쿠키, 인증 토큰, 요청 길이, 호스트 등
  • 바디: 요청에대한 로직 수행에 직접적으로 필요한 데이터, 보통 JSON 형식 사용 (헤더는 요청 자체에 대한 정보)

 

HTTP 응답 구성

  • 헤더: 메타데이터
  • 바디: 응답 데이터
  • 상태 코드: 응답의 상태를 숫자로 정의
    • 200: OK (성공)
    • 201: Created (생성 완료)
    • 400: Bad Request (잘못된 요청)
    • 401: Unauthorized (인증 실패)
    • 403: Forbidden (접근 불가능한 리소스. 401과 달리 인증은 된 상태)
    • 404: Not Found (리소스 없음)
    • 500: Internal Server Error (서버 오류)

 

REST API Key Points

  • 균일한 인터페이스: URL, 메서드 등은 일정한 규칙에 따라 사용
  • 무상태: 요청은 독립적이어야 하며, 하나의 요청이 다른 요청에 의존하지 않음
  • 계층화 시스템: 서버는 여러 계층으로 구성 가능
  • 캐시 가능성: 데이터를 캐시하여 반복 요청을 줄임
  • 온디멘드 코드: 서버에서 클라이언트로 스크립트를 보내 실행

 

설치 및 파일구조

 

NestJS 설치

$ npm i -g @nestjs/cli
$ nest new project-name

 

Nest.js 프로젝트 파일 구조 정리

  • 프로젝트 파일 구조:
    • dist 폴더: 배포된 자바스크립트 코드가 들어있는 폴더
    • node_modules:
      • 인터넷에서 다운받은 패키지들이 들어있음
      • 예: Jest, RxJS, TypeScript 등
      • NestJS 프로젝트 생성 시 자동으로 설치됨
    • src 폴더:
      • 실제 코드를 작성하는 폴더
      • 앱 관련 파일:
        • app.controller.ts: 컨트롤러 코드
        • app.service.ts: 서비스 코드
        • app.module.ts: 모듈 코드
        • app.controller.spec.ts: 해당 컨트롤러의 테스트 파일
      • 파일 명명 규칙: 기능별로 파일을 구분, 예: app.controller.ts, app.service.ts
      • 테스트 파일: spec.ts가 붙은 파일은 테스트 코드임
    • test 폴더:
      • 테스트 코드
      • src/spec.ts: 유닛 테스트 파일
      • e2e-spec: End-to-End 테스트 파일 (e2e 테스트)
  • 기타 설정 파일들:
    • .eslintrc.js: 코드 스타일 규칙 설정
    • .gitignore: Git에서 관리하지 않을 파일들을 지정
    • .prettierrc: 코드 포맷팅 설정
    • nest-cli.json: Nest CLI 관련 설정
    • package.json: 프로젝트 전반적인 설정 및 의존성 관리
      • scripts: pnpm start, pnpm build 등 실행 명령어 정의
      • dependencies: 실제로 사용하는 외부 라이브러리
      • devDependencies: 개발 중에만 필요한 패키지들 (배포시 dist 폴더에 포함안됨)
      • jest: Jest 테스트 설정
    • pnpm-lock.yaml: 의존성 트리 관리
    • tsconfig.json: TypeScript 컴파일러 설정
    • README.md: 프로젝트에 대한 설명 문서
  • 파일 구조 및 설정:
    • NestJS 프로젝트에서 사용되는 각 파일과 폴더는 역할에 맞게 구성되어 있으며, 주로 파일 이름으로 어떤 코드가 있는지 쉽게 알 수 있음
    • 테스트 파일, 설정 파일, 코드 작성 파일 등 구분되어 있어 관리가 용이함
    • NestJS가 제공하는 기본 구조와 파일 설정을 잘 따라가면 프로젝트 확장 시 유용하게 활용 가능

 

학습 후기                                                                                                                                       

프론트엔드 취업을 준비하는 학생으로서, 백엔드를 스스로 구축하고 나만의 서비스를 만들어보고자 이 강의를 듣게 되었습니다. 프론트엔드 개발에 익숙하지만, 서버 사이드 로직과 백엔드 시스템에 대한 이해를 높이기 위해 NestJS를 배우는 것이 매우 중요한 단계라고 생각했습니다.

 

실제로 Node.js로 프로젝트를 한번 해본 경험이 있었지만, 처음부터 모든 것을 하나씩 만들어가려니 코드가 돌아가긴 하는데, 뭔가 스파게티 코드처럼 느껴지고 내 코드가 마음에 안들었습니다... 그래서 더 구조화된 프레임워크가 필요하다고 생각했는데, NestJS가 ExpressJS보다 훨씬 더 명확한 아키텍처와 강력한 도구들을 제공한다는 점에서 매우 기대가 됐습니다.

 

이번 강의를 통해 NestJS의 기본 개념과 특징을 잘 이해할 수 있었습니다. 특히 타입스크립트 지원, 의존성 주입, 마이크로서비스 아키텍처 등은 대규모 프로젝트에서 큰 장점이 될 수 있다는 점을 알게 되었습니다. 이와 같은 특징들이 개발 과정에서 유지보수와 코드 관리 측면에서 매우 유리하게 작용할 것이라는 확신이 들었습니다.

 

또한, NestJS의 파일 구조와 명명 규칙을 통해 코드의 역할을 명확하게 파악할 수 있었습니다. 예를 들어, app.controller.ts, app.service.ts처럼 파일 이름만으로도 해당 코드가 무엇을 담당하는지 쉽게 알 수 있다는 점이 매우 유용하다고 느꼈습니다. 이 구조 덕분에 프로젝트가 커질수록 파일 간의 관계가 명확하게 유지될 수 있다는 점에서 큰 장점이 될 것입니다.

 

ExpressJS와 비교했을 때, NestJS는 보다 구조화된 아키텍처와 강력한 도구들을 제공하여 협업과 확장성 면에서 큰 도움이 될 것 같습니다. 특히, NestJS가 제공하는 모듈화된 구조 덕분에, 더 큰 프로젝트에서 코드를 더 쉽게 관리하고 확장할 수 있을 거라는 확신이 들었습니다. 이번 강의를 바탕으로, 앞으로 NestJS를 실습을 통해 더 깊이 배우고 실제 프로젝트에 적용할 수 있을 것 같아 기대가 됩니다!

 

학습 인증샷                                                                                                                                   

수강 인증 사진

 

 

공부 시작 시간

 

공부 종료 시간

 

학습 인증샷

 

https://abit.ly/lisbva