All Articles

TypeORM ๊ตฌ๊ฒฝํ•˜๊ธฐ

vs sequelize

  • ๋ถ€์ŠคํŠธ์บ ํ”„ ๋ฆฌ๋ทฐ์–ด ์ง€์›ํ•˜๊ณ ๋‚˜์„œ sequelize ๋ฅผ ์ข€ ๋ณด๋‹ค๊ฐ€ ๋„ˆ๋ฌด ๋ง˜์— ์•ˆ๋“ค์–ด์„œ TypeORM ์„ ๋ณด๊ณ  ์žˆ๋Š”๋ฐ ํ›จ์”ฌ ๋ง˜์— ๋“ค์—ˆ๋‹ค.
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ง€์›์ด ํ›จ์”ฌ ์ž˜ ๋˜๊ณ , migration์„ ์ž๋™์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๊ฒƒ๋„ ๋ง˜์— ๋“ ๋‹ค (์‹œํ€„๋ผ์ด์ฆˆ๋Š” ๊ทธ๋Ÿฐ๊ฑฐ ์—†๊ณ , ์จ๋“œํŒŒํ‹ฐ ํˆด์ด ํ•˜๋‚˜ ์žˆ๋‹ค)

Relation

  • ์‚ฌ์‹ค ORM์ด ์Šคํ‚ค๋งˆ ์ž˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ  get/set ์ž˜ ํ•ด์ฃผ๊ณ  validation ์ž˜ํ•ด์ฃผ๋ฉด ๋์ง€ ๊ทธ ์ด์ƒ์€ ๋ฐ”๋ผ์ง€๋„ ์•Š๋Š”๋‹ค

    • TypeORM์€ ๊ทธ๊ฑธ ์ž˜ ํ•ด์ฃผ๊ณ  ์žˆ๊ณ , ์ด์ •๋„๋ฉด ๋ชฝ๊ณ ๋””๋น„๋ณด๋‹ค ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ ˆ๋Œ€ ๋Š๋ฆฌ๋‹ค๊ณ  ํ•  ์ˆ˜๊ฐ€ ์—†๋‹ค.
    • ๋ชฝ๊ตฌ์Šค ์ด๋Ÿฐ๊ฑฐ๋กœ ์—”ํ‹ฐํ‹ฐ ๋งŒ๋“œ๋Š”๊ฑฐ๋ณด๋‹ค ์–ด์ฉŒ๋ฉด ๋” ๋น ๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
  • relation์„ ๊ฐ€์ง€๊ณ  ์ฟผ๋ฆฌ ๋งŒ๋“ค ๋•Œ ์ข€ ๋‚œ๊ฐํ–ˆ๋Š”๋ฐ, ์ด๊ฑด ๊ทธ๋ƒฅ ๋น ๋ฅด๊ฒŒ ํฌ๊ธฐ๋ฅผ ํ•˜๊ณ  sql๋กœ ์ผ๋‹ค.

  • relation์„ ๋งŒ๋“ค๋ฉด FK๊ฐ€ ๊ฑธ๋ ค์„œ ์ธ๋ฑ์Šค๊ฐ€ ์ƒ๊ธฐ๋Š”๊ฒŒ ๊ทธ๊ฒŒ ๋„ˆ๋ฌด ์•„๊นŒ์› ๋‹ค.

    • ์ข‹์•„์š” ํ…Œ์ด๋ธ”์„ (postId, userId) ์— PK๊ฑธ์–ด์„œ ์“ฐ๋ฉด ๋  ๊ฒƒ์„ postId, userId ์—๋„ ์ธ๋ฑ์Šค ๊ฑธ๋ฆฌ๋Š”๊ฒŒ ๋„ˆ๋ฌด ์•„๊นŒ์›Œ์„œ ๊ทธ๋ƒฅ relation์„ ์•ˆ๊ฑธ์—ˆ๋‹ค.
    • ์–ด์ฐจํ”ผ ์ข‹์•„์š” ๊ฐฏ์ˆ˜ ์„ธ์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ฌ ๋•Œ๋Š” ๋ฐ์ดํ„ฐ๋กœ๋”๋กœ ์—ฌ๋Ÿฌ ๊ฒŒ์‹œ๋ฌผ์— ๋Œ€ํ•ด์„œ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋‹ˆ ๋ฆด๋ ˆ์ด์…˜์ด ํ•˜๋‚˜๋„ ์•„์‰ฝ์ง€ ์•Š๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๋ฉด ์–ด์ฐจํ”ผ ๋””๋น„ ๋ง๊ณ  ์ด๊ณณ ์ €๊ณณ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜์žˆ๊ณ  ๊ฒฐ๊ตญ์—๋Š” ์กฐ์ธ์„ ๋‹ค ํ’€์–ด์•ผ ํ•œ๋‹ค.

