7. MySQL

7. MySQL

7.1 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ž€?

๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ ๋ฐ ์กฐ์ž‘ ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ์Šคํ…œ -> DBMS

  • RDBMS : MySQL

  • NoSQL : MongoDB

7.2 MySQL ์„ค์น˜ํ•˜๊ธฐ

๋„์ปค๋กœ ๋Œ€์ฒด

# ๋„์ปค์„ค์น˜
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce

# docker image ์ƒ์„ฑ ๋ฐ ์‹คํ–‰
$ docker run -it -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 --name mysql5.7 mysql:5.7

7.3 DB SQL ์„ค์น˜

์›Œํฌ๋ฒค์น˜ ๋Œ€์‹  Datagrip์ด๋‚˜ DBeaver(๋ฌด๋ฃŒ) ์ถ”์ฒœ ์›Œํฌ๋ฒค์น˜ ์ƒ๋žต

7.4 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•˜๊ธฐ

์ž๋ฃŒํ˜•

  • INT : ์ •์ˆ˜์˜๋ฏธ. ์†Œ์ˆ˜๊นŒ์ง€ ์ €์žฅ -> FLOAT, DOUBLE ์‚ฌ์šฉ

  • VARCHAR : ๊ฐ€๋ณ€๊ธธ์ด. ๋ช‡๋ฐฑ์ž ์ด๋‚ด

  • TINYINT : -127 ~ 128

  • TEXT : ๊ธด๊ธ€ ์ €์žฅ

  • DATETIME : ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„์—๋Œ€ ํ•œ ์ •๋ณด. ๋‚ ์งœ๋งŒ -> DATE, ์‹œ๊ฐ„ -> TIME

7.5 CRUD ์ž‘์—…ํ•˜๊ธฐ (์ƒ์„ฑ, ์ฝ๊ธฐ, ์ˆ˜์ •, ์‚ญ์ œ)

  • C : Create. ์ƒ์„ฑ

    • insert into table values (๊ฐ’,...)

  • R : Read. ์ฝ๊ธฐ

    • select * from table

  • U : Update. ์ˆ˜์ •

    • update table set field1 = x, field2 = y ..

  • D : Delete. ์‚ญ์ œ

    • delete from table where ~

7.6 ์‹œํ€„๋ผ์ด์ฆˆ ์‚ฌ์šฉํ•˜๊ธฐ

  • ORM : ๊ฐ์ฒด์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฆด๋ ˆ์ด์…˜ ๋งคํ•‘

  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ตฌ๋ฌธ -> SQL๋กœ ๋ฐ”๊ฟ”์คŒ

  • ๋ชจ๋“ˆ ์„ค์น˜

  • config.json ๋‚ด์šฉ

    • operatorsAliases : ๋ณด์•ˆ์— ์ทจ์•ฝํ•œ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€ (false์ž…๋ ฅ : ์‚ฌ์šฉ์•ˆํ•จ)

    • 4๋Œ€ ์ •๋ณด : username, password, database, host ์ •๋ณด ์•Œ๋งž๊ฒŒ ์ž…๋ ฅ

  • models/user.js

    user ์ •๋ณด

    sequlize.define ๋ฉ”์„œ๋“œ๋กœ ๋ชจ๋ธ ์ •์˜. ์‹œํ€„๋ผ์ด์ฆˆ์™€ MySQL ์ž๋ฃŒํ˜•์€ ์•ฝ๊ฐ„ ์ƒ์ด

MySQL

์‹œํ€„๋ผ์ด์ฆˆ

VARCHAR

STRING

INT

INTEGER

TINYINT

BOOLEAN

DATETIME

DATE

ํ…Œ์ด๋ธ”๋ช… ๋ณต์ˆ˜ํ˜•

