๐ŸŽฏ MySQL Workbench๋ฅผ ์„ค์น˜ํ•˜๊ณ , ๊ธฐ์กด ์ฝ”๋“œ์— DB๋ฅผ ์—ฐ๋™ํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“™ Today I Learned

MySQL Workbench ์„ค์ •

MySQL Workbench

MySQL์„ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ (MySQL ์ „์šฉ GUI ๋„๊ตฌ)์ž…๋‹ˆ๋‹ค.

๐Ÿค” ์™œ ์‚ฌ์šฉํ• ๊นŒ?
SQL ์ฟผ๋ฆฌ๋ฅผ ํŽธํ•˜๊ฒŒ ์ž…๋ ฅํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ณ , ์—‘์…€์ฒ˜๋Ÿผ GUI๋กœ ์‰ฝ๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๐Ÿ‘‰ MySQL Workbench ๊ณต์‹ ๋‹ค์šด๋กœ๋“œ ํŽ˜์ด์ง€




MySQL Workbench ์„ค์น˜ ๊ณผ์ •

  • MySQL Workbench ๊ณต์‹ ์‚ฌ์ดํŠธ์—์„œ ์šด์˜์ฒด์ œ์— ๋งž๋Š” Installer๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
  • ํšŒ์›๊ฐ€์ž… ์—†์ด ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์„ค์ • ์œ ํ˜•์„ Custom์œผ๋กœ ์„ ํƒํ•˜๊ณ  Next >๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • ์„ค์น˜ํ•  Server, Workbench, Shell์˜ ๋ฒ„์ „์„ ๊ณจ๋ผ ์˜ฎ๊ฒจ์ฃผ๊ณ  Next >๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

    • MySQL Server : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š” ํ•ต์‹ฌ ์„œ๋ฒ„ ์†Œํ”„ํŠธ์›จ์–ด
    • MySQL Workbench : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์„ค๊ณ„, ๊ด€๋ฆฌ, ์ฟผ๋ฆฌ ์‹คํ–‰ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋Š” GUI ๋„๊ตฌ
    • MySQL Shell : MySQL์„ ๊ด€๋ฆฌํ•˜๊ณ  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” CLI(Command Line Interface)

  • ์„ค์น˜ ํ”„๋กœ๊ทธ๋žจ์„ ํ™•์ธํ•˜๊ณ  Execute๋ฅผ ๋ˆŒ๋Ÿฌ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.

  • ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด Next >๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • ํ™˜๊ฒฝ ์„ค์ •์— ๋Œ€ํ•œ ์•ˆ๋‚ด๋ฅผ ํ™•์ธํ•˜๊ณ  Next >๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.




๐Ÿšจ port ์˜ค๋ฅ˜ ๋ฐœ์ƒ ๋ฐ ํ•ด๊ฒฐ

โš ๏ธ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜
์„œ๋ฒ„ ์—ฐ๊ฒฐ ํฌํŠธ์— The specific port is already in use ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ํ•ด๋‹น ํฌํŠธ ๋ฒˆํ˜ธ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉ ์ค‘์ด๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉํ•˜์ง€ ๋ชป ํ•œ๋‹ค๋Š” ์˜๋ฏธ์˜€์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ด๊ฒฐ ๊ณผ์ • ( Windows ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• )

1๏ธโƒฃ ํฌํŠธ๋„˜๋ฒ„์— ํ•ด๋‹นํ•˜๋Š” ๋„คํŠธ์›Œํฌ ์ƒํƒœ ์š”์ฒญ

netstat -ano | findstr :<ํฌํŠธ๋„˜๋ฒ„>

2๏ธโƒฃ ํ•ด๋‹น ํฌํŠธ์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๊ฐ•์ œ ์ข…๋ฃŒ

taskkill /PID <ํ”„๋กœ์„ธ์ŠคID> /F




  • Config Type ๋ฐ TCP/IP, ํฌํŠธ ๋ฒˆํ˜ธ(3306)๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

๐Ÿค” ๋ฐฉํ™”๋ฒฝ ํ•ด์ œ๋Š” ์™œ ํ•„์š”ํ• ๊นŒ?

