Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/ljlm0402/typescript-express-starter

๐Ÿ“˜ Quick and Easy TypeScript Express Starter
https://github.com/ljlm0402/typescript-express-starter

docker eslint express graphql jest knex logger mikro-orm mongoose nginx nodejs prettier prisma routing-controllers sequelize swagger swc typegoose typeorm typescript

Last synced: about 1 month ago
JSON representation

๐Ÿ“˜ Quick and Easy TypeScript Express Starter

Awesome Lists containing this project

README

        




ํ”„๋กœ์ ํŠธ ๋กœ๊ณ 




ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ต์Šคํ”„๋ ˆ์Šค ์Šคํƒ€ํ„ฐ


๐Ÿš€ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ ์ต์Šคํ”„๋ ˆ์Šค ๋ณด์ผ๋Ÿฌ ํ”Œ๋ ˆ์ดํŠธ ์Šคํƒ€ํ„ฐ ํŒจํ‚ค์ง€



npm ์ •๋ณด



npm ๋ฒ„์ „


npm ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „


npm ๋‹ค์šด๋กœ๋“œ ์ˆ˜


npm ํŒจํ‚ค์ง€ ๋ผ์ด์„ ์Šค



github ์Šคํƒ€


github ํฌํฌ


github ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ


github ์ด์Šˆ


