2023. 5. 27. 18:31ㆍ개발 문서 번역/NestJS
공식문서나 내가 유학했던 대만에는 NestJS의 A-Z에 대해 써놓은 사람이 없을까? 라는 생각에 찾아보게된 글.
생각보다 글이 잘 쓰여져있다는 느낌이 들었고,
사실 대만이나 한국이나 NestJS에 대해서는 아직 정보가 많지 않은것 같아
나처럼 Node진영에 취업을 준비하거나 1년차에 접어든 주니어 개발자들이 조금 더 선택지가 많아졌으면 하는 마음에 보았으면 좋겠다고 생각했다.
https://ithelp.ithome.com.tw/articles/10264935
이 글은 위의 링크 NestJS 帶你飛!를 번역한 글임을 알리며, 원작자의 동의를 받아 작성됩니다.
의역이 있을 수 있습니다.
이 포스팅은 「NestJS 기초실무 가이드 : 강력하고 쉬운 Node.js 웹 프레임워크로 웹사이트 만들기」
(서명: NestJS 基礎必學實務指南:使用強大且易擴展的 Node.js 框架打造網頁應用程式)
책이 출간되었습니다.
최근 프론트/백엔드 단에서 Javascript의 흔적을 모두 찾아볼수 있는데 이는 Node.js의 탄생으로 Javascript를 인기있는 프로그래밍 언어 순위권에 올려놓았다고 봐도 과언이 아닙니다. Node.js의 생태계에는 이미 Node 개발자라면 들어봤을법한 프레임워크인 Express와 Koa가 대표적인데요. 이 프레임워크들은 자유도가 높은데다 가벼운것이 장점이라 원하는 사이트를 빠르게 쌓아올릴 수 있어 엄청난 환영을 받게 되었습니다.
웹 프레임워크가 '자유롭다' 라고 하는건 다른 한편으로는 엄격한 규범(ex: 폴더 구조, 디자인 패턴..)이 없다는걸 의미합니다. 이는 바로 결합도가 높고, 응집도가 낮은 코드를 쓰기 쉬워지며 심지어 파일들의 구조가 엉성한 느낌까지 받게됩니다. 만약 규범화되어있지 않은 웹 프레임워크를 사용하는 개발자는 이 모든 규범을 '정의' 하는것 조차도 어쩌면 엄청난 도전과 고민거리가 될 수 있습니다.
시간이 지나 이를 해결하고자 NestJS라는 웹 프레임워크가 등장하였습니다.
NestJS는 프론트엔드 웹 프레임워크 Angular의 디자인패턴, 구조등에서 영감을 받아 만들어졌고 강타입 언어인 TypeScrtipt 를 지원합니다.
이는 개발자에게 확장이 쉬우며, 결합도가 낮고, 정형화된 개발 환경을 제공해줍니다.
NestJS란?
NestJS는
모듈화를 채택하여 NestJS 내의 각 기능들은 하나의 독립적인 모듈로써 존재할 수 있습니다.
수많은 추상화 계층을 설계하여 책임이 다른 코드 조각들을 컴포넌트로써 사용하여 클래스간의 디커플링(느슨한 결합)과 넓은 확장성을 지원합니다.
NestJS의 추상화 계층에 대해 알고싶다면?
→
NestJS의 추상화 계층?
기본 컨셉은 Provider(상기 이미지에선 service), Controller를 module로 합치고,
그 모듈들을 최종적으로 app.module에 합쳐서 사용하는 것
NestJS는 Singleton 패턴을 지향하기 때문에 인스턴스를 직접 생성하지 않고
모듈을 통해 Injection 하는 패턴을 권장함.
직접 인스턴스를 생성하여 등록하는 방법도 지원하는데, 보통 전역적으로 적용해야할 Provider들에 사용하고 있다.
(다만 권장하는 방식은 아니다. 인스턴스 생성을 NestJS에게 맡기는 것을 권장한다.)
- Singleton 패턴: 전역 변수를 사용하지 않고 객체를 하나만 생성 하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 패턴
NestJS는 Express 혹은 Fastify중 하나를 선택하여 사용할 수 있고
MVC, REST API의 애플리케이션을 만들때 기존 라이브러리들을 그대로 사용할 수 있습니다. (Ex: TypeORM, Mongoose, Passport...)
요즘 많이 유행하는 MSA도 지원하는데, 이는 만물상같은 프레임 워크라고 할 수 있습니다.
또한 NestJS는 3개의 프로그래밍 개념을 도입했다.
- 객체 지향 프로그래밍 (Object Oriented Programming, 物件導向程式設計)
- 함수 기반 프로그래밍 (Functional Programming, 函式程式設計)
- 함수형 반응형 프로그래밍 (Functional Reactive Programming, 函式反應式程式設計)
이런 개념들이 추구하는 목표와 디자인패턴을 결합시키면 NestJS의 전체 구조가 매우 견고해집니다.
이 포스팅에 관하여...
과거에 Node.js는 데이터 타입, 아키텍처 문제로 가장 말이 많았던 런타임에 불과했었습니다.
NestJS는 이 골치아픈 두 문제를 가장 잘 해결해주는 좋은 선택지가 될 수 있다고 생각합니다.
하지만 현지(대만)에서의 NestJS의 인지도는 다른 해외와 비교할 때 그렇게 높지 않고, 번체로 쓰여진 강의들도 비교적 많이 적은 편이라 국내의 NestJS 발전을 위해서
이 시리즈를 포스팅해 수많은 Node.js 은둔 고수들을 NestJS의 세계로 입문 시키고자 합니다.
사실 작년에 올해부터 쓰기 시작할 포스팅들에 대한 복선(중문)들을 많이 남겨놓았는데요.
이 시리즈는 REST API를 기준으로 작성될 예정이며 대략 아래와 같이 구성될 예정입니다.
1. NestJS 기초: 약 10 ~ 15편 정도 작성 예정. NestJS의 기본 컴포넌트부터 소개할 예정, 가볍게 각각 컴포넌트들의 역할과 사용 방법에 대해 설명할 예정입니다.
2. NestJS 심화: 약 3 ~ 5편 정도 작성 예정. 여기서는 난이도가 있는 원리 혹은 기능에 대해 서술합니다. 개발 실력 한단계 UP!
3. NestJS 응용: 약 5 ~ 8 편 정도 작성 예정. 기초를 탄탄히 다진 후 개발에서 자주 쓰이는 기능들에 대해 탐색해봅니다.
4. NestJS 개발 실전: 약 3 ~ 5편 정도 작성 예정. 위의 내용들을 다 익혔다면 실전 예제를 통해 NestJS의 A-Z를 느껴봅시다!
번외로 이 포스팅을 읽기 전 몇개의 사전 지식의 이해가 필요합니다.
1. 터미널 (terminal) : 이 포스팅에서는 Windows의 운영체제 CMD를 사용합니다.
Windows를 사용하시는 분은 '명령 프롬프트', MAC OS를 사용하시는 분은 '터미널' 이라고 부릅니다.
2. 커맨드 라인 (command line) : 이 포스팅에서는 Webstorm git bash에서 명령을 실행합니다. (원저자는 터미널을 사용하였습니다.)
이때 <영문 대문자>는 독자가 어떠한 이름을 지어도 상관이 없으며 모든 명령의 $는 이 구문의 명령을 의미합니다.
꼭 $를 넣을 필요는 없습니다.
3. Nest : NestJS의 줄임말로써 사용 할 예정입니다. 포스팅 뒤의 Nest는 NestJS를 의미합니다.
4. 플랫폼 : NestJS는 Express 혹은 Fastify를 플랫폼으로써 지정할 수 있다고 말씀드렸는데,
이 포스팅에서는 Express를 위주로 진행합니다.
5. 개별 열람 : 원하는 부분만 골라 이해할 수 있게 하기위해 매 포스팅마다 개별적으로 봐도 문제가 없을만큼 노력해 포스팅 할 예정입니다.
필요한 사전 지식
1. 백엔드 기본 지식 : HTTP, HTTP Methods..
2. 객체 지향 : 객체지향적 프로그래밍에 대해 들어보셨어야 합니다.
3. TypeScript 혹은 JavaScript : Nest는 둘 다 지원하지만, 공식 사이트에서는 TypeScript를 권장하고 있습니다.
4. Node.js를 사용해 보았어야 합니다.
5. 터미널을 사용해 보았어야 합니다.
시작 전에...
1. Node.js 공식 사이트 에서 Node.js를 다운로드, 설치까지 끝내야 합니다. 버전은 LTS를 설치하면 됩니다.
2. VSCode 등.. 좋아하는 코드 편집기를 사용하시면 됩니다.
3. Postman 공식 사이트에서 Postman을 다운로드 받아주세요.
4.번역 문제, 어떤 문제든 댓글에 남겨주세요!
'개발 문서 번역 > NestJS' 카테고리의 다른 글
NestJS 帶你飛! 시리즈 번역 06# Provider (상) (0) | 2023.05.31 |
---|---|
NestJS 帶你飛! 시리즈 번역 05# Module (0) | 2023.05.30 |
NestJS 帶你飛! 시리즈 번역 04# Controller (하) (0) | 2023.05.30 |
NestJS 帶你飛! 시리즈 번역 03# Controller (상) (0) | 2023.05.29 |
NestJS 帶你飛! 시리즈 번역 02# Hello NestJS (0) | 2023.05.28 |