๋ฐฉํ™”๋ฒฝ์€ ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ์„ ์œ„ํ•ด ์™ธ๋ถ€ ์ ‘๊ทผ์„ ์ฐจ๋‹จํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์—์„œ MySQL ์„œ๋ฒ„์— ์›๊ฒฉ์œผ๋กœ ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ์ด ์ด๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๋„๋ก ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ์ธ์ฆ ๋ฐฉ์‹์„ ์„ ํƒํ•˜์—ฌ Next >๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

    • ๊ฐ•๋ ฌํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•”ํ˜ธํ™” ๋ฐฉ์‹ (โœ… ์ถ”์ฒœ)

      • โš ๏ธ ๋งŒ์•ฝ ์‚ฌ์šฉ ์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ด ๋ฐฉ์‹์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฉด, MySQL ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      • ์ตœ์‹  ๋ณด์•ˆ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ๋ณดํ˜ธํ•ฉ๋‹ˆ๋‹ค.

    • ์˜›๋‚  ์ธ์ฆ ๋ฐฉ์‹ ์‚ฌ์šฉ (๊ตฌ๋ฒ„์ „ ํ˜ธํ™˜ ์œ ์ง€)

      • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜, ํด๋ผ์ด์–ธํŠธ, ๋“œ๋ผ์ด๋ฒ„์™€์˜ ์—ฐ๋™์ด ์ˆ˜์›”ํ•ฉ๋‹ˆ๋‹ค.
      • ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์ด ์ค‘์š”ํ•œ ๊ฒฝ์šฐ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

  • root ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    (๊ณ„์ •์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฐœ์ธ์œผ๋กœ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.)

  • MySQL Server๋ฅผ Window Service๋กœ ๋“ฑ๋กํ•˜๊ธฐ ์œ„ํ•œ ์„ค์ •๋„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋‘๊ณ  Next >๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

    (๊ธฐ๋ณธ ์„œ๋น„์Šค ์ด๋ฆ„์ด MySQL80์ธ ์ด์œ ๋Š” MySQL 5.x๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, "MySQL"์ด๋ผ๋Š” ์ด๋ฆ„์ด ์ถฉ๋Œํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— 8.0์ด๋ผ๋Š” ๊ฒƒ์„ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.)

  • ์„œ๋ฒ„ ํŒŒ์ผ ๊ถŒํ•œ ์„ค์ • ์˜ต์…˜์„ ์„ ํƒํ•œ ํ›„ Next >๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

    • windows ์„œ๋น„์Šค ์‚ฌ์šฉ์ž์™€ ๊ด€๋ฆฌ์ž ๊ทธ๋ฃน์— ํ•œํ•ด์„œ ์ „์ฒด ์—‘์„ธ์Šค ๊ถŒํ•œ์„ ๋ถ€์—ฌ(โœ… ์ถ”์ฒœ)

    • ๊ถŒํ•œ ๋ ˆ๋ฒจ์„ ๊ฒ€ํ† ํ•˜๊ณ  ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •

    • ์„œ๋ฒ„ ๊ตฌ์„ฑ ํ›„ ๊ถŒํ•œ์„ ๊ด€๋ฆฌ

  • Execute ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๊ฐ ํ•ญ๋ชฉ ์„ค์ •์„ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
  • Finish ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์„ค์ •์„ ๋งˆ์นฉ๋‹ˆ๋‹ค.
  • ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. Finish ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ž‘์—…์„ ๋งˆ์นฉ๋‹ˆ๋‹ค.



MySQL Workbench ์‚ฌ์šฉ

MySQL Connection

(๐Ÿ‹๋„์ปค๋ฅผ ์‹คํ–‰ํ•œ ์ƒํƒœ์—์„œ ์ง„ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)

  • + ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ Database์™€ ์—ฐ๊ฒฐ์„ ํ•ด์ค๋‹ˆ๋‹ค.

  • ์ด๋ฆ„์„ ์ ์–ด์ฃผ๊ณ , OK ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์™„๋ฃŒํ•ด์ค๋‹ˆ๋‹ค.

  • ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ ๊ณ  OK ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ž…์žฅํ•ฉ๋‹ˆ๋‹ค.

  • ์ƒ์„ฑํ•œ ํŒŒ์ผ์— ๋“ค์–ด๊ฐ€ Query ํƒญ์— ๋ช…๋ น๋ฌธ์„ ์ž…๋ ฅํ•˜๊ณ  ์œ„์˜ ๋ฒˆ๊ฐœ(์‹คํ–‰)โšก๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋ช…๋ น๋ฌธ์„ ์‹คํ–‰์‹œํ‚ต๋‹ˆ๋‹ค.




