Skip to content

Latest commit

ย 

History

History
402 lines (283 loc) ยท 19.3 KB

README.kr.md

File metadata and controls

402 lines (283 loc) ยท 19.3 KB


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

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

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

npm ์ •๋ณด

npm ๋ฒ„์ „ npm ๋ฆด๋ฆฌ์ฆˆ ๋ฒ„์ „ npm ํŒจํ‚ค์ง€ ๋ผ์ด์„ ์Šค npm ๋‹ค์šด๋กœ๋“œ ์ˆ˜

github ์Šคํƒ€ github ํฌํฌ github ์ปจํŠธ๋ฆฌ๋ทฐํ„ฐ github ์ด์Šˆ


๋ฒˆ์—ญ๋ณธ - ์ž์‹ ์ด ์›ํ•˜๋Š” ์–ธ์–ด๋กœ ์ฝ์œผ์„ธ์š”


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

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

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

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

์ฐธ๊ณ  : express-generator-typescript

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

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

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

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

$ npm install -g typescript-express-starter

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

ํ”„๋กœ์ ํŠธ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ 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๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋Šฅ

๐Ÿ›Ž 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 ๋กœ

๐Ÿ’Ž ํ”„๋กœ์ ํŠธ ๊ธฐ๋Šฅ

  • Application

  • DevOps

  • Utilities

  • Database

Simple Icons

๐Ÿณ Docker :: ์ปจํ…Œ์ด๋„ˆ ํ”Œ๋žซํผ

Docker๋ž€, ์ปจํ…Œ์ด๋„ˆ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ๊ฐ€์ƒํ™” ํ”Œ๋žซํผ์ด๋‹ค.

์„ค์น˜ ํ™ˆํŽ˜์ด์ง€์— ์ ‘์†ํ•ด์„œ ์„ค์น˜๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

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

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

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

Nginx ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ,๋กœ๋“œ ๋ฐธ๋Ÿฐ์„œ, ๋ฉ”์ผ ํ”„๋ก์‹œ ๋ฐ HTTP ์บ์‹œ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ์›น ์„œ๋ฒ„์ž…๋‹ˆ๋‹ค.

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

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

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

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

ESLint๋Š” JavaScript ์ฝ”๋“œ์—์„œ ๋ฐœ๊ฒฌ ๋œ ๋ฌธ์ œ ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๊ธฐ์œ„ํ•œ ์ •์  ์ฝ”๋“œ ๋ถ„์„ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

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

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

  1. VSCode Extension์—์„œ Prettier, 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๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ REST ์›น ์„œ๋น„์Šค๋ฅผ ์„ค๊ณ„, ๋นŒ๋“œ, ๋ฌธ์„œํ™”, ์†Œ๋น„ํ•˜๋Š” ์ผ์„ ๋„์™€์ฃผ๋Š” ๋Œ€ํ˜• ๋„๊ตฌ ์ƒํƒœ๊ณ„์˜ ์ง€์›์„ ๋ฐ›๋Š” ์˜คํ”ˆ ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค.

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

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

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

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

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

VSCode Extension์—์„œ REST Client ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

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

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

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 :: ๊ฐ•ํ•˜๊ณ  ๋น ๋ฅธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ / ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ

SWC๋Š” ์ฐจ์„ธ๋Œ€ ๊ณ ์† ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ์œ„ํ•œ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ Rust ๊ธฐ๋ฐ˜ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

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

  • tsc ๋นŒ๋“œ :: npm run build
  • swc ๋นŒ๋“œ :: npm run build:swc

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

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

โ”‚
โ”œโ”€โ”€ /.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

โญ๏ธ ์ฃผ์‹ ๋ถ„๋“ค

Stargazers repo roster for @ljlm0402/typescript-express-starter

๐Ÿด ํ•ด์ฃผ์‹ ๋ถ„๋“ค

Forkers repo roster for @ljlm0402/typescript-express-starter

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

๊ธฐ์—ฌ์ž

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

MIT

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

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

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

์ถ”ํ›„ ์ถ”๊ฐ€ํ•˜๊ณ ์žํ•˜๋Š” ํ…œํ”Œ๋ฆฟ, ์งˆ๋ฌธ, ๊ธฐ๋Šฅ์„ ์ ์–ด ์ฃผ์‹œ๋ฉด ์ตœ์„ ์„ ๋‹คํ•ด ๋‹ต๋ณ€ํ•˜๊ณ  ๋ฐ˜์˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

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

(เน‘หƒฬตแด—ห‚ฬต)ูˆ