Express๋ ์ ํ ์ ์์ ์ทจ์ฝํ JavaScript๋ก ๊ตฌ์ฑ ๋์ด์์ต๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก TypeScript๋ฅผ ๋์ ํ๋ ์คํํฐ ํจํค์ง๋ก ์ํผ ์ธํธ๋ฅผ ํผํ๋ ์ด์ ์ ๋๋ค.
ํจํค์ง๋ JavaScript ๋์ TypeScript๋ฅผ ์ฌ์ฉํ๋๋ก ๊ตฌ์ฑ๋์ด ์์ต๋๋ค.
์ฐธ๊ณ : express-generator-typescript
Node.js๋ฅผ ์ํ ๋น ๋ฅด๊ณ ๊ฐ๋ฐฉ์ ์ธ ๊ฐ๊ฒฐํ ์น ํ๋ ์์ํฌ์ ๋๋ค.
$ npm install -g typescript-express-starter
ํ๋ก์ ํธ ์ด๋ฆ์ ์ ๋ ฅํ์ง ์์ผ๋ฉด, ๊ธฐ๋ณธ๊ฐ์ผ๋ก typescript-express-starter ํด๋๋ก ์ค์น๋ฉ๋๋ค.
$ npx typescript-express-starter "project name"
์ค์น๊ฐ ์๋ฃ๋๋ฉด Script ๋ช ๋ น์ด๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ์คํํฉ๋๋ค.
์ด๋ฆ | ์ค๋ช |
---|---|
Default | Express ๊ธฐ๋ณธ |
Routing Controllers | ๋ฐ์ฝ๋ ์ดํฐ ์ฌ์ฉ๋์ด ๋ง์ ๊ตฌ์กฐํ๋๊ณ ์ ์ธ์ ์ด๋ฉฐ ์๋ฆ๋ต๊ฒ ๊ตฌ์ฑ๋ ํด๋์ค ๊ธฐ๋ฐ ์ปจํธ๋กค๋ฌ ์์ฑ |
Sequelize | PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Server๋ฅผ ์ง์ํ๋ Promise ํจํด ๊ธฐ๋ฐ์ Node.js ORM |
Mongoose | Node.js์ MongoDB๋ฅผ ์ํ ODM(Object Data Mapping) ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
TypeORM | ์๋ฐ์คํฌ๋ฆฝํธ, ํ์ ์คํฌ๋ฆฝํธ๊ณผ ํจ๊ป ์ฌ์ฉ๋์ด Node.js, React Native, Expo์์ ์คํ๋ ์ ์๋ ORM |
Prisma | ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฐ์ฒด์ ๋งคํํ์ฌ ๊ธฐ์กด์ SQL๋ก ์์ฑํ๋ ๋ฐ์ดํฐ๋ฅผ ์์ , ํ ์ด๋ธ ๊ตฌ์กฐ ๋ณ๊ฒฝ๋ฑ์ ์์ ์ ๊ฐ์ฒด๋ฅผ ํตํด ํ๋ก๊ทธ๋๋ฐ์ ์ผ๋ก ํ ์ ์๋๋ก ํด์ฃผ๋ ORM |
Knex | ์ฟผ๋ฆฌ ๋น๋๋ฅผ ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ |
GraphQL | API ์ฉ ์ฟผ๋ฆฌ ์ธ์ด์ด๋ฉฐ ๊ธฐ์กด ๋ฐ์ดํฐ๋ก ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์ํํ๊ธฐ์ํ ๋ฐํ์ |
Typegoose | ํ์ ์คํฌ๋ฆฝํธ ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ชฝ๊ตฌ์ค ๋ชจ๋ธ ์ ์ |
Mikro ORM | ๋ฐ์ดํฐ ๋งคํผ, ์์ ๋จ์ ๋ฐ ์์ด๋ดํฐํฐ ๋งต ํจํด์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ Node.js์ฉ TypeScript ORM. MongoDB, MySQL, MariaDB, PostgreSQL ๋ฐ SQLite ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ |
Sequelize Typescript (๊ฐ๋ฐ์ค) | ๋ฐ์ฝ๋ ์ดํฐ ๋ฐ Sequelize๋ฅผ ์ํ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ |
- ํ๋ก๋์
๋ชจ๋ ์คํ :
npm run start
์๋๋ฉดStart typescript-express-starter
VS Code ๋ก - ๊ฐ๋ฐ ๋ชจ๋ ์คํ :
npm run dev
์๋๋ฉดDev typescript-express-starter
VS Code ๋ก - ๋จ์ ํ
์คํธ :
npm test
์๋๋ฉดTest typescript-express-starter
VS Code ๋ก - ์ฝ๋ ํฌ๋งทํฐ ๊ฒ์ฌ :
npm run lint
์๋๋ฉดLint typescript-express-starter
VS Code ๋ก - ์ฝ๋ ํฌ๋งทํฐ ์ ์ฉ :
npm run lint:fix
์๋๋ฉดLint:Fix typescript-express-starter
VS Code ๋ก
Docker๋, ์ปจํ ์ด๋ ๊ธฐ๋ฐ์ ์คํ์์ค ๊ฐ์ํ ํ๋ซํผ์ด๋ค.
์ค์น ํํ์ด์ง์ ์ ์ํด์ ์ค์น๋ฅผ ํด์ค๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ปจํ
์ด๋๋ฅผ ์์ํ๊ณ ์คํ :
docker-compose up -d
- ์ปจํ
์ด๋๋ฅผ ์ค์งํ๊ณ ์ปจํ
์ด๋, ๋คํธ์ํฌ, ๋ณผ๋ฅจ ๋ฐ ์ด๋ฏธ์ง๋ฅผ ์ ๊ฑฐ :
docker-compose down
์์ ์ ์ํ์๋ฉด docker-compose.yml
๊ณผ Dockerfile
๋ฅผ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
Nginx ์ญ๋ฐฉํฅ ํ๋ก์,๋ก๋ ๋ฐธ๋ฐ์, ๋ฉ์ผ ํ๋ก์ ๋ฐ HTTP ์บ์๋ก๋ ์ฌ์ฉํ ์์๋ ์น ์๋ฒ์ ๋๋ค.
ํ๋ก์๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋ฌ ์๋ฒ์๋ก๋๋ฅผ ๋ถ์ฐํ๊ฑฐ๋, ๋ค๋ฅธ ์น ์ฌ์ดํธ์ ์ฝํ ์ธ ๋ฅผ ์ํํ๊ฒ ํ์ํ๊ฑฐ๋, HTTP ์ด์ธ์ ํ๋กํ ์ฝ์ ํตํด ์ฒ๋ฆฌ ์์ฒญ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ์ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
Nginx ์์ฒญ์ ํ๋ก์ํ๋ฉด ์ง์ ๋ ํ๋ก์ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ ์๋ต์ ๊ฐ์ ธ ์์ ํด๋ผ์ด์ธํธ๋ก ๋ค์ ๋ณด๋ ๋๋ค.
์์ ์ ์ํ์๋ฉด nginx.conf
ํ์ผ์ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
ESLint๋ JavaScript ์ฝ๋์์ ๋ฐ๊ฒฌ ๋ ๋ฌธ์ ํจํด์ ์๋ณํ๊ธฐ์ํ ์ ์ ์ฝ๋ ๋ถ์ ๋๊ตฌ์ ๋๋ค.
Prettier๋ ๊ฐ๋ฐ์๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ ํด์ง ์ฝ๋ฉ ์คํ์ผ์ ๋ฐ๋ฅด๋๋ก ๋ณํํด์ฃผ๋ ๋๊ตฌ์ ๋๋ค.
์ฝ๋๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ๊ณ ์ต๋ ์ค ๊ธธ์ด๋ฅผ ๊ณ ๋ คํ์ฌ ํ์ํ ๊ฒฝ์ฐ ์ฝ๋๋ฅผ ๋ํํ๋ ์์ฒด ๊ท์น์ผ๋ก ๋ค์ ์ธ์ํ์ฌ ์ผ๊ด๋ ์คํ์ผ์ ์ ์ฉํฉ๋๋ค.
-
์ค์น๊ฐ ์๋ฃ๋๋ฉด, ๋จ์ถํค
CMD
+Shift
+P
(Mac Os) ๋๋Ctrl
+Shift
+P
(Windows) ์ ๋ ฅํฉ๋๋ค. -
Format Selection With ์ ํํฉ๋๋ค.
-
Configure Default Formatter... ์ ํํฉ๋๋ค.
-
Prettier - Code formatter ์ ์ฉํฉ๋๋ค.
2019๋ , TSLint ์ง์์ด ์ข ๋ฃ ๋์ด ESLint๋ฅผ ์ ์ฉํ์์ต๋๋ค.
Swagger๋ ๊ฐ๋ฐ์๊ฐ REST ์น ์๋น์ค๋ฅผ ์ค๊ณ, ๋น๋, ๋ฌธ์ํ, ์๋นํ๋ ์ผ์ ๋์์ฃผ๋ ๋ํ ๋๊ตฌ ์ํ๊ณ์ ์ง์์ ๋ฐ๋ ์คํ ์์ค ์ํํธ์จ์ด ํ๋ ์์ํฌ์ด๋ค.
API๋ฅผ ๋๊ท๋ชจ๋ก ์ค๊ณํ๊ณ ๋ฌธ์ํํ๋ ๋ฐ ์ฉ์ดํ๊ฒ ์ฌ์ฉํฉ๋๋ค.
Swagger URL์ http://localhost:3000/api-docs
์ผ๋ก ์์ฑํ์ต๋๋ค.
์์ ์ ์ํ์๋ฉด swagger.yaml
ํ์ผ์ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
REST ํด๋ผ์ด์ธํธ๋ฅผ ์ฌ์ฉํ๋ฉด HTTP ์์ฒญ์ ๋ณด๋ด๊ณ Visual Studio Code์์ ์ง์ ์๋ต์ ๋ณผ ์ ์์ต๋๋ค.
VSCode Extension์์ REST Client ์ค์นํฉ๋๋ค.
์์ ์ ์ํ์๋ฉด src/http ํด๋ ์์ *.http
ํ์ผ์ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
PM2๋, ์๋ฒ์์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ํ ๋ ๋ณดํต ๋ฐ๋ชฌ์ผ๋ก ์๋ฒ๋ฅผ ๋์์ผ ํ๊ณ Node.js์ ๊ฒฝ์ฐ ์๋ฒ๊ฐ ํฌ๋์๋๋ฉด ์ฌ์์์ ํ๊ธฐ ์ํด์ ์์น๋ (watchdog) ๋ฅ์ ํ๋ก์ธ์ค ๊ด๋ฆฌ์์ด๋ค.
- ํ๋ก๋์
๋ชจ๋ ::
npm run deploy:prod
๋๋pm2 start ecosystem.config.js --only prod
- ๊ฐ๋ฐ ๋ชจ๋ ::
npm run deploy:dev
๋๋pm2 start ecosystem.config.js --only dev
์์ ์ ์ํ์๋ฉด ecosystem.config.js
ํ์ผ์ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
SWC๋ ์ฐจ์ธ๋ ๊ณ ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ํ ํ์ฅ ๊ฐ๋ฅํ Rust ๊ธฐ๋ฐ ํ๋ซํผ์ ๋๋ค.
SWC๋ ๋จ์ผ ์ค๋ ๋์์ Babel๋ณด๋ค 20๋ฐฐ, 4๊ฐ ์ฝ์ด์์ 70๋ฐฐ ๋น ๋ฆ
๋๋ค.
- tsc ๋น๋ ::
npm run build
- swc ๋น๋ ::
npm run build:swc
์์ ์ ์ํ์๋ฉด .swcrc
ํ์ผ์ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
โ
โโโ /.vscode
โ โโโ launch.json
โ โโโ settings.json
โ
โโโ /src
โ โโโ /config
โ โ โโโ index.ts
โ โ
โ โโโ /controllers
โ โ โโโ auth.controller.ts
โ โ โโโ index.controller.ts
โ โ โโโ users.controller.ts
โ โ
โ โโโ /dtos
โ โ โโโ users.dto.ts
โ โ
โ โโโ /exceptions
โ โ โโโ HttpException.ts
โ โ
โ โโโ /http
โ โ โโโ auth.http
โ โ โโโ users.http
โ โ
โ โโโ /interfaces
โ โ โโโ auth.interface.ts
โ โ โโโ routes.interface.ts
โ โ โโโ users.interface.ts
โ โ
โ โโโ /middlewares
โ โ โโโ auth.middleware.ts
โ โ โโโ error.middleware.ts
โ โ โโโ validation.middleware.ts
โ โ
โ โโโ /models
โ โ โโโ users.model.ts
โ โ
โ โโโ /routes
โ โ โโโ auth.route.ts
โ โ โโโ index.route.ts
โ โ โโโ users.route.ts
โ โ
โ โโโ /services
โ โ โโโ auth.service.ts
โ โ โโโ users.service.ts
โ โ
โ โโโ /tests
โ โ โโโ auth.test.ts
โ โ โโโ index.test.ts
โ โ โโโ users.test.ts
โ โ
โ โโโ /utils
โ โ โโโ logger.ts
โ โ โโโ util.ts
โ โ โโโ vaildateEnv.ts
โ โ
โ โโโ app.ts
โ โโโ server.ts
โ
โโโ .dockerignore
โโโ .editorconfig
โโโ .env
โโโ .eslintignore
โโโ .eslintrc
โโโ .gitignore
โโโ .huskyrc
โโโ .lintstagedrc.json
โโโ .prettierrc
โโโ .swcrc
โโโ docker-compose.yml
โโโ Dockerfile
โโโ ecosystem.config.js
โโโ jest.config.js
โโโ Makefile
โโโ nginx.conf
โโโ nodemon.json
โโโ package-lock.json
โโโ package.json
โโโ swagger.yaml
โโโ tsconfig.json
-
Jeongwon Kim https://github.com/swtpumpkin
-
Joรฃo Silva https://github.com/joaopms
-
BitYoungjae https://github.com/BitYoungjae
-
Paolo Tagliani https://github.com/pablosproject
-
Lloyd Park https://github.com/yeondam88
-
strama4 https://github.com/strama4
-
sonbyungjun https://github.com/sonbyungjun
-
Sean Maxwell https://github.com/seanpmaxwell
-
Ed Guy https://github.com/edguy3
-
Malavan https://github.com/malavancs
-
Jon Gallant https://github.com/jongio
-
Kuba Rozkwitalski https://github.com/kubarozkwitalski
-
Craig Harman https://github.com/craigharman
-
Edward Teixeira Dias Junior https://github.com/edward-teixeira
-
n2ptune https://github.com/n2ptune
-
michael r https://github.com/alanmynah
-
Benjamin https://github.com/benjaminudoh10
-
Amrik Singh https://github.com/AmrikSD
-
oricc https://github.com/oricc
-
Dustin Newbold https://github.com/dustinnewbold
-
WhatIfWeDigDeeper https://github.com/WhatIfWeDigDeeper
-
David Stewart https://github.com/davidjmstewart
-
JagTheFriend JagTheFriend
-
Tamzid Karim Tamzid Karim
-
Andrija Milojeviฤ https://github.com/andrija29
-
Engjell Avdiu https://github.com/engjellavdiu
-
Florian Mifsud https://github.com/florianmifsud
์ธ์ | ๋ฉ์์ง |
---|---|
๊ธฐ๋ฅ ์ถ๊ฐ | โจ ๊ธฐ๋ฅ ์ถ๊ฐ |
๋ฒ๊ทธ ์์ | ๐ ๋ฒ๊ทธ ์์ |
์ฝ๋ ๊ฐ์ | ๐ ์ฝ๋ ๊ฐ์ |
ํจํค์ง ์ค์น | ๐ฆ ํจํค์ง ์ค์น |
๋ฌธ์ ์์ | ๐ ๋ฌธ์ ์์ |
๋ฒ์ ์ ๋ฐ์ดํธ | ๐ผ ๋ฒ์ ์ ๋ฐ์ดํธ |
์๋ก์ด ํ ํ๋ฆฟ ์ถ๊ฐ | ๐ ์๋ก์ด ํ ํ๋ฆฟ ์ถ๊ฐ |
์ถํ ์ถ๊ฐํ๊ณ ์ํ๋ ํ ํ๋ฆฟ, ์ง๋ฌธ, ๊ธฐ๋ฅ์ ์ ์ด ์ฃผ์๋ฉด ์ต์ ์ ๋คํด ๋ต๋ณํ๊ณ ๋ฐ์ํ๊ฒ ์ต๋๋ค.
์ ์ ์คํ์์ค์ ๋ํด ๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.