MySQL Workbench๋กœ DB ์—ฐ๋™

  • ์ƒˆ๋กœ publisher_community ์Šคํ‚ค๋งˆ๋ฅผ ๋งŒ๋“  ํ›„ Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•ด์ฃผ๊ณ  Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

์ธก๋ฉด ๋„ค๋น„๊ฒŒ์ดํ„ฐํƒญ์—์„œ ์šฐํด๋ฆญ์„ ํ†ตํ•ด ์Šคํ‚ค๋งˆ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์ค๋‹ˆ๋‹ค.




์ง€๋‚œ๋ฒˆ ๋งŒ๋“ค์—ˆ๋˜ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•˜์—ฌ ์ด๋ฅผ ๋ฐ์ดํ„ฐ ํ…Œ์ด๋ธ”๋กœ ์ƒ์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๐Ÿ“– ์ž‘๊ฐ€ ํ…Œ์ด๋ธ” (authors)

๋ฒˆํ˜ธ(id)์ž‘๊ฐ€๋ช…๊ตฌ๋…์ž ์ˆ˜์ฑ… ์ˆ˜user_id
1์กฐ์ •๋ž˜100101
2๊น€ํ›ˆ20202
3ํ•œ๊ฐ•500103
4์‹ ๊ฒฝ์ˆ™100101
5ํ™ฉ์„์˜200153
6์ตœ์€์˜30051
7์œค์ดํ˜•15073

๐Ÿข ์ถœํŒ์‚ฌ ํšŒ์› ํ…Œ์ด๋ธ” (users)

ํšŒ์› ID์ถœํŒ์‚ฌ๋น„๋ฐ€๋ฒˆํ˜ธ์—ฐ๋ฝ์ฒ˜์ด๋ฉ”์ผ
1๋ฌธํ•™๋™๋„ค1111031-955-8888contact@munhak.com
2๋ฏผ์Œ์‚ฌ222202-515-2000info@minumsa.com
3์ฐฝ๋น„333302-3780-0700support@changbi.com



  • users ํ…Œ์ด๋ธ” ์ƒ์„ฑํ•œ ํ›„ Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

    ๐Ÿค” ํ•˜๋‹จ Auto Increment๊ฐ€ ๋น„ํ™œ์„ฑ์ผ ๋•Œ

    ์œ„ ์ฒดํฌ๋ฐ•์Šค์™€ ์•„๋ž˜ ์ฒดํฌ๋ฐ•์Šค๋Š” ๊ฐ™์€ ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์œ„์— AI(Auto Increment) ์ฒดํฌ๋ฒ„ํŠผโœ…์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • users ํ…Œ์ด๋ธ” ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•ด์ฃผ๊ณ  Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • authors ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ ํ›„ FKํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•˜๋‹จ์˜ Foreign Keys ํƒญ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • ์ฐธ์กฐํ•  ํ…Œ์ด๋ธ”์„ ์„ ํƒํ•œ ํ›„, ์ฐธ์กฐํ•˜๋Š” ํ…Œ์ด๋ธ”๊ณผ ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์˜ ์นผ๋Ÿผ์„ ์ง€์ •ํ•˜๊ณ  Apply ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  • authors ํ…Œ์ด๋ธ” ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•ด์ฃผ๊ณ  Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

    INDEX : user_id ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ASC(์˜ค๋ฆ„์ฐจ์ˆœ) ์ •๋ ฌ๋กœ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

    CONSTRAINT : user_id ์ปฌ๋Ÿผ์— ๋Œ€ํ•ด ์ œ์•ฝ ์กฐ๊ฑด์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

    ON DELETE NO ACTION : users ํ…Œ์ด๋ธ”์˜ id๊ฐ€ ์‚ญ์ œ๋  ๊ฒฝ์šฐ authors ํ…Œ์ด๋ธ”์—์„œ ํ•ด๋‹น user_id๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ON UPDATE NO ACTION : users ํ…Œ์ด๋ธ”์˜ id๊ฐ€ ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ authors ํ…Œ์ด๋ธ”์˜ user_id๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • users ํ…Œ์ด๋ธ”์— ๊ฐ’์„ ๋„ฃ๊ธฐ ์œ„ํ•ด ํ‘œ ์•„์ด์ฝ˜์„ ์„ ํƒํ•œ ํ›„ insert rows ์•„์ด์ฝ˜์„ ์„ ํƒํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ  Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • users ํ…Œ์ด๋ธ” INSERT ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•ด์ฃผ๊ณ  Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • authors ํ…Œ์ด๋ธ”์— ๊ฐ’์„ ๋„ฃ๊ธฐ ์œ„ํ•ด ํ‘œ ์•„์ด์ฝ˜์„ ์„ ํƒํ•œ ํ›„ insert rows ์•„์ด์ฝ˜์„ ์„ ํƒํ•˜์—ฌ ๊ฐ’์„ ๋„ฃ์–ด์ฃผ๊ณ  Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

  • authors ํ…Œ์ด๋ธ” INSERT ๋ช…๋ น์–ด๋ฅผ ํ™•์ธํ•ด์ฃผ๊ณ  Apply ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

