[Node.js][Nest.js]TypeORM

2022. 4. 9. 18:23ใ†Back-End ์ž‘์—…์‹ค/Node.js

728x90
๋ฐ˜์‘ํ˜•

 

 

 

 

[์—์ด์ฝ˜์ถœํŒ]์Šคํ”„๋ง๊ณผ JPA๋ฅผ ํ™œ์šฉํ•œ ์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์„ธํŠธ - ์ „3๊ถŒ

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

๐Ÿš€ TypeORM(Object Relational Mapping) ์†Œ๊ฐœ

    ๐Ÿ”ฝ ๊ฐœ์š”

        ๐Ÿ“ฆ TypeORM ์ด๋ž€?

`TypeORM`์€ `Node.js`์—์„œ ์‹คํ–‰๋˜๊ณ , `TypeScript`๋กœ ์ž‘์„ฑ๋œ ๊ฐ์ฒด ๊ด€๊ณ„ํ˜• ๋งคํผ Library์ธ ๊ฒƒ์ด์—์š”.

`Spring Boot`์—์„œ ์ด์šฉํ•˜๋Š” `JPA`์™€ ์—„์ฒญ ๋งŽ์ด ์œ ์‚ฌํ•˜๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋Š” ๊ฒƒ์ด์—์š”.

`TypeORM`์€ `MySQL`, `PostgreSQL`, `MariaDB`, `SQLite`, `MS SQL Server`, `Oracle DBMS`, `SAP Hana`, `Web SQL`๊ณผ ๊ฐ™์€ ์—ฌ๋Ÿฌ Data Base๋ฅผ ์ง€์›ํ•˜๋Š”๋ฐ, `In Memory Data Base` `H2`๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ฑฐ ๊ฐ™์€ ๊ฒƒ์ด์—์š”.

 

๐Ÿ’ก ์ฐธ๊ณ  ์‚ฌํ•ญ
ORM(Object Relational Mapping)์ด๋ž€?

๊ฐ์ฒด์™€ ๊ด€๊ณ„ํ˜• Data Base์˜ Data๋ฅผ ์ž๋™์œผ๋กœ ๋ณ€ํ˜• ๋ฐ ์—ฐ๊ฒฐํ•˜๋Š” ์ž‘์—…์„ ์ผ์ปซ๋Š” ๊ฒƒ์ด์—์š”.
ORM์„ ์ด์šฉํ•œ ๊ฐœ๋ฐœ์€ ๊ฐ์ฒด์™€ Data Base์˜ ๋ณ€ํ˜•์— ์œ ์—ฐํ•˜๊ฒŒ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋‹ต๋‹ˆ๋‹ค.


Spring Boot์˜ JPA๋„ ORM ๋งค์ปค๋‹ˆ์ฆ˜์ธ ๊ฒƒ์„ ์žŠ์œผ๋ฉด ์•ˆ๋˜๋Š” ๊ฒƒ์ด์—์š”.

 

 

 

 

 

 

    ๐Ÿ”ฝ  ํŠน์ง•๊ณผ ์žฅ์ 

โ— Model ๊ธฐ๋ฐ˜์œผ๋กœ Data Base Table ์ฒด๊ณ„๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ.
โ— Data Base์—์„œ ๊ฐœ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ์‚ฝ์ž…, ์ˆ˜์ • ๋ฐ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์คŒ.
โ— Table ๊ฐ„์˜ ๋งคํ•‘(1:1, 1:N, N:N) ๊ตฌ์„ฑ์„ ์‰ฝ๊ฒŒ ๋„์™€์คŒ.
โ— TypeORM์€ ๊ฐ„๋‹จํ•œ Coding์œผ๋กœ ORM Framework๋ฅผ ์ด์šฉํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๊ตฌ์„ฑ.
โ— TypeORM์€ ๋‹ค๋ฅธ Module๊ณผ ์‰ฝ๊ฒŒ ํ†ตํ•ฉ.

๋ฐ˜์‘ํ˜•

 

 

 

 

    ๐Ÿ”ฝ  ์„ค์น˜ํ•˜๊ธฐ

        ๐Ÿ“ฆ ํ•„์š” Module

โ— @nestjs/typeorm
    - `Nest.js`์—์„œ `TypeORM`์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด ์—ฐ๋™ ํ•ด์ฃผ๋Š” Module.

โ— typeorm
   - `typeORM` Module

โ— MySQL2
   - MySQL Driver Module

 

๋ช…๋ น์–ด 

npm install typeorm@0.2 @nestjs/typeorm mysql2 --save
๐Ÿ’ก ์ฐธ๊ณ  ์‚ฌํ•ญ
typeorm ์ตœ์‹  ๋ฒ„์ „ ๋ฌธ์ œ

typeorm Module์„ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์„ค์น˜($ npm install typeorm)์œผ๋กœ ํ•˜๋ฉด Service Class์—์„œ Repository์˜ Method๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ๋ช…์‹œ ํ•  ๋•Œ, Exception์ด ํ„ฐ์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ ํ•ฉ๋‹ˆ๋‹ค.

src/boards/boards.service.ts:17:54 - error TS2559: Type 'number' has no properties in common with type 'FindOneOptions<Board>'.

HTTPS://DOCS.NESTJS.COM/TECHNIQUES/DATABASE#TYPEORM-INTEGRATION


WARNINGNote that we're using TypeORM v0.2, which isn't the latest version of TypeORM. The latter has substantial modifications and duplicate methods which are used on this page. You can read about typeorm@0.3.0 changes on their repository

์ด๋Š” ์œ„์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ˜„์žฌ typeorm v0.2๊ฐ€ ์•„์ง ์•ˆ์ • Version์œผ๋กœ Version ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์œ„์™€ ๊ฐ™์ด typeorm version 0.2 ์‚ฌ์šฉ์„ ๊ถŒ๊ณ  ๋“œ๋ฆฌ๋ฉฐ, ๋งŒ์•ฝ ์ตœ์‹  ๋ฒ„์ „์œผ๋กœ ์„ค์น˜ ํ–ˆ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ Down Grade ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ npm install typeorm@0.2

์ฐธ๊ณ ๋กœ ์ด ๊ธ€์€ 2022๋…„ 04์›” 09์ผ์— ์ž‘์„ฑ ๋˜์—ˆ์œผ๋ฉฐ, ํ˜„์žฌ ์ผ ๊ธฐ์ค€์ด ๋„˜์œผ๋ฉด ์•ˆ์ • Version์ด ๋‚˜์™€ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ์  ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

Documentagion

 

 

์ฐธ๊ณ  ์ž๋ฃŒ ๋ฐ ์ถœ์ฒ˜ : ์ธํ”„๋Ÿฐ - ๋”ฐ๋ผํ•˜๋ฉฐ ๋ฐฐ์šฐ๋Š” NestJS ๊ฐ•์˜

 

 

 

 

 

 

 

[์—์ด์ฝ˜์ถœํŒ]์Šคํ”„๋ง๊ณผ JPA๋ฅผ ํ™œ์šฉํ•œ ์ž๋ฐ” ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์„ธํŠธ - ์ „3๊ถŒ

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•