Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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 17 hours ago
JSON representation
๐ Quick and Easy TypeScript Express Starter
- Host: GitHub
- URL: https://github.com/ljlm0402/typescript-express-starter
- Owner: ljlm0402
- License: mit
- Created: 2019-12-17T12:12:02.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2024-08-19T05:01:01.000Z (5 months ago)
- Last Synced: 2025-01-07T05:10:47.368Z (8 days ago)
- Topics: docker, eslint, express, graphql, jest, knex, logger, mikro-orm, mongoose, nginx, nodejs, prettier, prisma, routing-controllers, sequelize, swagger, swc, typegoose, typeorm, typescript
- Language: TypeScript
- Homepage: http://npm.im/typescript-express-starter
- Size: 37.7 MB
- Stars: 2,753
- Watchers: 30
- Forks: 420
- Open Issues: 46
-
Metadata Files:
- Readme: README.kr.md
- License: LICENSE
Awesome Lists containing this project
- awesome - ljlm0402/typescript-express-starter - ๐ Quick and Easy TypeScript Express Starter (TypeScript)
- awesome-typescript - typescript-express-starter - Quick and Easy TypeScript Express Starter. (Getting Started with (Awesome) TypeScript / Typescript Project Starters)
- awesome-boilerplate - Github
- awesome-boilerplate - Github
README
ํ์ ์คํฌ๋ฆฝํธ ์ต์คํ๋ ์ค ์คํํฐ
๐ ํ์ ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ ์ต์คํ๋ ์ค ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์คํํฐ ํจํค์ง
- [๐ฐ๐ท ํ๊ตญ์ด](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 ์ ์ฉํฉ๋๋ค.
> 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)
## ๐ ์ปค๋ฐ ๋ฉ์์ง ์ ์
| ์ธ์ | ๋ฉ์์ง |
| :----------------- | :-------------------- |
| ๊ธฐ๋ฅ ์ถ๊ฐ | โจ ๊ธฐ๋ฅ ์ถ๊ฐ |
| ๋ฒ๊ทธ ์์ | ๐ ๋ฒ๊ทธ ์์ |
| ์ฝ๋ ๊ฐ์ | ๐ ์ฝ๋ ๊ฐ์ |
| ํจํค์ง ์ค์น | ๐ฆ ํจํค์ง ์ค์น |
| ๋ฌธ์ ์์ | ๐ ๋ฌธ์ ์์ |
| ๋ฒ์ ์ ๋ฐ์ดํธ | ๐ผ ๋ฒ์ ์ ๋ฐ์ดํธ |
| ์๋ก์ด ํ ํ๋ฆฟ ์ถ๊ฐ | ๐ ์๋ก์ด ํ ํ๋ฆฟ ์ถ๊ฐ |## ๐ฌ ์ด์๋ฅผ ๋จ๊ฒจ์ฃผ์ธ์
๊ฑด์ ์ฌํญ์ด๋ ์ง๋ฌธ ๋ฑ์ ์ด์๋ก ๋จ๊ฒจ์ฃผ์ธ์.
์ต์ ์ ๋คํด ๋ต๋ณํ๊ณ ๋ฐ์ํ๊ฒ ์ต๋๋ค.
๊ด์ฌ์ ๊ฐ์ ธ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
# เดฆเตเดฆเดฟ*หแห*)