์นผ๋Ÿผ ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ

  • ํ…Œ์ด๋ธ” ํ‘œ์— ์ŠคํŒจ๋„ˆ ๋„๊ตฌ๐Ÿ”ง๋ฅผ ์„ ํƒํ•ด์„œ ์นผ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.



์ฝ”๋“œ DB ์—ฐ๋™ํ•˜๊ธฐ


mysql2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์น˜

npm install โ€”save mysql2

์ฝ”๋“œ DB๋ฅผ ์—ฐ๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ mysql2 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.



mysql2 ์˜ˆ์‹œ ์ฝ”๋“œ ์ถœ๋ ฅ

์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

// Get the client
const mysql = require('mysql2');

// Create the connection to database
const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'publisher_community',
});

// A simple SELECT query
connection.query('SELECT * FROM `users` ', function (err, results, fields) {
  console.log(results); // results contains rows returned by server
  console.log(fields); // fields contains extra meta data about results, if available
});

์ถœ๋ ฅ๋œ result์™€ fields ๊ฐ’์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.




timezone ๋ฌธ์ œ ํ•ด๊ฒฐ

์„ค์ •ํ•œ users์˜ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

connection.query('SELECT * FROM `users` ', function (err, results, fields) {
  let { id, password, email, created_at } = results[0];
  console.log(id, password, email, created_at);
});

๐Ÿค” ๋ฌธ์ œ 1
์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ›์€ created_at์˜ ์‹œ๊ฐ„๊ณผ Workbench์— ์„ค์ •๋œ ์‹œ๊ฐ„์ด ๋‹ค๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (DB ์‹œ๊ฐ„ โ‰  ์ฝ”๋“œ ์ถœ๋ ฅ ์‹œ๊ฐ„)

๐Ÿ’ก ํ•ด๊ฒฐ 1
timezone ๋ช…๋ น๋ฌธ์„ ํ†ตํ•ด ํ†ต์ผํ•ด์ค๋‹ˆ๋‹ค.

SET GLOBAL time_zone = 'Asia/Seoul';

์ฝ”๋“œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ ์‹œ๊ฐ„ ๊ฐ’์ด ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



๐Ÿค” ๋ฌธ์ œ 2
ํ˜„์žฌ ์‹œ๊ฐ„๊ณผ 9์‹œ๊ฐ„์˜ ์˜ค์ฐจ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ’ก ํ•ด๊ฒฐ 2
1๏ธโƒฃ Global Timezone๊ณผ Session(DB) Timezone์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
SELECT @@global.time_zone, @@session.time_zone;


2๏ธโƒฃ ํ˜„์žฌ DB์˜ timezone์ด ์„ค์ •์ด ์•ˆ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ํ•œ๊ตญ ์‹œ๊ฐ„์œผ๋กœ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.
SET time_zone = 'Asia/Seoul';

