๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

DB11

[DB] : Primary Key , Foreign Key PK์™€ FK๋Š” DB์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•˜๋Š” Key ์ด๋‹ค. ์œ„์˜ ๋‘ ํ‚ค๋Š” RDB์—์„œ ๋ฐ์ดํ„ฐ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Primary Key ? PK ๋Š” ํ•ด๋‹น ํ…Œ์ด๋ธ”์˜ ์ฃผ๋œ ํ‚ค์ด๋‹ค. ๊ทธ ํ…Œ์ด๋ธ”์— ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ๊ณ ์œ  ์‹๋ณ„ ๋ฒˆํ˜ธ ์—ญํ• ์„ ํ•˜๋Š” ๋™์‹œ์—, ๊ฐ ํ…Œ์ด๋ธ”์€ PK๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. PK๋Š” ์ค‘๋ณต๋œ ๊ฐ’์ด ๋“ค์–ด์˜ค์ง€ ์•Š๊ณ , ์ž๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ฐ์ดํ„ฐ๋งˆ๋‹ค index ๊ฐ’์„ 1์”ฉ auto-increment๋ฅผ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฒ€์ƒ‰ ๋˜๋Š” ์ •๋ ฌ์— ์žˆ์–ด์„œ ํ•ด๋‹น ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์šฉ์ดํ•˜๊ฒŒ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Foreign Key ? FK ๋Š” ํ•œ ํ…Œ์ด๋ธ”์˜ ์ปฌ๋Ÿผ๊ฐ’์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์—ฐ๊ฒฐํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค. ํ•ด๋‹น FK๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ํ…Œ์ด๋ธ”์€ ์„œ๋กœ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. FK ๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ PK ๊ฐ’ ๋˜๋Š” null ๊ฐ’ .. 2023. 8. 22.
[DB] : RDBMS ์˜ ์ •๊ทœํ™” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ (RDBMS) ์— ๊ด€ํ•ด์„œ๋Š” ์ด ํฌ์ŠคํŒ…์„ ์ฐธ์กฐ RDBMS์˜ ์ •๊ทœํ™” ? ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ ๊ณผ์ • ์ค‘์—์„œ ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ๊ณผ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ณผ์ •์ด๋‹ค. ์ •๊ทœํ™”๋Š” ๋ฐ์ดํ„ฐ์˜ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๋ฉฐ, ์ด๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์„ฑ๋Šฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ๊ฐœ์„ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ •๊ทœํ™”๋Š” ์ฃผ๋กœ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ๋” ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๊ทœํ™”์˜ ๋‹จ๊ณ„ ์ •๊ทœํ™”๋Š” ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค. ์ •๊ทœํ™”์˜ ๋‹จ๊ณ„๋Š” ์ •๊ทœํ˜•(Normal Form)์œผ๋กœ ํ‘œํ˜„์ด ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” 1์ฐจ ์ •๊ทœํ˜•(1NF)๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ , 2์ฐจ ์ •๊ทœํ˜•(2NF), 3์ฐจ ์ •๊ทœํ˜•(3NF), BCNF(Boyce-Codd ์ •๊ทœํ˜•) ๋“ฑ์ด ์žˆ๋‹ค.. 2023. 8. 18.
[SQL] : noSQL ๊ณผ RDBMS์˜ ํŠน์ง•๊ณผ ๊ฐ๊ฐ์˜ ์žฅ/๋‹จ์  RDBMS ? ๊ด€๊ณ„ํ˜•(Relation) ๋ฐ์ดํ„ฐ(Data) ๋ฒ ์ด์Šค(Base) ๊ด€๋ฆฌ(Manager) ์‹œ์Šคํ…œ(System) ⇒ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ž€(RDB) ? : ๋ฐ์ดํ„ฐ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์—ด๊ณผ ํ–‰์˜ “ํ…Œ์ด๋ธ””์— ์ €์žฅ๋˜์–ด ์„œ๋กœ ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๊ตฌ์กฐ๊ฐ€ ์–ด๋–ค์‹์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”์ง€ ํ•œ ๋ฒˆ์— ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๊ณ , ๋น ๋ฅธ ์ดํ•ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก, “์‚ฌ์ „์— ์ •์˜๋œ”๊ด€๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๋ชจ์Œ์„ ๋งํ•œ๋‹ค. ⇒ ์‚ฌ์ „์ •์˜๋œ ๊ตฌ์กฐ ? : ๊ฐ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋จ์— ๋”ฐ๋ผ ๊ณ ์œ ํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” PK(๊ธฐ๋ณธํ‚ค)์™€ ๊ฐ™์€ ๊ฒƒ๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. PK๋Š” ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๊ณ ์œ ๊ฐ’์œผ๋กœ ์ค‘๋ณต๋˜์ง€ ์•Š์œผ๋ฉฐ, ํ•ด๋‹น ํ‚ค๋ฅผ ๋‹ค๋ฅธํ…Œ์ด๋ธ”์—์„œ ์„œ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” FK(์™ธ๋ž˜ํ‚ค)๋กœ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ํ…Œ์ด๋ธ”๋‚ด์—์„œ๋„ ์ด FK๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”๊ณผ์˜ ๋ฐ.. 2023. 8. 16.
[Sequelize] : migration ๊ณผ model / ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ์ˆœ์„œ Sequelize ๊ตฌ์„ฑ migration : mySQL๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ ๋ฐ ์‚ญ์ œ ๋“ฑ์„ ์‹คํ–‰ํ•  ๋•Œ๋Š” migration์„ ์‚ฌ์šฉ. sequelie CLI๋ฅผ ์ด์šฉํ•ด mySQL์— ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. model : mongoose์˜ schema๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•˜๋‹ค. ํŠน์ • table๊ณผ column์˜ ์†์„ฑ๊ฐ’์„ ์ž…๋ ฅํ•ด์„œ, mySQL๊ณผ express ํ”„๋กœ์ ํŠธ๋ฅผ ์—ฐ๊ฒฐ(Mapping)์‹œ์ผœ์ค€๋‹ค. Posts ํ…Œ์ด๋ธ”์„ ๋‚˜ํƒ€๋‚ด๋Š” migration, model ํŒŒ์ผ ๋งŒ๋“ค์–ด ๋ณด๊ธฐ npx sequelize model:generate --name Posts --attributes title:string,content:string,password:string // npx sequelize model:generate =.. 2023. 7. 13.
[RDS] : Error: ER_ACCESS_DENIED_ERROR: Access denied for user '์‚ฌ์šฉ์ž'@'IP' (using password: YES)์˜ค๋ฅ˜ํ•ด๊ฒฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์›์ธ ์ž‘์—…์„ ๋งˆ์นœ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ Github์— ์ปค๋ฐ‹ํ•˜๋Š” ๊ณผ์ •์—์„œ, ๊ฐœ์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •๋ณด๋ฅผ ๋‹ด๊ณ ์žˆ๋Š” config.json ํŒŒ์ผ๋„ ๊ฐ™์ด ์—…๋กœ๋“œ๊ฐ€ ๋˜์–ด์„œ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์„ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ํ˜„์žฌ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” RDS์˜ ๋ฐ์ดํ„ฐ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜์˜€๋‹ค. ๊ทธ ํ›„๋กœ ๋‹ค์‹œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์—ด์–ด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค๋ฅผ ํ™•์ธํ–ˆ๋Š”๋ฐ, ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค. ์˜ค๋ฅ˜ ๋ฐœ์ƒ Error: ER_ACCESS_DENIED_ERROR: Access denied for user '๋งˆ์Šคํ„ฐ ์‚ฌ์šฉ์ž ๋ช…'@'IP์ฃผ์†Œ' (using password: YES) ํ•ด๋‹น ์˜ค๋ฅ˜๋กœ ์ธํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ ์ž์ฒด๊ฐ€ ๋ถˆ๊ฐ€๋Šฅ ํ•˜๋‹ค๋ณด๋‹ˆ ์ƒ๋‹นํžˆ ์˜ค๋žœ์‹œ๊ฐ„ ์• ๋ฅผ ๋จน์—ˆ๋‹ค. ์‹œ๋„ ํ•ด ๋ณธ๊ฒƒ๋“ค RDS์—์„œ ๋ณ€๊ฒฝํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ config.jsonํŒŒ์ผ์—์„œ ์ˆ˜์ •์„ ์ •ํ™•ํ•˜๊ฒŒ.. 2023. 7. 13.
[sequelize] : sequelize ๊ธฐ๋ณธ์„ธํŒ… Sequelize ? Sequelize๋Š” ORM (Object Relational Mapping) ์œผ๋กœ์จ JavaScript์˜ ๊ฐ์ฒด(Object)์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ด€๊ณ„(Relation)๋ฅผ ์—ฐ๊ฒฐ(Mapping) ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ด๋‹ค. Node.js ์˜ ํ™˜๊ฒฝ์—์„œ๋Š” Prisma, Sequelize, TypeORM ๋“ฑ ๋‹ค์–‘ํ•œ ORM์ด ์กด์žฌํ•œ๋‹ค. Sequelize์™€ ๊ฐ™์€ ORM์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDB)๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ์‹œ) mySQL , Oracle , MariaDB , PostgreSQL ๋“ฑ์ด ์žˆ๋‹ค. Sequelize vs mongoose mongoose = ODM(Object Document Mapping)์œผ๋กœ JavaScript์˜ ๊ฐ์ฒด๋ฅผ Document์™€ ์—ฐ๊ฒฐํ•˜์ง€๋งŒ sequelize = OR.. 2023. 7. 13.