ORM ์ด๋?
๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋งคํํด์ฃผ๋ ๊ธฐ์ORM์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋์์ ์ฌ์ฉํ๋ ๊ฐ์ฒด์ ๊ด๊ณํ DB์ ํ ์ด๋ธ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ณํํด์ฃผ๋ ๊ธฐ์ ์ด๋ค. ์ด๋ฅผ ํตํด SQL ์ง์ ์์ฑ ์์ด ๊ฐ์ฒด ์งํฅ ๋ฐฉ์์ผ๋ก DB์ ์ ๊ทผํ ์ ์๋ค.
TypeORM
TypeORM์ TypeScript์ JavaScript๋ฅผ ์ํ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Node.js ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ๋ฐ์ฝ๋ ์ดํฐ์ ํ์ ์์ ์ฑ์ ์ ๊ณตํฉ๋๋ค.TypeORM ์ฅ์
- ํ์ ์์ ์ฑ: TypeScript์ ํ์ ์์คํ ์ ํ์ฉํ์ฌ ๋ฐํ์ ์ค๋ฅ๋ฅผ ์ค์ด๊ณ , ๊ฐ๋ฐ ์ค ํ์ ์ค๋ฅ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ๋ค.
-
๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ํตํ ๋งคํ:
@Entity(),@Column(),@PrimaryGeneratedColumn()๋ฑ์ ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ, ํด๋์ค์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ์ ๋งคํ์ ์ค์ ํ๋ค. -
๋ฆฌํฌ์งํ ๋ฆฌ ํจํด ์ฌ์ฉ: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํตํด ์บก์ํํ์ฌ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ ๋์ด๊ณ , ๋ฐ์ดํฐ ์ ๊ทผ์ ์ผ๊ด์ฑ ์๊ฒ ์ ์ง
(์์)UserRepository๋ฅผ ์ฌ์ฉํ์ฌUserEntity์ ๋ํ CRUD ์์ ์ ์ฒ๋ฆฌ -
๋ง์ด๊ทธ๋ ์ด์
์ง์: ๋ง์ด๊ทธ๋ ์ด์
๊ธฐ๋ฅ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ณ๊ฒฝ ์ด๋ ฅ์ ๊ด๋ฆฌํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ์
๋ฐ์ดํธํ ์ ์์ต๋๋ค.
(์์) ์คํค๋ง ๋ณ๊ฒฝ ์typeorm migration:generate์typeorm migration:run๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. - ๋ค์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ง์: MySQL, PostgreSQL, SQLite, MariaDB ๋ฑ ๋ค์ํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ง์
-
Active Record & Data Mapper ํจํด ์ง์
Active Record์ Data Mapper ํจํด์ด ๋ญ์ผ?
์์์ฑ์ ๋ํ ๋ก์ง(DB ์ ๊ทผ ๋ฑ)์ ๋๊ฐ/์ด๋ป๊ฒ ํ ์ง๋ฅผ ์ ํ๋ ํจํด์ด๋ค.
(์ํฐํฐ ์ค์ค๋ก vs ๋ณ๋ ๋ฆฌํฌ์งํ ๋ฆฌ/๋งคํผ)- Active Record ํจํด: ์ํฐํฐ๊ฐ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.
์) User, Order๊ณผ ๊ฐ์ ํด๋์ค๋ค์ด ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ์ฒ๋ฆฌํ๋ ๋ชจ๋ธ - Data Mapper ํจํด: ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ๋ณ๋์ ๋ ํฌ์งํ ๋ฆฌ๊ฐ ์ฒ๋ฆฌํฉ๋๋ค.
์) ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ์ง์ ๊ตฌํํ์ฌ, DB ์์ ๋ก์ง์ ์ฒ๋ฆฌํ๋ค.
- Active Record ํจํด: ์ํฐํฐ๊ฐ ์์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์ด๋?
๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง ๋ณ๊ฒฝ ์ด๋ ฅ ๊ด๋ฆฌ ๋ฐ ์ ์ฉ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ๋ฒ์ ๋ํ๊ธฐ ์ํ ๊ธฐ๋ฅ์ด๋ค.
์ฝ๊ฒ ๋งํด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง(ํ ์ด๋ธ, ์ปฌ๋ผ ๋ฑ)์ ๊ตฌ์กฐ ๋ณํ๋ฅผ ์ฝ๋๋ก ๊ธฐ๋กํ๊ณ , ์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ์ฉํ๊ฑฐ๋ ๋๋๋ฆด ์ ์๊ฒ ๋์์ฃผ๋ ๋๊ตฌ์ด๋ค. TypORM์์๋ ํ์ํ ์์ ์
Up/Down ๋ฉ์๋๋ฅผ ํตํด ์ ์ฉ(Up)ํ๊ฑฐ๋ ๋๋๋ฆด(Down) ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด์์.
TypeORM Config ์ค์
@nestjs/config ํจํค์ง๋ฅผ ์ค์นํ์ฌ ์ฌ์ฉํ๋ค.config๊ฐ ์ถฉ๋๋์ง ์๊ณ , ์ฌ์ฉํ๊ธฐ ํธํ๊ฒ ํ๋ค.
synchronize ์ต์
์ nest.js ์๋ฒ๊ฐ ์์๋๋ฉด, ์ค์ DB์ ์ํฐํฐ ํ์ผ ๊ฐ์ ๋ญ๊ฐ ์๋ง๋ ๋ถ๋ถ์ด ์์ ๋(์ปฌ๋ผ์ด ์ถ๊ฐ๋๊ฑฐ๋, ํ
์ด๋ธ์ด ์ถ๊ฐ๋๊ฑฐ๋ ํ๋ ์์
๋ค์ด ๋ฐ์ ์๋์ด ์์ ๋) ๋ณ๊ฒฝ์ฌํญ์ ์๋์ ๋ง์ถฐ์ค๋ค.
ํ๋ก๋์
ํ๊ฒฝ์์๋ TypeORM ์ค์ ์
synchronize ์ต์
์ ์ง์ํด์ผํ๋ค.์๊ธฐ์น ์์ ๋ฐ์ดํฐ ์์ค์ด๋ ์คํค๋ง ๋ณ๊ฒฝ ์ํ์ด ์๊ธฐ ๋๋ฌธ
synchronize ์ต์
์ ์ํฐํฐ ์ฝ๋์ DB ์คํค๋ง๋ฅผ ์๋ฒ ์์ ์ ์๋์ผ๋ก ๋ง์ถฐ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ฐ ์ค์ ํธ๋ฆฌํ์ง๋ง, ํ๋ก๋์
์์๋ ์์์น ๋ชปํ ์คํค๋ง ๋ณ๊ฒฝ์ผ๋ก ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ ์ํ์ด ์์ด ์ฌ์ฉํ์ง ์๋๋ค.๋ง์ด๊ทธ๋ ์ด์ ๋ช ๋ น์ด
-
migration:run: ๋๊ธฐ ์ค์ธ ๋ชจ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํฉ๋๋ค.
โ ์ค์ ๋ก ์์ฑ๋ ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ DB์ ๋ฐ์ํด์ค๋ค.
โ DB์ ์ปฌ๋ผ์ด ๋ฐ๋์๊ฑฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ด ์๋ก ์ถ๊ฐ๋์๊ฑฐ๋ ํ๋ ๋ชจ๋ ๋ณ๊ฒฝ์ฌํญ์ ์ค์ DB์ ๋ฐ์ํด์ค๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํด์ ์์ฑ๋ ํ์ผ์ ์ฝ๋๋ฅผ ๋ณด๋ฉด,up๊ณผdown๋ฉ์๋๊ฐ ์์ฑ๋๋ค.up๋ฉ์๋๋ run์ ํ์ ๋ ์คํ๋๊ณ ,down๋ฉ์๋๋ revert๋ฅผ ํ์ ๋ ์คํ์ด ๋๋ค.
-
migration:generate: ์ํฐํฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ์ฐจ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ์์ฑํฉ๋๋ค.
--name=Add_CreatedAt_To_Post์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ์ ์ด๋ฆ์ ๋ถ์ผ ์ ์๋ค. -
migration:create: ๋น ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ์์ฑํฉ๋๋ค.
โ ์ฐ๋ ์ด์ : ๋ด๊ฐ ์ํ๋ SQL ์ปค๋งจ๋๋ฅผ ์ง์ ์ ๋ ฅํ๊ณ , ๋ณ๊ฒฝ์ฌํญ์ ์๋์ผ๋ก ์ธ์ํ์ฌ ์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๋ ๊ฒ์ ํ๊ณ ์ถ์ง ์์ ๋ -
migration:revert: ๊ฐ์ฅ ์ต๊ทผ์ ์คํ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋๋๋ฆฝ๋๋ค. โ run์ ํตํด์ ๋ฐ์๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ค์ ๋๋ฆด ๋, ์ฆ ๋ณต๊ตฌํ ๋ ์ฌ์ฉํ๋ ์ปค๋งจ๋ -
migration:show: ์ ์ฉ๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ณผ ๋๊ธฐ ์ค์ธ ๋ง์ด๊ทธ๋ ์ด์ ๋ชฉ๋ก์ ํ์ํฉ๋๋ค.
โ ํ์ฌ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์ด๋๊น์ง ์งํ์ด ๋๊ณ , ์ด๋๋ถํฐ ์งํ์ด ๋์ง ์์๋์ง๋ฅผ ํ์
์ฃผ์์ฌํญ
- ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํ๊ธฐ ์ ์ ํญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ฐฑ์ ํ์ธ์.
- ํ๋ก๋์ ํ๊ฒฝ์์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์คํํ ๋๋ ํนํ ์ฃผ์๊ฐ ํ์ํฉ๋๋ค.
- ๋ง์ด๊ทธ๋ ์ด์ ํ์ผ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
- synchronize ์ต์ ์ false๋ก ์ค์ ํ ํ์๋ ๋ชจ๋ ์คํค๋ง ๋ณ๊ฒฝ์ฌํญ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ํตํด ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์๋ฃ
- ํ๋ก ํธ ๊ฐ๋ฐ์๋ฅผ ์ํ ๋ฐฑ์๋ 101 (NestJS, TypeORM) ๊ฐ์
- [์ค์ต] TypeORM ๋ง์ด๊ทธ๋ ์ด์ - DB ์ปฌ๋ผ ์ถ๊ฐ ํด๋ณด๊ธฐ