3๏ธโƒฃ ๋ณ€๊ฒฝ๋œ Timezone ํ™•์ธํ•˜๋ฉด ์‹œ๊ฐ„์ด ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


dateStrings : true ์„ค์ •์„ ์ถ”๊ฐ€ํ•œ ํ›„ ๋‹ค์‹œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜๋ฉด ์‹œ๊ฐ„์ด ๋ชจ๋‘ ํ•œ๊ตญ์‹œ๊ฐ„์œผ๋กœ ์ผ์น˜ํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'root',
  database: 'publisher_community',
  dateStrings: true,
});




API ์„ค๊ณ„

์„ค์ •ํ–ˆ๋˜ API๋ฅผ ๋‹ค์‹œ DB๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ์ˆ˜์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํšŒ์› API ์„ค๊ณ„

  • ๋กœ๊ทธ์ธ : POST /login

    • request: body(email, password)

    • response: ${name}๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค โ‡’ ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

  • ํšŒ์› ๊ฐ€์ž… : POST /join

    • request: body(email, name, password, contact)

    • response: ${name}๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค โ‡’ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™

  • ํšŒ์› ๊ฐœ๋ณ„ ์กฐํšŒ : GET /users

    • request: body(email)

    • response: id, name

  • ํšŒ์› ๊ฐœ๋ณ„ ํƒˆํ‡ด : DELETE /users

    • request: body(email)

    • response: ${name}๋‹˜ ๋‹ค์Œ์— ๋˜ ๋ต™๊ฒ ์Šต๋‹ˆ๋‹ค. โ‡’ ๋ฉ”์ธ ํŽ˜์ด์ง€๋กœ ์ด๋™


์ฃผํ™ฉ๊ธ€์”จ : ๋ณ€๊ฒฝ์‚ฌํ•ญ



์ž‘๊ฐ€ ์ฑ„๋„ API ์„ค๊ณ„

  • ์ž‘๊ฐ€ ์ƒ์„ฑ : POST /authors

    • request : body (name, user_id)

    • response : 201 Created ${name}๋‹˜์˜ ์ž‘๊ฐ€ ์ƒํ™œ์„ ์‘์›ํ•ฉ๋‹ˆ๋‹ค. -> ์ž‘๊ฐ€ ๊ด€๋ฆฌ ํŽ˜์ด์ง€


  • ์ž‘๊ฐ€ ์ˆ˜์ • : PUT /authors/:id

    • request: URL (id), body(name)

    • response : 200 Ok ์ž‘๊ฐ€์ด๋ฆ„์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ˆ˜์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด${} => ์ˆ˜์ • ${}


  • ์ž‘๊ฐ€ ๊ฐœ๋ณ„ ์‚ญ์ œ : DELETE /authors/:id

    • request: URL(id)

    • response : 200 Ok ${name}๋‹˜์ด ์‚ญ์ œ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. => ๋ฉ”์ธ ํŽ˜์ด์ง€


  • ์ž‘๊ฐ€ ์ „์ฒด ์กฐํšŒ : GET /authors

    • request: body (user_id)
    • response : 200 Ok ์ž‘๊ฐ€ ์ „์ฒด ๋ฐ์ดํ„ฐ list, json array

  • ์ž‘๊ฐ€ ๊ฐœ๋ณ„ ์กฐํšŒ : GET /authors/:id

    • request: URL(id)

    • response : ์ž‘๊ฐ€ ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ


์ฃผํ™ฉ๊ธ€์”จ : ๋ณ€๊ฒฝ์‚ฌํ•ญ




โœ๏ธ ํ•œ ์ค„ ํšŒ๊ณ 

์„ค์น˜ ๊ณผ์ •์—์„œ ํฌํŠธ ์ถฉ๋Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์ง€๋งŒ, ๊ธฐ์กด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ ์šฉํ•˜์—ฌ ์ˆ˜์›”ํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๊ณ , ๊ธฐ๋ก์˜ ์ค‘์š”์„ฑ์— ๋Œ€ํ•ด ๊นจ๋‹ซ๊ฒŒ ๋œ ํ•˜๋ฃจ์˜€์Šต๋‹ˆ๋‹ค.

profile
๐ŸŒฑ๊ฐœ๋ฐœ ๊ธฐ๋ก์žฅ

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