(DB๋ฅผ ํฌํ•จํ•œ) ํ…Œ์ŠคํŠธ ๋Œ๋ฆฌ๊ธฐ

  • ํ…Œ์ŠคํŠธ ๋””๋น„๋ฅผ ๋ณ„๋„๋กœ ๋„์šฐ๊ธฐ๊ฐ€ ๊ท€์ฐฎ์•„์„œ https://gist.github.com/Ciantic/be6a8b8ca27ee15e2223f642b5e01549 ์„ ์ฐธ๊ณ ํ•ด์„œ ํ…Œ์ŠคํŠธ์‹œ์—๋Š” sqlite3๋ฅผ ์ž ๊น ๋„์›Œ์„œ ํ…Œ์ŠคํŠธํ•˜๋„๋ก ํ•ด๋ดค๋‹ค
  • ๋‹น์—ฐํžˆ ์™ ๋งŒํ•œ๊ฑด ๋‹ค ๋Œ์•„๊ฐ€๋Š”๋ฐ createdAt, updatedAt ์“ธ ๋•Œ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค ใ…œ

    • JPA + H2 ๋Š” ์ž˜ ๋˜์—ˆ๋˜๊ฑฐ ๊ฐ™์€๋ฐโ€ฆ ์ด๋Ÿฐ๊ฑธ ์„ฑ์ˆ™๋„๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค
    • (20/8/30 ์ถ”๊ฐ€) Github Action์œผ๋กœ CI๋ฅผ ๋ถ™์—ฌ๋ณด์•˜๋Š”๋ฐ ํ…Œ์ŠคํŠธ์— ์‚ฌ์šฉํ•  MySQL ์ธ์Šคํ„ด์Šค ๋„์šฐ๋Š”๊ฒŒ ๋„ˆ๋ฌด๋„ˆ๋ฌด ์‰ฝ๊ณ  ์ž˜ ๋™์ž‘ํ•ด์„œ ๊ทธ๋ƒฅ mysql ๋Œ€์ƒ์œผ๋กœ ์ธํ…Œ๊ทธ๋ ˆ์ด์…˜ ํ…Œ์ŠคํŠธ ๋Œ๋ฆฌ๋Š”๊ฒŒ ์ด์ œ๋Š” ์—ฌ๋Ÿฌ๋ชจ๋กœ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.
  • fifthsage๋‹˜์˜ express+typeorm+jest+graphql ํ…Œ์ŠคํŠธํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ผ๋Š” ๊ธ€๋„ ๋„์›€์ด ๋งŽ์ด ๋˜์—ˆ๋‹ค.

๊ฒฐ๋ก 

  • ๋…ธ๋“œ๋กœ ๋ญ”๊ฐ€ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ์ด๊ฑธ ์“ธ๊ฑฐ ๊ฐ™๋‹ค (์š”์ƒˆ ์‚ฌ๋žŒ๋“ค์ด ๋งŽ์ด ์–˜๊ธฐํ•˜๋Š” nest.js์—๋„ ์ด๊ฒŒ ๋ถ™์–ด์žˆ๋‹ค)
  • ๊ทผ๋ฐ ๊ทธ๋Ÿด ์ผ์ด ์—†๋Š”๊ฒŒ ๋ฌธ์ œ -_-;;
  • ์ž‘์—…ํ•œ ๋‚ด์šฉ์€ https://github.com/zxzl/koa-apollo-typeorm ์—ฌ๊ธฐ์— ์˜ฌ๋ ค๋†“์•˜๋‹ค.
Published 22 Aug 2020

If I keep marking the dots, someday they will ๐Ÿ”—๐Ÿ”—
Hyeungshik Jung on Twitter