- [๐Ÿ‡ฐ๐Ÿ‡ท ํ•œ๊ตญ์–ด](https://github.com/ljlm0402/typescript-express-starter/blob/master/README.kr.md)
- [๐Ÿ‡บ๐Ÿ‡ธ ์˜์–ด](https://github.com/ljlm0402/typescript-express-starter/blob/master/README.md)


## ๐Ÿ˜Ž ํ”„๋กœ์ ํŠธ๋ฅผ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

Express๋Š” ์œ ํ˜• ์ •์˜์— ์ทจ์•ฝํ•œ JavaScript๋กœ ๊ตฌ์„ฑ ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์ด ๋ฐ”๋กœ TypeScript๋ฅผ ๋„์ž…ํ•˜๋Š” ์Šคํƒ€ํ„ฐ ํŒจํ‚ค์ง€๋กœ ์ˆ˜ํผ ์„ธํŠธ๋ฅผ ํ”ผํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€๋Š” JavaScript ๋Œ€์‹  TypeScript๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

> ์ฐธ๊ณ  : [express-generator-typescript](https://github.com/seanpmaxwell/express-generator-typescript)

### ๐Ÿค” Express๋Š” ๋ฌด์—‡์ธ๊ฐ€์š” ?

Node.js๋ฅผ ์œ„ํ•œ ๋น ๋ฅด๊ณ  ๊ฐœ๋ฐฉ์ ์ธ ๊ฐ„๊ฒฐํ•œ ์›น ํ”„๋ ˆ์ž„์›Œํฌ์ž…๋‹ˆ๋‹ค.

## ๐Ÿš€ ์‹œ์ž‘ํ•˜๊ธฐ

### npm ์ „์—ญ ์„ค์น˜

```bash
$ npm install -g typescript-express-starter
```

### npx๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ _typescript-express-starter_ ํด๋”๋กœ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค.

```bash
$ npx typescript-express-starter "project name"
```

### ์›ํ•˜์‹œ๋Š” ํ…œํ”Œ๋ฆฟ์„ ์„ ํƒ

์˜ˆ์‹œ

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Script ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

#### ํ…œํ”Œ๋ฆฟ ์ข…๋ฅ˜

| ์ด๋ฆ„ | ์„ค๋ช… |
| :---------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Default | Express ๊ธฐ๋ณธ |
| [routing controllers](https://github.com/typestack/routing-controllers) | ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ์‚ฌ์šฉ๋Ÿ‰์ด ๋งŽ์€ ๊ตฌ์กฐํ™”๋˜๊ณ  ์„ ์–ธ์ ์ด๋ฉฐ ์•„๋ฆ„๋‹ต๊ฒŒ ๊ตฌ์„ฑ๋œ ํด๋ž˜์Šค ๊ธฐ๋ฐ˜ ์ปจํŠธ๋กค๋Ÿฌ ์ƒ์„ฑ |
| [Sequelize](https://github.com/sequelize/sequelize) | PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Server๋ฅผ ์ง€์›ํ•˜๋Š” Promise ํŒจํ„ด ๊ธฐ๋ฐ˜์˜ Node.js ORM |
| [Mongoose](https://github.com/Automattic/mongoose) | Node.js์™€ MongoDB๋ฅผ ์œ„ํ•œ ODM(Object Data Mapping) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ |
| [TypeORM](https://github.com/typeorm/typeorm) | ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜์–ด Node.js, React Native, Expo์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ORM |
| [Prisma](https://github.com/prisma/prisma) | ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ๊ฐ์ฒด์™€ ๋งคํ•‘ํ•˜์—ฌ ๊ธฐ์กด์— SQL๋กœ ์ž‘์„ฑํ•˜๋˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ •, ํ…Œ์ด๋ธ” ๊ตฌ์กฐ ๋ณ€๊ฒฝ๋“ฑ์˜ ์ž‘์—…์„ ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ORM |
| [Knex](https://github.com/knex/knex) | ์ฟผ๋ฆฌ ๋นŒ๋”๋ฅผ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ |
| [GraphQL](https://github.com/graphql/graphql-js) | API ์šฉ ์ฟผ๋ฆฌ ์–ธ์–ด์ด๋ฉฐ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋กœ ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ์œ„ํ•œ ๋Ÿฐํƒ€์ž„ |
| [Typegoose](https://github.com/typegoose/typegoose) | ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชฝ๊ตฌ์Šค ๋ชจ๋ธ ์ •์˜ |
| [Mikro ORM](https://github.com/mikro-orm/mikro-orm) | ๋ฐ์ดํ„ฐ ๋งคํผ, ์ž‘์—… ๋‹จ์œ„ ๋ฐ ์•„์ด๋ดํ‹ฐํ‹ฐ ๋งต ํŒจํ„ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” Node.js์šฉ TypeScript ORM. MongoDB, MySQL, MariaDB, PostgreSQL ๋ฐ SQLite ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์› |
| [Node Postgres](https://node-postgres.com/) | PostgreSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์ธํ„ฐํŽ˜์ด์Šคํ•˜๊ธฐ ์œ„ํ•œ node.js ๋ชจ๋“ˆ |

#### ์ถ”ํ›„ ๊ฐœ๋ฐœ ํ•  ํ…œํ”Œ๋ฆฟ

| ์ด๋ฆ„ | ์„ค๋ช… |
| :------------------------------------------------------------------------------ | :------------------------------------------------------------------ |
| [Sequelize Typescript](https://github.com/RobinBuschmann/sequelize-typescript) | ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ๋ฐ Sequelize๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ |
| [TS SQL](https://github.com/codemix/ts-sql) | SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” TypeScript ์œ ํ˜• ์ฃผ์„์œผ๋กœ ์ˆœ์ „ํžˆ ๊ตฌํ˜„ |
| [inversify-express-utils](https://github.com/inversify/inversify-express-utils) | InversifyJS๋ฅผ ์‚ฌ์šฉํ•œ Express ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ผ๋ถ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ |
| [postgress Typescript]() | |
| [graphql-prisma]() | |

## ๐Ÿ›Ž Script ๋ช…๋ น์–ด

- ํ”„๋กœ๋•์…˜ ๋ชจ๋“œ ์‹คํ–‰ : `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](https://docs.docker.com/)๋ž€, ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ด๋‹ค.

[์„ค์น˜ ํ™ˆํŽ˜์ด์ง€](https://docs.docker.com/get-docker/)์— ์ ‘์†ํ•ด์„œ ์„ค์น˜๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

- ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜๊ณ  ์‹คํ–‰ : `docker-compose up -d`
- ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์ปจํ…Œ์ด๋„ˆ, ๋„คํŠธ์›Œํฌ, ๋ณผ๋ฅจ ๋ฐ ์ด๋ฏธ์ง€๋ฅผ ์ œ๊ฑฐ : `docker-compose down`

์ˆ˜์ •์„ ์›ํ•˜์‹œ๋ฉด `docker-compose.yml`๊ณผ `Dockerfile`๋ฅผ ์ˆ˜์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

### โ™ป๏ธ Nginx :: ์›น ์„œ๋ฒ„

[Nginx](https://www.nginx.com/) ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ,๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ๋ฉ”์ผ ํ”„๋ก์‹œ ๋ฐ HTTP ์บ์‹œ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์›น ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

ํ”„๋ก์‹œ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ ์„œ๋ฒ„์—๋กœ๋“œ๋ฅผ ๋ถ„์‚ฐํ•˜๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์›น ์‚ฌ์ดํŠธ์˜ ์ฝ˜ํ…์ธ ๋ฅผ ์›ํ™œํ•˜๊ฒŒ ํ‘œ์‹œํ•˜๊ฑฐ๋‚˜, HTTP ์ด์™ธ์˜ ํ”„๋กœํ† ์ฝœ์„ ํ†ตํ•ด ์ฒ˜๋ฆฌ ์š”์ฒญ์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„์— ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Nginx ์š”์ฒญ์„ ํ”„๋ก์‹œํ•˜๋ฉด ์ง€์ •๋œ ํ”„๋ก์‹œ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์‘๋‹ต์„ ๊ฐ€์ ธ ์™€์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ๋‹ค์‹œ ๋ณด๋ƒ…๋‹ˆ๋‹ค.

์ˆ˜์ •์„ ์›ํ•˜์‹œ๋ฉด `nginx.conf` ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

### โœจ ESLint, Prettier :: ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋ฐ ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ณ€ํ™˜

[ESLint](https://eslint.org/)๋Š” JavaScript ์ฝ”๋“œ์—์„œ ๋ฐœ๊ฒฌ ๋œ ๋ฌธ์ œ ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๊ธฐ์œ„ํ•œ ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

[Prettier](https://prettier.io/)๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์ •ํ•ด์ง„ ์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ๋”ฐ๋ฅด๋„๋ก ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

์ฝ”๋“œ๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ  ์ตœ๋Œ€ ์ค„ ๊ธธ์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ฝ”๋“œ๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” ์ž์ฒด ๊ทœ์น™์œผ๋กœ ๋‹ค์‹œ ์ธ์‡„ํ•˜์—ฌ ์ผ๊ด€๋œ ์Šคํƒ€์ผ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

1. [VSCode](https://code.visualstudio.com/) Extension์—์„œ [Prettier](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode), [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

2. ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด, ๋‹จ์ถ•ํ‚ค `CMD` + `Shift` + `P` (Mac Os) ๋˜๋Š” `Ctrl` + `Shift` + `P` (Windows) ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

3. Format Selection With ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

4. Configure Default Formatter... ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

5. Prettier - Code formatter ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

Formatter ์„ค์ •

> 2019๋…„, TSLint ์ง€์›์ด ์ข…๋ฃŒ ๋˜์–ด ESLint๋ฅผ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

### ๐Ÿ“— Swagger :: API ๋ฌธ์„œํ™”

[Swagger](https://swagger.io/)๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ REST ์›น ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„, ๋นŒ๋“œ, ๋ฌธ์„œํ™”, ์†Œ๋น„ํ•˜๋Š” ์ผ์„ ๋„์™€์ฃผ๋Š” ๋Œ€ํ˜• ๋„๊ตฌ ์ƒํƒœ๊ณ„์˜ ์ง€์›์„ ๋ฐ›๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

API๋ฅผ ๋Œ€๊ทœ๋ชจ๋กœ ์„ค๊ณ„ํ•˜๊ณ  ๋ฌธ์„œํ™”ํ•˜๋Š” ๋ฐ ์šฉ์ดํ•˜๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

Swagger URL์€ `http://localhost:3000/api-docs` ์œผ๋กœ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜์ •์„ ์›ํ•˜์‹œ๋ฉด `swagger.yaml` ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

### ๐ŸŒ REST Client :: HTTP Client ๋„๊ตฌ

REST ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  Visual Studio Code์—์„œ ์ง์ ‘ ์‘๋‹ต์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

VSCode Extension์—์„œ [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

์ˆ˜์ •์„ ์›ํ•˜์‹œ๋ฉด src/http ํด๋” ์•ˆ์— `*.http` ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

### ๐Ÿ”ฎ PM2 :: ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์šด์˜ ๋ฐ ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ์ž

[PM2](https://pm2.keymetrics.io/)๋ž€, ์„œ๋ฒ„์—์„œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์šด์˜ํ•  ๋•Œ ๋ณดํ†ต ๋ฐ๋ชฌ์œผ๋กœ ์„œ๋ฒ„๋ฅผ ๋„์›Œ์•ผ ํ•˜๊ณ  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 :: ๊ฐ•ํ•˜๊ณ  ๋น ๋ฅธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ / ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ

[SWC](https://swc.rs/)๋Š” ์ฐจ์„ธ๋Œ€ ๊ณ ์† ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์œ„ํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ Rust ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

`SWC๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ์—์„œ Babel๋ณด๋‹ค 20๋ฐฐ, 4๊ฐœ ์ฝ”์–ด์—์„œ 70๋ฐฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.`

- tsc ๋นŒ๋“œ :: `npm run build`
- swc ๋นŒ๋“œ :: `npm run build:swc`

์ˆ˜์ •์„ ์›ํ•˜์‹œ๋ฉด `.swcrc` ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

### ๐Ÿ’„ Makefile :: Linux์—์„œ ๋ฐ˜๋ณต ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ปดํŒŒ์ผ์„ ์‰ฝ๊ฒŒํ•˜๊ธฐ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” make ํ”„๋กœ๊ทธ๋žจ์˜ ์„ค์ • ํŒŒ์ผ

- ๋„์›€๋ง :: `make help`

์ˆ˜์ •์„ ์›ํ•˜์‹œ๋ฉด `Makefile` ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

## ๐Ÿ—‚ ์ฝ”๋“œ ๊ตฌ์กฐ (default)

```bash
โ”‚
โ”œโ”€โ”€๐Ÿ“‚ .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
```

## โญ๏ธ ์‘์›ํ•ด์ฃผ์‹  ๋ถ„๋“ค

[![Stargazers repo roster for @ljlm0402/typescript-express-starter](https://reporoster.com/stars/ljlm0402/typescript-express-starter)](https://github.com/ljlm0402/typescript-express-starter/stargazers)

## ๐Ÿด ์ฐธ๊ณ ํ•˜์‹œ๋Š” ๋ถ„๋“ค

[![Forkers repo roster for @ljlm0402/typescript-express-starter](https://reporoster.com/forks/ljlm0402/typescript-express-starter)](https://github.com/ljlm0402/typescript-express-starter/network/members)

## ๐Ÿค ๋„์›€์ฃผ์‹  ๋ถ„๋“ค

[![Contributors repo roster for @ljlm0402/typescript-express-starter](https://contributors-img.web.app/image?repo=ljlm0402/typescript-express-starter)](https://github.com/ljlm0402/typescript-express-starter/graphs/contributors)

## ๐Ÿ’ณ ๋ผ์ด์„ ์Šค

[MIT](LICENSE)

## ๐Ÿ“‘ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ •์˜

| ์–ธ์ œ | ๋ฉ”์‹œ์ง€ |
| :----------------- | :-------------------- |
| ๊ธฐ๋Šฅ ์ถ”๊ฐ€ | โœจ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ |
| ๋ฒ„๊ทธ ์ˆ˜์ • | ๐Ÿž ๋ฒ„๊ทธ ์ˆ˜์ • |
| ์ฝ”๋“œ ๊ฐœ์„  | ๐Ÿ›  ์ฝ”๋“œ ๊ฐœ์„  |
| ํŒจํ‚ค์ง€ ์„ค์น˜ | ๐Ÿ“ฆ ํŒจํ‚ค์ง€ ์„ค์น˜ |
| ๋ฌธ์„œ ์ˆ˜์ • | ๐Ÿ“š ๋ฌธ์„œ ์ˆ˜์ • |
| ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ | ๐ŸŒผ ๋ฒ„์ „ ์—…๋ฐ์ดํŠธ |
| ์ƒˆ๋กœ์šด ํ…œํ”Œ๋ฆฟ ์ถ”๊ฐ€ | ๐ŸŽ‰ ์ƒˆ๋กœ์šด ํ…œํ”Œ๋ฆฟ ์ถ”๊ฐ€ |

## ๐Ÿ“ฌ ์ด์Šˆ๋ฅผ ๋‚จ๊ฒจ์ฃผ์„ธ์š”

๊ฑด์˜ ์‚ฌํ•ญ์ด๋‚˜ ์งˆ๋ฌธ ๋“ฑ์„ ์ด์Šˆ๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

์ตœ์„ ์„ ๋‹คํ•ด ๋‹ต๋ณ€ํ•˜๊ณ  ๋ฐ˜์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ด€์‹ฌ์„ ๊ฐ€์ ธ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

# เดฆเตเดฆเดฟ*หŠแ—œห‹*)