๋ชจ๋ธ๋ช… ๋‹จ์ˆ˜ํ˜•

  • ์œ„ ์™ธ์— ํ…Œ์ด๋ธ”์˜ต์…˜

    • paranoid : timestamps๊ฐ€ true์ธ ๊ฒฝ์šฐ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ, deletedAt ์ปฌ๋Ÿผ์ด ์ถ”๊ฐ€๋จ. ์‚ญ์ œ์‹œ ์‚ญ์ œ๋œ ๋‚ ์งœ๊ฐ€ ์ž…๋ ฅ๋จ (์‚ญ์ œํ•˜์ง„ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๋‚จ๊ฒจ๋‘๋Š” ์ด์œ ๋Š” ๋ฐฑ์—… ๋ฐ ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ ๋•Œ๋ฌธ)

    • underscored : createdAt, updatedAt, deleteAt ์ปฌ๋Ÿผ๊ณผ ์‹œํ€„๋ผ์ด์ฆˆ๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋Š” ๊ด€๊ณ„ ์ปฌ๋Ÿผ๋“ค์˜ ์ด๋ฆ„์„ ์Šค๋„ค์ดํฌ์ผ€์ด์Šค ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ ํ•ด์คŒ. ์Šค๋„ค์ดํฌ์ผ€์ด์Šค๋ž€ ๋Œ€๋ฌธ์ž ๋Œ€์‹  _๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹. ex : createdAt -> created_at

    • tableName : ํ…Œ์ด๋ธ” ์ด๋ฆ„์„ ๋‹ค๋ฅธ๊ฒƒ์œผ๋กœ ์„ค์ •ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ. ์‹œํ€„๋ผ์ด์ฆˆ๋Š” ์ž๋™์œผ๋กœ ์ฒซ๋ฒˆ์งธ ์ธ์ž(๋ชจ๋ธ๊ฐ’)๊ฐ’์„ ๋ณต์ˆ˜ํ˜•์œผ๋กœ ๋งŒ๋“ค์–ด ํ…Œ์ด๋ธ” ์ด๋ฆ„์œผ๋กœ ์‚ฌ์šฉํ•จ. user -> users, comment -> comments

  • 1:N ๊ด€๊ณ„ ํ‘œํ˜„ hasMany๋ฉ”์„œ๋“œ ์‚ฌ์šฉ. foreignKey ์†์„ฑ์œผ๋กœ ๊ฐ’ ์ผ์น˜. sourceKey ํ‚ค๊ฐ’(id), targetKey ํ‚ค๊ฐ’(id)

  • 1:1 ๊ด€๊ณ„ ํ‘œํ˜„ hasOne ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ. foreignKey ์†์„ฑ์œผ๋กœ ๊ฐ’ ์ผ์น˜. sourceKey ํ‚ค๊ฐ’(id), targetKey ํ‚ค๊ฐ’(id)

  • N:M ๊ด€๊ณ„ ํ‘œํ˜„ (๋‹ค๋Œ€๋‹ค) belongsToMany ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ. through ์†์„ฑ์€ ์ค‘๊ฐ„ ๊ด€๊ณ„ ํ…Œ์ด๋ธ” ์ด๋ฆ„ ์ด๋ผ๊ณ  ๋ณด๋ฉด๋ ๋“ฏ.

  • get+๋ชจ๋ธ์ด๋ฆ„ ๋ณต์ˆ˜ํ˜•

์‹œํ€„๋ผ์ด์ฆˆ ์ฟผ๋ฆฌ ์•Œ์•„๋ณด๊ธฐ

์‹œํ€„๋ผ์ด์ฆˆ๋งŒ์˜ ๋ฐฉ์‹ ๋ฐ˜ํ™˜ : ํ”„๋กœ๋ฏธ์Šค async/await ๊ฐ™์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • order : ์ •๋ ฌ๋ฐฉ์‹

  • attributes : select ์ปฌ๋Ÿผ ๋ช…์‹œ

  • ์‹œํ€„๋ผ์ด์ฆˆ์˜ OP -> ์˜คํผ๋ ˆ์ดํ„ฐ

Last updated

Was this helpful?