๐ Quick and Easy TypeScript Express Starter
MIT License
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 ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์ |
Node Postgres | PostgreSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ธํฐํ์ด์คํ๊ธฐ ์ํ node.js ๋ชจ๋ |
์ด๋ฆ | ์ค๋ช |
---|---|
Sequelize Typescript | ๋ฐ์ฝ๋ ์ดํฐ ๋ฐ Sequelize๋ฅผ ์ํ ๋ช ๊ฐ์ง ๊ธฐ๋ฅ |
TS SQL | SQL ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ TypeScript ์ ํ ์ฃผ์์ผ๋ก ์์ ํ ๊ตฌํ |
inversify-express-utils | InversifyJS๋ฅผ ์ฌ์ฉํ Express ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ์ํ ์ผ๋ถ ์ ํธ๋ฆฌํฐ |
postgress Typescript | |
graphql-prisma |
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๋ฐฐ ๋น ๋ฆ
๋๋ค.
npm run build
npm run build:swc
์์ ์ ์ํ์๋ฉด .swcrc
ํ์ผ์ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
make help
์์ ์ ์ํ์๋ฉด Makefile
ํ์ผ์ ์์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
โ
โโโ๐ .vscode
โ โโโ launch.json
โ โโโ settings.json
โ
โโโ๐ src
โ โโโ๐ config
โ โ โโโ index.ts
โ โ
โ โโโ๐ controllers
โ โ โโโ auth.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
โ โ โโโ users.route.ts
โ โ
โ โโโ๐ services
โ โ โโโ auth.service.ts
โ โ โโโ users.service.ts
โ โ
โ โโโ๐ test
โ โ โโโ auth.test.ts
โ โ โโโ users.test.ts
โ โ
โ โโโ๐ utils
โ โ โโโ logger.ts
โ โ โโโ vaildateEnv.ts
โ โ
โ โโโ app.ts
โ โโโ server.ts
โ
โโโ .dockerignore
โโโ .editorconfig
โโโ .env.development.local
โโโ .env.production.local
โโโ .env.test.local
โโโ .eslintignore
โโโ .eslintrc
โโโ .gitignore
โโโ .huskyrc
โโโ .lintstagedrc.json
โโโ .prettierrc
โโโ .swcrc
โโโ docker-compose.yml
โโโ Dockerfile.dev
โโโ Dockerfile.prod
โโโ ecosystem.config.js
โโโ jest.config.js
โโโ Makefile
โโโ nginx.conf
โโโ nodemon.json
โโโ package-lock.json
โโโ package.json
โโโ swagger.yaml
โโโ tsconfig.json
์ธ์ | ๋ฉ์์ง |
---|---|
๊ธฐ๋ฅ ์ถ๊ฐ | โจ ๊ธฐ๋ฅ ์ถ๊ฐ |
๋ฒ๊ทธ ์์ | ๐ ๋ฒ๊ทธ ์์ |
์ฝ๋ ๊ฐ์ | ๐ ์ฝ๋ ๊ฐ์ |
ํจํค์ง ์ค์น | ๐ฆ ํจํค์ง ์ค์น |
๋ฌธ์ ์์ | ๐ ๋ฌธ์ ์์ |
๋ฒ์ ์ ๋ฐ์ดํธ | ๐ผ ๋ฒ์ ์ ๋ฐ์ดํธ |
์๋ก์ด ํ ํ๋ฆฟ ์ถ๊ฐ | ๐ ์๋ก์ด ํ ํ๋ฆฟ ์ถ๊ฐ |
๊ฑด์ ์ฌํญ์ด๋ ์ง๋ฌธ ๋ฑ์ ์ด์๋ก ๋จ๊ฒจ์ฃผ์ธ์.
์ต์ ์ ๋คํด ๋ต๋ณํ๊ณ ๋ฐ์ํ๊ฒ ์ต๋๋ค.
๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.