์ด ํ๋ก์ ํธ๋ ISOS์ MES(์์ฐ๊ด๋ฆฌ์์คํ ) ํ๋ก๊ทธ๋จ์ธ ISO์ Server ํ๋ก์ ํธ์ ๋๋ค.
โ๏ธ ๊ฐ๋ฐํ๊ฒฝ(Production / Development / Test)๋ณ๋ก
์๋์ ๋ชจ๋์ ํฌํจํ๊ณ ์์ต๋๋ค.
| Initial | Name | Name(En) | Desciprtion |
|---|---|---|---|
ADM |
๊ด๋ฆฌ์ | Admin | ๊ด๋ฆฌ์ ์ต์ ๋ฐ ๊ธฐ์ค์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
AUT |
์ธ์ฆ/์ธ๊ฐ | Authentication/Authorization | ์ฌ์ฉ์ ๋ฐ ๊ถํ, ์ธ์ฆ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
STD |
๊ธฐ์ค์ ๋ณด | Standard | ISO์ ๊ธฐ์ด ๋ฐ์ดํฐ์ธ ๊ธฐ์ค์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
MAT |
์์ฌ/๊ตฌ๋งค๊ด๋ฆฌ | Material | ์์ฌ์ ๊ตฌ๋งค์ ์ฌ๊ณ ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
PRD |
์์ฐ๊ด๋ฆฌ | Production | ์ ํ์ ์์ฐ์ ๊ด๋ จ๋ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
EQM |
์ค๋น๊ด๋ฆฌ | Equipment | ๊ณต์ฅ์ ์ค๋น ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
MLD |
๊ธํ๊ด๋ฆฌ | Mold | ๊ณต์ฅ์ ๊ธํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
INV |
์ฌ๊ณ ๊ด๋ฆฌ | Inventory | ์ ์ฌ์ ๋ชจ๋ ์ฌ๊ณ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
OUT |
์ธ์ฃผ๊ด๋ฆฌ | Outsourcing | ํ๋ ฅ์ฌ์ ๊ด๋ จ๋ ์ธ์ฃผ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
QMS |
ํ์ง๊ด๋ฆฌ | Quality | ์์ ๊ฒ์ฌ, ๊ณต์ ๊ฒ์ฌ, ์ต์ข ๊ฒ์ฌ๋ฑ ํ์ง์ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
SAL |
์ ํ/์์ ๊ด๋ฆฌ | Sales | ์ ํ์ ํ๋งค์ ์ฌ๊ณ ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
- Lastest: v0.1.0 (2022-02-07)
| Module | Version | Description |
|---|---|---|
typescript |
^4.2.3 |
Typescript Module |
ts-node |
^9.1.1 |
Typescript ํ์ผ ์คํ Module |
axios |
^0.24.0 |
Http Connect Module |
babel-plugin-istanbul |
^6.0.0 |
ES6 ๊ด๋ จ Module |
babel-plugin-transform-decorators-legacy |
^1.3.5 |
ES6 ๊ด๋ จ Module |
babel-plugin-transform-runtime |
^6.23.0 |
ES6 ๊ด๋ จ Module |
babel-preset-es2015-node6 |
^0.4.0 |
ES6 ๊ด๋ จ Module |
babel-preset-minify |
^0.5.1 |
ES6 ๊ด๋ จ Module |
bcrypt |
^5.0.1 |
๋จ๋ฐฉํฅ ์ํธํ Module |
cookie-parser |
^1.4.5 |
Express์์ Cookie๋ฅผ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ Module |
cors |
^2.8.5 |
Cross Origin Resource Sharing ์ค์ Module |
crypto-js |
^4.0.0 |
์๋ฐฉํฅ ์ํธํ Module |
dotenv |
^8.2.0 |
ํ๊ฒฝ๋ณ์๋ฅผ Code Level์์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์๋ Module(.env) |
esm |
^3.2.25 |
Typescript์์ export๋ฌธ๋ฒ์ ์ฌ์ฉํ ์ ์๋ Module |
express |
^4.17.1 |
Http Server Module |
express-async-errors |
^3.1.1 |
Express์ ๋น๋๊ธฐ Error Handling Module |
express-validator |
^6.14.0 |
Express์ ์ ํจ์ฑ๊ฒ์ฌ Middleware Module |
fs |
^0.0.1-security |
File Stream Module |
http-status |
^1.5.0 |
Http Response Module |
jest |
^26.6.3 |
Testing Module |
jsonwebtoken |
^8.5.1 |
JWT(Json Web Token) ์ฌ์ฉ Module |
lodash |
^4.17.21 |
๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ํธํ๊ฒ ๋ค๋ฃฐ ์ ์๋ Module |
moment |
^2.29.1 |
์๊ฐ์ ํธํ๊ฒ ๋ค๋ฃฐ ์ ์๋ Module |
morgan |
^1.10.0 |
Logging Module |
pg |
^8.6.0 |
Postgresql(RDBMS) Module |
redis |
^3.1.2 |
Redis(Cache Database) Module |
reflect-metadata |
^0.1.13 |
Sequelize-Typescript ์ข ์ Module |
sequelize |
^6.6.2 |
ORM(Object Relational Mapping) Module |
sequelize-cli |
^6.2.0 |
Sequelize์ CLI(Command Line Interface) Module |
sequelize-typescript |
^2.1.0 |
Sequelize์ Typescript Version Module |
supertest |
^6.1.3 |
Testing Module |
tsc-watch |
^4.2.9 |
๊ฐ๋ฐํ๊ฒฝ์์ ํ์ผ์ด ์ ๋ฐ์ดํธ ๋ ๋๋ง๋ค ์ฌ ์ปดํ์ผ์ ์์ผ์ฃผ๋ Module |
uuid |
^8.3.2 |
UUID๋ฅผ ์์ฑ ๋ฐ ๊ด๋ฆฌํ ์ ์๋ Module |
winston |
^3.3.3 |
Logging Module |
winston-daily-rotate-file |
^4.5.5 |
Winston์์ Loggingํ ํ์ผ์ ์ผ์ ์ฃผ๊ธฐ์ ๋ฐ๋ผ ๊ด๋ฆฌํ ์ ์๋ Module |
- shells/ (โ๏ธ Development ํ๊ฒฝ์์๋ง ์ฌ์ฉ)
- src/
- .babelrc
- .dockerignore (โ๏ธ Production ํ๊ฒฝ์์๋ง ์ฌ์ฉ)
- .env
- .gitignore
- .sequelizerc
- appspec.yml (โ๏ธ ํ๊ฒฝ[Production, Development]์ ๋ฐ๋ผ ์์ฑ๋ ๋ด์ฉ์ด ์์ดํจ)
- buildspec.yml (โ๏ธ ํ๊ฒฝ[Production, Development]์ ๋ฐ๋ผ ์์ฑ๋ ๋ด์ฉ์ด ์์ดํจ)
- Dockerfile (โ๏ธ Production ํ๊ฒฝ์์๋ง ์ฌ์ฉ)
- jest.config.js
- package.json
- readme.md
- tsconfig.json
- taskdef.json (โ๏ธ Production ํ๊ฒฝ์์๋ง ์ฌ์ฉ)
- yarn.lock
| Foler/File | Naming Convention | Description |
|---|---|---|
๐ shells |
{file_name}.sh |
AWS CI/CD ํ๊ฒฝ ์ค CodeDeploy ํ๊ฒฝ์์ ์ฌ์ฉํ๋ Hook์ ๋ํ Shell Script ํ์ผ ์์น (โ๏ธ Development ํ๊ฒฝ์์๋ง ์ฌ์ฉ) |
๐ src |
- | Application์ด ์คํ๋๋๋ฐ ํ์ํ ํ์ผ ์์น |
๐ bin |
- | Application์ ์์ ์์น์ธ www.ts ํ์ผ ์์น |
๐ caches |
{file_name}.cache.ts |
Cache(Redis) Database๋ฅผ ์ฌ์ฉํ๋ ํ์ผ ์์น |
๐ configs |
- | ํ๊ฒฝ๋ณ์์ ์ถ๊ฐ Module๋ค์ Config(ํ๊ฒฝ์ค์ ) ํ์ผ ์์น |
๐ controllers |
{file_name}.controller.ts |
Client ์์ฒญ์ ๋ฐ๋ผ์ ์คํ๋๋ Contoller ํ์ผ ์์น |
๐ interfaces |
{file_name}.interface.ts |
Database ํ ์ด๋ธ ๋จ์์ DTO ๊ฐ์ฒด๋ฅผ ๋ง๋๋ Interface ๋ฐ ์ถ๊ฐ Interface ๊ด๋ฆฌ ํ์ผ ์์น |
๐ middlewares |
{file_name}.middleware.ts |
Client์ ์์ฒญ์ด Module๋ก Routing๋๊ธฐ์ ์ ์คํ๋๋ Middleware (File Stream, JWT, Tenant ๊ฒฉ๋ฆฌ) |
๐ migrations |
{file_name}.migration.ts |
Database Table์ ์์ฑ ๋ฐ ์ญ์ ์ ๊ด๋ จ๋ ํ์ผ ์์น |
๐ models |
{file_name}.model.ts |
Database Table์ ORM๊ณผ ์ฐ๊ฒฐํ๋ Model ๊ฐ์ฒด์ ๊ด๋ จ๋ ํ์ผ ์์น |
๐ queries |
{file_name}.query.ts |
ORM์ผ๋ก ๊ตฌํํ๊ธฐ ํ๋ Raw Query ๊ด๋ จ ํ์ผ ์์น |
๐ repositories |
{file_name}.repository.ts |
Model์์ ORM์ ์ด์ฉํ์ฌ Database์ ์ ๊ทผํ๋ ํ์ผ ์์น |
๐ routes |
{file_name}.route.ts |
Client์ ์์ฒญ์ ๋ฐ๋ผ Controller๋ก ์ฐ๊ฒฐํด์ฃผ๋ ๊ฐ์ฒด์ธ Route ํ์ผ ์์น |
๐ services |
{file_name}.service.ts |
Application์ ๋น์ฆ๋์ค ๋ก์ง์ด ๊ตฌํ๋์ด์๋ ํ์ผ ์์น |
๐ states |
{file_name}.state.ts |
ISO์ Response Module์์ ์ฌ์ฉํ๋ Custom State Code์ ๊ด๋ จ๋ ํ์ผ ์์น |
๐ tests |
{file_name}.test.ts |
Testing Code๊ฐ ์์ฑ๋์ด์๋ ํ์ผ ์์น |
๐ types |
{file_name}.type.ts |
Typeํํ์ ๋ฐ์ดํฐ ํ์ ์ ์ ์ํ ํ์ผ ์์น |
๐ utils |
- | ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๊ด๊ณ์๋ Uilization Function์ด ์์ฑ๋ ํ์ผ ์์น |
๐ validations |
{file_name}.validation.ts |
Client์์ฒญ์ Routing๋ ๋ ์ ๋ ฅ๋ Parameter์ ๋ํ ์ ํจ์ฑ๊ฒ์ฌ ํ์ผ ์์น |
๐ wrappers |
{file_name}.wrapper.ts |
Client๋ก Response๋ฅผ Returnํ ๋ ์ ์ธํ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ์ ํ ํ์ผ ์์น |
๐ app.ts |
- | Application์ Main Life Cycle์ด ์์นํ ํ์ผ |
๐ .babelrc |
- | Babel ์ค์ ์ด ์์ฑ๋์ด์๋ ํ์ผ |
๐ .dockerignore |
- | Docker Build(๋์ปค์ด๋ฏธ์ง ์์ฑ)๋ฅผ ์คํ ํ ๋ ์ด๋ฏธ์ง ์์ฑ์ ์ ์ธํ ๊ฒฝ๋ก๋ฅผ ์์ฑํ ํ์ผ (โ๏ธ Production ํ๊ฒฝ์์๋ง ์ฌ์ฉ) |
๐ .env |
- | Application์์ ์ฌ์ฉํ๋ ํ๊ฒฝ๋ณ์๊ฐ ์์ฑ๋์ด์๋ ํ์ผ |
๐ .gitignore |
- | Git์ Commitํ ๋ ์ ์ธํ ๊ฒฝ๋ก๋ฅผ ์์ฑํ ํ์ผ |
๐ .sequelizerc |
- | Sequelize(ORM) ์ค์ ์ด ์์ฑ๋์ด์๋ ํ์ผ |
๐ appspec.yml |
- | CI/CD์ค Deploy๋จ๊ณ์์ ์ฌ์ฉํ๋ Life Cycle์ ๋ํ ์ค์ ์ด ์์ฑ๋์ด์๋ ํ์ผ (โ๏ธ ํ๊ฒฝ[Production, Development]์ ๋ฐ๋ผ ์์ฑ๋ ๋ด์ฉ์ด ์์ดํจ) |
๐ buildspec.yml |
- | CI/CD์ค Build๋จ๊ณ์์ ์ฌ์ฉํ๋ Life Cycle์ ๋ํ ์ค์ ์ด ์์ฑ๋์ด์๋ ํ์ผ (โ๏ธ ํ๊ฒฝ[Production, Development]์ ๋ฐ๋ผ ์์ฑ๋ ๋ด์ฉ์ด ์์ดํจ) |
๐ Dockerfile |
- | Docker Build(๋์ปค์ด๋ฏธ์ง ์์ฑ) ์คํ ์ ๋์ํ๋ Life Cycle์ด ์์ฑ๋์ด์๋ ํ์ผ (โ๏ธ Production ํ๊ฒฝ์์๋ง ์ฌ์ฉ) |
๐ jest.config.js |
- | Jest(Testing Module) ์ค์ ์ด ์์ฑ๋์ด์๋ ํ์ผ |
๐ package.json |
- | Project์ ์ ๋ณด ๋ฐ ํจํค์ง ์ ๋ณด๊ฐ ์์ฑ๋์ด์๋ ํ์ผ |
๐ readme.md |
- | Read Me |
๐ taskdef.json |
- | AWS์ CI/CD ์คํ์ ํ์ํ ํ์ผ (AWS ECSํตํ CI/CD๋ฅผ ์งํ ํ ๋ Docker์ด๋ฏธ์ง๋ฅผ ํตํ์ฌ Task๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ค์ ํ์ผ) (โ๏ธ Production ํ๊ฒฝ์์๋ง ์ฌ์ฉ) |
๐ tsconfig.json |
- | Project์ Typescript ์ค์ ์ด ์์ฑ๋์ด์๋ ํ์ผ |
๐ yarn.lock |
- | Node Module์ ๋ฒ์ ๊ด๋ฆฌ ์ด๋ ฅ์ด ์์ฑ๋์ด์๋ ํ์ผ |
์ด ํ๋ก์ ํธ์์๋ ํ๊ฒฝ๋ณ์๋ฅผ /configs/config.ts ํ์ผ์์ ์ฝ์ด์ ๊ด๋ฆฌ ๋ฐ ์ฌ์ฉํฉ๋๋ค.
ํ๋ก์ ํธ ๋ด์์ ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉ ํ ๋ config.ts ํ์ผ์์ export๋ ๋ณ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. (ex, config.node_env ๋ฑ)
Root Directory์ .env ํ์ผ์ ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ์์ ์ ํ๊ฒฝ๋ณ์๋ฅผ ์
๋ ฅํ๋ ๋ณ์ ๋ฆฌ์คํธ์
๋๋ค.
โ๏ธ .env ํ์ผ์ ์ ๋ Commit ํ์ง ์์ต๋๋ค.
๊ฐ ๋ฐฐํฌํ๊ฒฝ(production, development, test)๋ณ .env ํ์ผ์ AWS S3 s3-isos-environment์์ ๊ด๋ฆฌํฉ๋๋ค.
ํ๊ฒฝ๋ณ .env ํ์ผ์ ์ด๋ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
production: iso.env, development: iso.dev.env, test: iso.test.env
ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํ๊ฒฝ๋ณ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๐ก Value๊ฐ ์ ๋ ฅ๋์ด์์ง ์์ ํญ๋ชฉ์ Desciption์ ์ฐธ์กฐํ์๊ธฐ ๋น๋๋๋ค.
| Name | Config Name | Value | Description |
|---|---|---|---|
| NODE_ENV | config.node_env | production | ํ์ฌ ํ๋ก์ ํธ๊ฐ ๊ตฌ๋๋๊ณ ์๋ ๋ฐฐํฌํ๊ฒฝ(production, development, test) |
| PORT | config.port | 3004 | ํ์ฌ ํ๋ก์ ํธ๊ฐ ๊ตฌ๋๋๊ณ ์๋ ํฌํธ(production: 3004 / development: 3104, test: 3104) |
| CACHE_ELA_HOST | config.cache.elastic.host | - | Tenant ๊ฒฉ๋ฆฌ๋ฅผ ์ํ AWS Elasticache(Redis) Server Host |
| CACHE_ELA_PORT | config.cache.elastic.port | - | Tenant ๊ฒฉ๋ฆฌ๋ฅผ ์ํ AWS Elasticache(Redis) Server Port |
| JWT_SECRET | config.jwt.secret | - | Json Web Token์ Secret Key |
| JWT_EXPIRESIN | config.jwt.expiresin | - | Json Web Token์ ๋ง๋ฃ์๊ฐ |
| CRYPTO_SECRET | config.crypto.secret | - | Crypto ์ํธํ์ ๋ณตํธํ Key |
| Name | Config Name | Value | Description |
|---|---|---|---|
| NODE_ENV | config.node_env | development | ํ์ฌ ํ๋ก์ ํธ๊ฐ ๊ตฌ๋๋๊ณ ์๋ ๋ฐฐํฌํ๊ฒฝ(production, development, test) |
| PORT | config.port | 3104 | ํ์ฌ ํ๋ก์ ํธ๊ฐ ๊ตฌ๋๋๊ณ ์๋ ํฌํธ(production: 3004 / development: 3104, test: 3104) |
| JWT_SECRET | config.jwt.secret | - | Json Web Token์ Secret Key |
| JWT_EXPIRESIN | config.jwt.expiresin | - | Json Web Token์ ๋ง๋ฃ์๊ฐ |
| CRYPTO_SECRET | config.crypto.secret | - | Crypto ์ํธํ์ ๋ณตํธํ Key |
| Name | Config Name | Value | Description |
|---|---|---|---|
| NODE_ENV | config.node_env | test | ํ์ฌ ํ๋ก์ ํธ๊ฐ ๊ตฌ๋๋๊ณ ์๋ ๋ฐฐํฌํ๊ฒฝ(production, development, test) |
| PORT | config.port | 3104 | ํ์ฌ ํ๋ก์ ํธ๊ฐ ๊ตฌ๋๋๊ณ ์๋ ํฌํธ(production: 3004 / development: 3104, test: 3104) |
| DB_TEST_USER | config.db.user | - | Test ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ํ ๋ ์ฐ๊ฒฐํ Database์ User๋ช |
| DB_TEST_PW | config.db.password | - | Test ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ํ ๋ ์ฐ๊ฒฐํ Database์ Password |
| DB_TEST_HOST | config.db.host | - | Test ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ํ ๋ ์ฐ๊ฒฐํ Database์ Host |
| DB_TEST_PORT | config.db.port | - | Test ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ํ ๋ ์ฐ๊ฒฐํ Database์ Port |
| DB_TEST_DATABASE | config.db.database | - | Test ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ํ ๋ ์ฐ๊ฒฐํ Database์ Database๋ช |
| DB_TEST_DIALECT | config.db.dialect | - | Test ํ๋ก์ ํธ๋ฅผ ๊ตฌ๋ํ ๋ ์ฐ๊ฒฐํ Database์ Engine๋ช (mssql, postgres, mysql ๋ฑ) |
| DB_RESET_TYPE | config.db.reset_type | init | Database Migration์ Data Input ์ ํ test: Test(Demo)๋ฐ์ดํฐ ์ ์ฒด ์
๋ ฅ init: ํ๋ก๊ทธ๋จ ๊ธฐ์ด๋ฐ์ดํฐ๋ง ์
๋ ฅ |
| JWT_SECRET | config.jwt.secret | - | Json Web Token์ Secret Key |
| JWT_EXPIRESIN | config.jwt.expiresin | - | Json Web Token์ ๋ง๋ฃ์๊ฐ |
| CRYPTO_SECRET | config.crypto.secret | - | Crypto ์ํธํ์ ๋ณตํธํ Key |
| Seq | Description |
|---|---|
| A | Client์์ Backend Appication์ผ๋ก ์์ฒญํฉ๋๋ค. |
| B | Client์์ฒญ์ Header์์ Tenant์ Database ์ ์์ ๋ณด๋ฅผ ์
๋ ฅ๋ฐ์ Database ์ฐ๊ฒฐ ๊ฐ์ฒด(Sequelize)๋ฅผ ์์ฑํฉ๋๋ค. (โ๏ธ test ํ๊ฒฝ์์๋ Tenant์ ๋ณด๋ฅผ ์์ฒญ์์ ์
๋ ฅ๋ฐ์ง ์๊ณ ํ๊ฒฝ๋ณ์์ ์๋ ์ ์์ ๋ณด๋ฅผ ํตํด Database์ ํต์ ํฉ๋๋ค.) |
| C | Client์์ฒญ์ Header์์ Access Token์ ๊ฒ์ฆํ์ฌ ์ ํจํ ์ฌ์ฉ์์ธ์ง ํ๋จํฉ๋๋ค. Access Token์ด ๋ง๋ฃ๋ ๊ฒฝ์ฐ ํจ๊ป ์
๋ ฅ๋ Refresh Token์ ์ ํจ์ฑ ๊ฒ์ฌ ํ ์ ํจ ํ ๊ฒฝ์ฐ Access Token์ ์ฌ๋ฐ๊ธ ํฉ๋๋ค. ํด๋น์ฌํญ์ ๋ชจ๋ ๋ง์กฑํ์ง ๋ชปํ ๊ฒฝ์ฐ Error๋ฅผ Throw ํฉ๋๋ค. |
| D | Tenant ๊ฒ์ฆ๊ณผ Token ๊ฒ์ฆ์ ํตํ์ฌ ์ฌ๋ฐ๋ฅธ ์ฌ์ฉ์๋ก ํ๋จ๋ ๊ฒฝ์ฐ Client์ ์์ฒญ์ด Routing์ผ๋ก ์ด๋ํฉ๋๋ค. |
| E | Client์์ ์
๋ ฅํ ์์ฒญ์ Parameter๊ฐ API์ ์ ํฉํ์ง ์ ํจ์ฑ์ ๊ฒ์ฌํฉ๋๋ค. |
| F | Routing์์ Client์ ์์ฒญ ์ ๋ณด์๋ฐ๋ผ ์๋ง์ Controller ๋ก์ง์ผ๋ก ์ด๋ํฉ๋๋ค. |
| G | Controller์์๋ ์ฌ์ฉ์์ ์์ฒญ์ ์ํํ๊ธฐ ์ํ์ฌ ์๋ง์ Service๋ฅผ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์คํํฉ๋๋ค. |
| H | Service์์๋ ๋ ๋ค๋ฅธ Service๋ฅผ ํธ์ถํ๊ฑฐ๋ Repository๋ฅผ ํธ์ถํ์ฌ ํ์ํ ๋ก์ง์ ์ํํฉ๋๋ค. |
| I | Repository์์๋ Service์ ์์ฒญ์ ๋ฐ๋ผ Model๋ก ์ ํฉํ ๋ฐ์ดํฐ๋ฅผ ์์ฒญํฉ๋๋ค. |
| J | Repository์์ ์์ฒญํ Transaction์ Database๋ก ์์ฒญํฉ๋๋ค. |
| K | Transaction์ ๊ฒฐ๊ณผ ๋ฐ์ดํฐ๋ฅผ Model์ ์ ์ฌํฉ๋๋ค. |
| L | ๊ฒฐ๊ณผ Model ๋ฐ์ดํฐ๋ฅผ Repository๋ก ๋ฐํํฉ๋๋ค. |
| M | ๊ฒฐ๊ณผ Repository ๋ฐ์ดํฐ๋ฅผ Service๋ก ๋ฐํํฉ๋๋ค. |
| N | ๊ฒฐ๊ณผ Service ๋ฐ์ดํฐ๋ฅผ Controller๋ก ๋ฐํํฉ๋๋ค. |
| O | ์ ๋ฌ๋ฐ์ Service์ ๋ฐ์ดํฐ๋ฅผ ์กฐํฉํ์ฌ ๋ฐํํฉ๋๋ค. |
| P | Client๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. |
| Q | Client๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํฉ๋๋ค. |
ISO Server ํ๋ก์ ํธ ๊ฐ๋ฐ๋ฐฉ๋ฒ ๋ฐ ์์๋ ์๋์ ๊ฐ์ต๋๋ค.
โ๏ธ ISO Server์ ๊ฐ๋ฐ์ ๋ง์น ํ ๋ฐ๋์ Postman API-Docs ํน์ Swagger์ API ๋ณ๊ฒฝ์ฌํญ์ ๊ธฐ์ ํด์ผ ํฉ๋๋ค.
์๋์ ๋์ค๋ ๋ชจ๋ Folder์๋ ํ์ ํด๋๋ก MES์ ๋ชจ๋์ ๊ฐ์ต๋๋ค. (ex, controllers/adm, controllers/std...)
File์ ๋ํ Naming Convention์ผ๋ก ์์ ๋ชจ๋๋ช ์ ์ ์ธํ๊ณ (std, aut ๋ฑ) ๋ชจ๋๋ช (ํ ์ด๋ธ๋ช )์ Kebap Case๋ฅผ ์ฌ์ฉํฉ๋๋ค.
(ex, std_insp_type_tb ๋ชจ๋์ ๊ฒฝ์ฐ insp-type.model.ts, insp-type.controller.ts...)
| Seq | Folder | Description |
|---|---|---|
| 1 | interfaces |
Database์ Table์ Column๊ณผ ๋งค์นญ๋๋๋ก interface๋ฅผ ์์ฑํฉ๋๋ค. โ๏ธ ๊ธฐ๋ณธ์ ์ผ๋ก undefined๋ฅผ ํ์ฉํ๋ Nullable Column์๋ Type์ null์ ์ถ๊ฐํฉ๋๋ค. Interface์ ๋ช ์นญ์ผ๋ก๋ I๋ฅผ Prefix๋ก ์ ๋ ฅํ๋ฉฐ ์ดํ ์ ๋ ฅ๋๋ ๋ฌธ์๋ Camel Case๋ก ์ ๋ ฅํฉ๋๋ค. (ex, IStdDept) |
| 2 | models |
Database์ Table์ Column๊ณผ ๋งค์นญ๋๋๋ก model์ ์์ฑํฉ๋๋ค. โ๏ธ Sequelize์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Hook์ ์ฌ์ฉํ์ง ์์ต๋๋ค. โ๏ธ Foreign Key์ ์ฐ๊ฒฐ์ BelongTo๋ง ์ฌ์ฉํฉ๋๋ค. โ๏ธ Datetime Column์ ๊ฒฝ์ฐ Timezone์ ์ฌ์ฉํ์ง ์์ต๋๋ค. |
| 3 | migrations |
๊ฐ ๋ชจ๋์ ํ
์ด๋ธ ์์ฑ ๊ธฐ๋ณธ์ ๋ณด๋ฅผ ์
๋ ฅํฉ๋๋ค. Database๋ฅผ migration ํ์ผ๋ก ์์ฑ ํ ๋ ๊ธฐ์ด๋ก ์
๋ ฅ๋๋ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํฉ๋๋ค. โ๏ธ ํ ์คํธ ํ๊ฒฝ์์๋ง ํ์ํ ๋ฐ์ดํฐ์ ๊ธฐ์ด ๋ฐ์ดํฐ๋ก ๋ค์ด๊ฐ์ผํ๋ ๋ฐ์ดํฐ์ ๊ตฌ๋ถ์ ํด์ผํฉ๋๋ค. |
| 4 | repositories |
Database Transaction ์ ๋ณด๋ฅผ ์์ฑํฉ๋๋ค. ๊ธฐ๋ณธ CRUD ๋ก์ง์ ์์ฑํ๋ฉฐ, Read์๋ uuid ๋ฐ unique Key๋ก ์กฐํํ๋ ํจ์๋ฅผ ์ถ๊ฐํฉ๋๋ค. โ๏ธ ์์๊ฐ ๋ณด์ฅ๋์ง ์์๋ ๋๋ ๊ฒฝ์ฐ๋ ๋ฐ๋์ Promise.all์ ์ด์ฉํ์ฌ ๋น๋๊ธฐ ์ฝ๋๋ก ์์ฑํด์ผ ํฉ๋๋ค. โ๏ธ Database Record์ Updateํน์ Deleteํ์๊ฐ ๋ฐ์ ํ ๊ฒฝ์ฐ ๋ฐ๋์ Log Table์ ์ ๋ณด๋ฅผ ์ ์ฅํด์ผ ํฉ๋๋ค. โ๏ธ Repository ํ์ผ์์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ ๋ ์์ฑํด์๋ ์๋๋ฉฐ, ์์ํ๊ฒ Database Transaction ๋ก์ง๋ง ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. |
| 5 | queries |
ORM์ผ๋ก ์ฒ๋ฆฌ๊ฐ ํ๋ Transaction ์ ๋ณด๋ฅผ Query๋ก ์์ฑํฉ๋๋ค. โ๏ธ ORM์ผ๋ก ์ถฉ๋ถํ ์์ฑ์ด ๊ฐ๋ฅํ ๋ก์ง์ ๊ฒฝ์ฐ Query๋ก ์์ฑํด์๋ ์๋ฉ๋๋ค. โ๏ธ Query ํ์ผ์์๋ ์ฉ๋๋ฅผ ๋ถ๋ช ํ ํ์ฌ ํ์ผ๋ช ์ ์์ฑํ๋ฉฐ Return์ String์ผ๋ก ํ๋ ํจ์๋ฅผ export ํฉ๋๋ค. |
| 6 | services |
Repository ๋ฐ ๋ ๋ค๋ฅธ Service๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ ๊ฐ๊ณตํ๋ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํฉ๋๋ค. โ๏ธ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ต์๋จ์์ ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํฉ๋๋ค. โ๏ธ ํ์ํ Error Handling์ Service์ ์์ฑํฉ๋๋ค. |
| 7 | controllers |
์ฌ๋ฌ๊ฐ์ Service๋ฅผ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ ๊ฒฐ๊ณผ ๊ฐ์ ์กฐํฉํ์ฌ Client๋ก ๋ฐํํฉ๋๋ค. โ๏ธ ์ ๋ ๋น์ฆ๋์ค๋ก์ง์ Controller์ ์์ฑํด์๋ ์๋๋ฉฐ Service์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ์ ๋์ ๋ฐ์ดํฐ ๊ฐ๊ณต๋ง ํ์ฉ๋ฉ๋๋ค. |
| 8 | validations |
Client์์ ์
๋ ฅ๋์ผํ๋ Parameter์ ๋ํ Validation์ ์์ฑํฉ๋๋ค. โ๏ธ Header Details ํํ์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ๋ ๋จ์ผ Object ๊ฐ์ผ๋ก Validation ํ๋ฉฐ, ์ด์ธ์ ๋ฐ์ดํฐ๋ Arrayํํ์ Validation์ ์งํํฉ๋๋ค. โ๏ธ ๊ธฐ๋ณธ์ ์ผ๋ก Data์ Type๊ณผ Empty ์ฌ๋ถ๋ฅผ ํ์ ํ๋ฉฐ nullable Parameter์ ๊ฒฝ์ฐ๋ optional ์์ฑ์ nullable ๊ฐ์ true๋ก ํฉ๋๋ค. โ๏ธ dateonly Column์ isDate() ํจ์๋ก Validation ํ๋ฉฐ, datetime(timestamp) Column์ ๊ฒฝ์ฐ .isISO8601().toDate() ๋ก Type Validation์ ์งํํฉ๋๋ค. |
| 9 | routes |
ISO์ ์์๋ชจ๋(std, prd ๋ฑ)์ ๋ฐ๋ผ Foldering์ ํ์ฌ ๊ด๋ฆฌํ๋ฉฐ ์
๋ ฅ๋๋ Parameter ๋ฐ ๋ฐํ๋๋ ๋ฐ์ดํฐ์ ๋ฐ๋ผ API ๋ช
์ ๋จ์ํ ํน์ ๋ณต์ํ์ผ๋ก ์์ฑํฉ๋๋ค. โ๏ธ API์ Controller์ Method๋ ๋ฐ๋์ 1:1๋ก ์ฐ๊ฒฐ๋์ด์ผ ํฉ๋๋ค. โ๏ธ API๋ช ์ ๋ฐ๋์ RESTfulํ๊ฒ ์์ฑ๋์ด์ผ ํ๋ฉฐ HTTP Method์ ํจ๊ป API์ ์์๋ช ์ ์ ๋ ฅํ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํฉ๋๋ค. |
| 10 | tests |
Unit Test ํ์ผ์ ์์ฑํฉ๋๋ค. TDD ํ์์ผ๋ก ๊ฐ๋ฐ ๋ ๊ฒฝ์ฐ ๊ฐ๋ฐ ์์๋ 1๋ฒ์
๋๋ค. โ๏ธ ํ์ฌ Test Code ์์ฑ์ ๋ํ Convention์ ์์ต๋๋ค. |
๊ธฐ๋ณธ Success Code์ Error Code๋ก ํํ์ด ๋ถ๊ฐ ํ ๊ฒฝ์ฐ states/common.state.ts ํ์ผ์์ ์ถ๊ฐํ๊ณ ์ถ์ ์ฝ๋๋ฅผ ์ ๋ ฅํ๊ณ Sequence๋ฅผ ํ๋ ์ฌ๋ฆฝ๋๋ค.
caches Folder์ Redis๋ฅผ ํตํ์ฌ Data๋ฅผ get setํ๋ ๋ก์ง์ ์์ฑํ์ฌ Serviceํน์ Repository์ ์ฐ๊ฒฐํ์ฌ ์ฌ์ฉํฉ๋๋ค.
Type ํด๋๋ด์ ํ์ผ์ ์์ฑํ์ฌ type์ export ํฉ๋๋ค. type์ Naming Convention์ Interface์ ๋ง์ฐฌ๊ฐ์ง๋ก
T๋ฅผ Prefix๋ก ์ ๋ ฅํ๋ฉฐ ์ดํ ์ ๋ ฅ๋๋ ๋ฌธ์๋ Camel Case๋ก ์ ๋ ฅํฉ๋๋ค. (ex, TTranType) |
utils ํด๋๋ด์ ํจ์๋ฅผ ์์ฑํ์ฌ export default ํํ๋ก ํจ์๋ฅผ export ํฉ๋๋ค.
ISO Server Project๋ ์๋์ Naming Convention์ ๋ฐ๋ฅด๋ฉฐ ๋ฐ๋์ ์๋์ ๊ฐ์ด ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
value: number // O
value:number // Xif (true) {} // O
if (true) {
} // O
if(true) {} // X
if (true){} // Xfun = async () => {
} // O
fun = async()=> {
} // XIInterface {} // O
Iinterface {} // X
TType {} // O
tType {} // X// object ๋ด์ ๋ณ์๋ snake_case๋ก ์์ฑํฉ๋๋ค.
// ๋ฐ๋์ ๋ณ์์ Type์ ์ง์ ํฉ๋๋ค.
// Undefined๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ ?๋ฅผ ์ฌ์ฉํฉ๋๋ค.
{
this_is_variable: string,
first_value?: number
}// ๊ธฐ๋ณธ ๋ณ์๋ camelCase๋ก ์์ฑํฉ๋๋ค.
thisIsVariable: string;
firstValue: number; // ์ฃผ์์ ์
๋ ฅํฉ๋๋ค. // O
//์ฃผ์์ ์
๋ ฅํฉ๋๋ค. // X- Header, Path Query, Body
- ์ธ์ฆ(Authentication; ํน์ identity ์ ๊ณต)๊ณผ ๊ถํ ๋ถ์ฌ(authorization; ํน์ action ํ์ฉ) ๋ ๊ฐ์ง ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.ย
- ISO์์๋ authorization(refresh token, access token) - Bearer, Environment(production, development, test), service-type(iso), restrict-access-to-tenants(ํ ๋ํธ์ธ์ฆ), file-included(ํ์ผ์ฒจ๋ถ ์ฌ๋ถ) ์์ฑ์ ์ฌ์ฉ ํฉ๋๋ค.
- ์๋ํฌ์ธํธ์ ์ผ๋ถ๋ก Resource๋ฅผ ์๋ณํ๊ณ ์ถ์ ๋ ์ฌ์ฉ ํฉ๋๋ค.
- ISO์์๋ Resource๋ฅผ Database Table์ ๊ธฐ์ค์ผ๋ก ํ๊ณ ์์ผ๋ฉฐ uuid๋ฅผ ๊ธฐ์ค์ผ๋ก Resource๋ฅผ ๋จ์ผ ์กฐํ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ ํฉ๋๋ค.
- Header, Detail๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ Header Resource๋ฅผ ๊ธฐ์ค์ผ๋ก Detail Resource๋ฅผ ์กฐํ ํ ๋ ์ฌ์ฉ ํฉ๋๋ค.
- ex /std/factory/:uuid, /qms/insp/:uuid/include-details ๋ฑ
- ์๋ํฌ์ธํธ์์ ๋ฌผ์ํ ๋ค์ ์ฌ์ฉํ๋ Type์ผ๋ก ์ ๋ ฌ์ด๋ ํํฐ๋ง์ ํ ๋ ์ฌ์ฉ ํฉ๋๋ค.
- ISO์์๋ Front-End ๊ด์ ์ด ์๋ Database ๊ด์ ์์ ์ ๋ ฌ์ด๋ ํํฐ๋ง์ ํ ๋ ์ฌ์ฉ ํฉ๋๋ค.
- ex /std/emp?emp_status (all, incumbent, retiree)
- Request Body ํ๋ผ๋ฏธํฐ ์ ๋๋ค.
- ISO์์๋ Post, Put, Patch, Delete Method๋ฅผ ํธ์ถ ํ ๋ ์ฌ์ฉํ๊ณ Data Format์ JSON์ ์ฌ์ฉ ํฉ๋๋ค.
