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 ์ฌ๊ธฐ์ ์ฌ๋ ค๋์๋ค.