๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

typescript

TypeScript์™€ Typeorm์„ ์‚ฌ์šฉํ•ด express ํ”„๋กœ์ ํŠธ ์„ธํŒ…

๐Ÿงฑ ์ดˆ๊ธฐ ์„ค์น˜

  1. npm init : package.json ํŒŒ์ผ ์ƒ์„ฑ
  2. npm install -g typescript : grobal๋กœ typescript ์„ค์น˜, ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ์—์„œ๋งŒ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค.
  3. tsc --init : tsconfig.json ํŒŒ์ผ ์ƒ์„ฑ
  4. tsconfic.json ํŒŒ์ผ ์ˆ˜์ •
  5. Express์—์„œ ํ•„์š”ํ•œ ๋ชจ๋“ˆ ์„ค์น˜
    • npm install --save-dev @types/node
    • npm install --save express body-parser
    • npm install @types/express --save-dev
  6. ts-node ์„ค์น˜
  7. package.json์—์„œ npm start์‹œ ์‹œ์ž‘ํ•  ํŒŒ์ผ ์ง€์ •
  8. typeorm ์„ค์น˜
    • npm install typeorm --save
    • npm install mysql --save
    • typeorm init --database mysql: ormconfig.jsonํŒŒ์ผ์ด ์ƒ์„ฑ๋˜๊ณ , tsconfig.json ํŒŒ์ผ์ด ์ˆ˜์ •๋œ๋‹ค.
    • โœ… ์ด ์ž‘์—… ์ด์ „์— ํ–ˆ๋˜ tsconfig.json ํŒŒ์ผ ์ˆ˜์ •์€ ๋‹ค ์—†์–ด์ง€๊ณ  ์ˆ˜์ •๋ฉ๋‹ˆ๋‹ค. ๊ผญ typeorm์„ค์น˜ ์ดํ›„์— ํ• ๊ฒƒ!

 

๐ŸŽ€ tsconfig.json ์˜๋ฏธ

โœ… tsconfig.json ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ์˜ root ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ์ดํ›„ tsconfig.json ํŒŒ์ผ

{ 
    "compilerOptions": { 
        "lib": [ "es5", "es6" ], 
        "target": "es5", 
        "module": "commonjs", 
        "moduleResolution": "node", 
        "outDir": "./build", 
        "emitDecoratorMetadata": true, 
        "experimentalDecorators": true, 
        "sourceMap": true 
    } 
}

์ˆ˜์ •ํ•œ tsconfig.json ํŒŒ์ผ

{ 
    "compilerOptions": { 
        "lib": [ "es5", "es6" ], 
        "target": "es5", 
        "module": "commonjs", 
        "moduleResolution": "node", 
        "emitDecoratorMetadata": true, 
        "experimentalDecorators": true, 
        "outDir": "./dist", 
        "rootDir": "./src", 
        "esModuleInterop": true
    } 
}
  • rootDir: tsc๋ฅผ ์‹คํ–‰ ํ–ˆ์„๋•Œ ์ปดํŒŒ์ผํ•  tsํŒŒ์ผ์˜ ํด๋”. rootDir๋กœ ์ง€์ •ํ•œ ๊ฒฝ๋กœ ์•ˆ์— tsํŒŒ์ผ๋“ค ์ž‘์—…์„ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • outDir : tsc๋ฅผ ์‹คํ–‰ ํ–ˆ์„๋•Œ ์ปดํŒŒ์ผํ•œ jsํŒŒ์ผ์ด ์ €์žฅ๋  ํด๋”. tsc๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๋ณ„๋„์˜ ์ž‘์—…์„ ํ•ด์ค„ ํ•„์š”์—†์Šต๋‹ˆ๋‹ค.
  • sourceMap : true๋กœ ์„ค์ •ํ•˜๋ฉด ๋ชจ๋“  jsํŒŒ์ผ๋งˆ๋‹ค ๋ณ„๋„์˜ js.mapํŒŒ์ผ์ด ์ƒ๊น๋‹ˆ๋‹ค.

 

๐ŸŽซ ts-node ์„ค์น˜

https://www.npmjs.com/package/ts-node

npm install -g ts-node

ts-node๋Š” tsc๋ฅผ ์‹คํ–‰ํ•˜๊ณ  node๋กœ ์‹œ์ž‘ํ•ด์•ผํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์„ ํ•ด๊ฒฐ์ค๋‹ˆ๋‹ค. node app.js๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋Œ€์‹ ์— ts-node app.ts๋กœ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. package.json์—์„œ npm start ์‹คํ–‰์‹œ ๋ช…๋ น์–ด๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

"scripts": { "test": "echo \"Error: no test specified\" && exit 1", "start": "ts-node src/index.ts" },

"scripts": { 
    "test": "echo \"Error: no test specified\" && exit 1", 
    "start": "ts-node src/index.ts" 
},

 

๐Ÿ›’ ormconfig.json ์„ค์ •

โœ… ormconfig.json ํŒŒ์ผ์€ ํ”„๋กœ์ ํŠธ์˜ root ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ฒ˜์Œ typeorm์„ค์ •์„ ๋งˆ์น˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ormconfig.jsonํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฐ ์„ค์ •๊ฐ’์„ ๋งž๊ฒŒ ์ˆ˜์ •ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

๋งŒ์•ฝ ts-node๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฑฐ๋ผ๋ฉด(node์‚ฌ์šฉ ์‹œ) entities, migrations, subscribers์˜ ๊ฒฝ๋กœ์ง€์ •์—์„œ "dist/entity/**/*.js" ์™€ ๊ฐ™์ด jsํŒŒ์ผ๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

{ 
    "type": "mysql", 
    "host": "localhost", 
    "port": 3306, 
    "username": "test", 
    "password": "test", 
    "database": "test", 
    "synchronize": true, 
    "logging": false, 
    "entities": [ "src/entity/**/*.ts" ], 
    "migrations": [ "src/migration/**/*.ts" ], 
    "subscribers": [ "src/subscriber/**/*.ts" ], 
    "cli": { 
        "entitiesDir": "src/entity", 
        "migrationsDir": "src/migration", 
        "subscribersDir": "src/subscriber" 
    } 
}

 

โ›‘ ์ „์ฒด ํ”„๋กœ์ ํŠธ ๊ตฌ์„ฑ

  • controllers์™€ routes๋กœ ๋ผ์šฐํŒ…๊ณผ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • entityํด๋”๋Š” node ํ”„๋กœ์ ํŠธ์—์„œ models ํด๋”์™€ ์—ญํ• ์ด ๊ฐ™์Šต๋‹ˆ๋‹ค. typeorm์œผ๋กœ ์ƒ์„ฑํ•  ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ํŒŒ์ผ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•

'typescript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

TypeOrm ์‹œ์ž‘ํ•˜๊ธฐ (entity, Table์ƒ์„ฑ)  (0) 2021.04.01