1018 TIL ORM, sequelizer

๋ƒํ•˜ํ˜ธํ›„ยท2021๋…„ 10์›” 18์ผ
0

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
52/101

ORM(Object-Relational-Mapping)

๐Ÿ™†โ€โ™€๏ธ ๊ธฐ๋ณธ์ ์œผ๋กœ development, test, production ํ™˜๊ฒฝ ์ค‘ ์–ด๋–ค ํ™˜๊ฒฝ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‚˜์š”?

development ํ™˜๊ฒฝ

๐Ÿ™†โ€โ™€๏ธ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

modelsํด๋”์˜ index.jsํŒŒ์ผ์˜ env๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์„œ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.
process.env.NODE_ENV๋ฅผ ์ด์šฉํ•ด ํ™˜๊ฒฝ ์ „ํ™˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ™†โ€โ™€๏ธ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ™˜๊ฒฝ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€์š”?

๊ฐ๊ฐ ํ™˜๊ฒฝ์€ ์‚ฌ์šฉ ๋ชฉ์ ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ํ™˜๊ฒฝ์—์„œ ์ด ์„ธ๊ฐ€์ง€(dev, test, pro)
์ž‘์—…์„ ์ง„ํ–‰ ํ•œ๋‹ค๋ฉด, ํ˜ผ๋ž€์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.(๊ฐ€๋…์„ฑ, ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค์–ด์ง) ๋”ฐ๋กœ ๋‚˜๋ˆ ์„œ
๊ด€๋ฆฌํ•œ๋‹ค.

๊ฐœ๋ฐœ์—์„œ๋Š” ๊ธฐ๋ณธ ๋ผˆ๋Œ€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ํ™˜๊ฒฝ์ด ํ•„์š”ํ•˜๊ณ ,
ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ์ถ”๊ฐ€๋“ฑ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ํ•˜๊ธฐ์œ„ํ•ด์„œ ํ•„์š”ํ•˜๋‹ค.
๋ฐฐํฌ์—์„œ๋Š” ์œ ์ € ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜์–ด์žˆ๊ธฐ๋•Œ๋ฌธ์— ํ•จ๋ถ€๋กœ ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ™†โ€โ™€๏ธ MySQL์˜ varchar๋‚˜ int ํƒ€์ž…์€ Sequelize์—์„œ๋Š” ์–ด๋–ค ํ˜•ํƒœ๋กœ ์ •์˜ํ•ด์•ผ ํ•˜๋‚˜์š”?

Datatypes.STRING, Datatypes.INTEGER

๐Ÿ™†โ€โ™€๏ธ ์™œ Sequelize์˜ ํƒ€์ž… ์ •์˜์™€ MySQL์˜ ํƒ€์ž… ์ •์˜๊ฐ€ ๋‹ค๋ฅผ๊นŒ์š”?

Sequelize๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ(RDBMS)์„ ํ˜ธํ™˜ ํ•˜๊ธฐ ์œ„ํ•ด์„œ
๊ณตํ†ต์˜ ๋ฌธ๋ฒ•์œผ๋กœ ํ†ต์ผ ํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ™†โ€โ™€๏ธ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ํ•  ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ์ ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ชจ๋ธ์˜ ๊ธฐ๋ณธ๊ฐ’์ด๋‚˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ž˜ ์ƒ์„ฑํ•˜์˜€๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•œ๋‹ค.
์˜ˆ๋ฅผ๋“ค์–ด ๊ธฐ๋ณธ๊ฐ’์€ ์ง€์ • ๋ชปํ•˜๋‹ˆ ์„ธ์„ธํ•œ ์˜ต์…˜์€ ์ฝ”๋“œ์— ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผํ•œ๋‹ค.
์ž˜๋ชป ๋ณด๋ƒˆ๋‹ค๋ฉด undo๋ฅผ ํ†ตํ•ด์„œ ๋‹ค์‹œ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•ด์•ผํ•œ๋‹ค.
๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ง„ํ–‰ํ•˜์˜€์–ด๋„ modelํŒŒ์ผ์€ ์ž๋™์œผ๋กœ ์ ์šฉ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—,
modelํŒŒ์ผ๋„ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์ค˜์•ผํ•œ๋‹ค.

migration

๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์€ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์Šคํ‚ค๋งˆ์— ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

sequelize ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ

  1. findAll()
    findAll ๋ฉ”์†Œ๋“œ๋กœ DB์˜ ์ „์ฒดํ…Œ์ด๋ธ”์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค

  2. findOrCreate()
    findOrCreate ๋ฉ”์†Œ๋“œ๋Š” ํ•ด๋‹น๋ฐ์ดํ„ฐ๊ฐ€ ์—†๋Š”๊ฒฝ์šฐ์— ์—”ํŠธ๋ฆฌ๋ฅผ ํ…Œ์ด๋ธ”์— ์ถ”๊ฐ€ํ•œ๋‹ค
    ๋ถˆ๋ฆฌ์•ˆ์œผ๋กœ ์ด๋ฏธ ์žˆ์—ˆ๋Š”์ง€, ์ƒˆ๋กœ๋งŒ๋“ค์–ด์กŒ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค

  3. findOne()
    findOne ๋ฉ”์†Œ๋“œ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ์—”ํŠธ๋ฆฌ๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค

error handling

mysql์— ์ ‘์†๋„ ์ž˜๋˜๊ณ  config.jsonํŒŒ์ผ์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋„ ๋ฐ”๊ฟ”๋†จ๋Š”๋ฐ mysql์— ์ ‘์†ํ• ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค๋Š” test๊ฐ€ ํ†ต๊ณผ๊ฐ€ ์•ˆ๋˜์—ˆ๋‹ค.
์ฝ˜์†”์ฐฝ์— Unhandled rejection SequelizeConnectionError: Unknown database 'database_development' ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋‹ค.
npx sequelize db:create ๋ฅผ ์ž…๋ ฅํ•ด์คฌ๋”๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

์ฐธ๊ณ 

sequelize ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ
์ฐธ๊ณ 1
์ฐธ๊ณ 2
์ฐธ๊ณ 3

profile
DONE is better than PERFECT

0๊ฐœ์˜ ๋Œ“๊ธ€