RealMySQL 8.0 ์„ ์ฝ๊ณ  ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

4.1.1 ์ „์ฒด ๊ตฌ์กฐ

MySQL ์„œ๋ฒ„ = ์‚ฌ๋žŒ์˜ ๋จธ๋ฆฌ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” MySQL ์—”์ง„ + ์†๋ฐœ ์—ญํ• ์„ ๋‹ด๋‹นํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

MySQL ์—”์ง„

  1. ์ปค๋„ฅ์…˜ ํ•ธ๋“ค๋Ÿฌ : ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์ปค๋„ฅ์…˜ ๋ฐ ์ฟผ๋ฆฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ
  2. SQL ์ธํ„ฐํŽ˜์ด์Šค : DML, DDL, Procedure, View ๋“ฑ SQL ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต
  3. SQL ํŒŒ์„œ : SQL ๋ฌธ๋ฒ• ์˜ค๋ฅ˜ ํƒ์ง€ ๋ฐ SQL ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ MySQL์ด ์ฒ˜๋ฆฌํ•˜๊ธฐ ์ข‹์€ ํ† ํฐ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์„œ ํŠธ๋ฆฌ ํ˜•ํƒœ๋กœ ํŒŒ์‹ฑํ•˜๋Š” ์ž‘์—… ๋‹ด๋‹น
  4. SQL ์˜ตํ‹ฐ๋งˆ์ด์ € : ์ฟผ๋ฆฌ์˜ ์ตœ์ ํ™”๋œ ์‹คํ–‰์„ ๋‹ด๋‹น
  5. ์บ์‹œ & ๋ฒ„ํผ : ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์œ„ํ•œ ๋ณด์กฐ ์ €์žฅ์†Œ ๊ธฐ๋Šฅ ๋‹ด๋‹น

์Šคํ† ๋ฆฌ์ง€ ์—”์ง„

  • ํ•ธ๋“ค๋Ÿฌ API๋ฅผ ๋งŒ์กฑํ•˜๋ฉด ๋ˆ„๊ตฌ๋“ ์ง€ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๊ตฌํ˜„ํ•˜์—ฌ MySQL์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ ์Šคํ† ๋ฆฌ์ง€์— ์ €์žฅํ•˜๊ฑฐ๋‚˜ ๋””์Šคํฌ ์Šคํ† ๋ฆฌ์ง€๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๋ถ€๋ถ„

๐Ÿ’ก MySQL ์—”์ง„์€ ํ•˜๋‚˜์ง€๋งŒ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์€ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋™์‹œ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด ํ…Œ์ด๋ธ”์ด ์‚ฌ์šฉํ•  ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ์ง€์ •ํ•˜๋ฉด ์ดํ›„ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์ฝ๊ธฐ ์ž‘์—…์ด๋‚˜ ๋ณ€๊ฒฝ ์ž‘์—…์€ ์ •์˜๋œ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์ฒ˜๋ฆฌํ•œ๋‹ค.

mysql > CREATE TABLE test_table (fd1 IT, fd2 INT) ENGINE = INNODB;

ํ•ธ๋“ค๋Ÿฌ API

MySQL ์—”์ง„์˜ ์ฟผ๋ฆฌ ์‹คํ–‰๊ธฐ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ์–ด์•ผ ํ•  ๋•Œ๋Š” ๊ฐ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—๊ฒŒ ์“ฐ๊ธฐ ๋˜๋Š” ์ฝ๊ธฐ๋ฅผ ์š”์ฒญํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ์š”์ฒญ์„ ํ•ธ๋“ค๋Ÿฌ(Handler) ์š”์ฒญ์ด๋ผ๊ณ  ํ•˜๊ณ , ์—ฌ๊ธฐ์„œ ์‚ฌ์šฉ๋˜๋Š” API๋ฅผ ํ•ธ๋“ค๋Ÿฌ API๋ผ๊ณ  ํ•œ๋‹ค.

4.1.2 MySQL ์Šค๋ ˆ๋”ฉ ๊ตฌ์กฐ

MySQL์€ ํ”„๋กœ์„ธ์Šค ๊ธฐ๋ฐ˜์ด ์•„๋‹ˆ๋ผ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ํฌ๊ฒŒ ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ + ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ

ํฌ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ(ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ)

  • MySQL ์„œ๋ฒ„์— ์ ‘์†๋œ ํด๋ผ์ด์–ธํŠธ์˜ ์ˆ˜๋งŒํผ ์กด์žฌ
  • ์ฃผ๋กœ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•˜๋Š” ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ์ฒ˜๋ฆฌ(๊ณ ๊ฐ ์ฐฝ๊ตฌ ์—ญํ• )
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž‘์—…์„ ๋งˆ์น˜๊ณ  ์ปค๋„ฅ์…˜์„ ์ข…๋ฃŒํ•˜๋ฉด, ํ•ด๋‹น ์ปค๋„ฅ์…˜์„ ๋‹ด๋‹นํ•˜๋˜ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค์‹œ ์Šค๋ ˆ๋“œ ์บ์‹œ(Thread pool)๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค.
    • ์ด๋ฏธ ์Šค๋ ˆ๋“œ ์บ์‹œ์— ์ผ์ • ๊ฐœ์ˆ˜ ์ด์ƒ์˜ ๋Œ€๊ธฐ ์ค‘์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ์Šค๋ ˆ๋“œ ์บ์‹œ์— ๋„ฃ์ง€ ์•Š๊ณ  ์Šค๋ ˆ๋“œ๋ฅผ ์ข…๋ฃŒ์‹œ์ผœ ์ผ์ • ๊ฐœ์ˆ˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์Šค๋ ˆ๋“œ ์บ์‹œ์— ์กด์žฌํ•˜๊ฒŒ ํ•œ๋‹ค.
    • ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ = thread_cache_size

๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ

  • Insert buffer ๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ์Šค๋ ˆ๋“œ
  • ๋กœ๊ทธ๋ฅผ ๋””์Šคํฌ๋กœ ๊ธฐ๋กํ•˜๋Š” ์Šค๋ ˆ๋“œ
  • InnoDB ๋ฒ„ํผ ํ’€์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ์— ๊ธฐ๋กํ•˜๋Š” ์Šค๋ ˆ๋“œ
  • ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„ํผ๋กœ ์ฝ์–ด๋“ค์ด๋Š” ์Šค๋ ˆ๋“œ
  • ๊ทธ๋ฆฌ๊ณ  ๊ธฐํƒ€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ž ๊ธˆ์ด๋‚˜ ๋ฐ๋“œ๋ฝ์„ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๋Š” ์Šค๋ ˆ๋“œ
  • ๋ชจ๋“  ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ

๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ **๋กœ๊ทธ ์Šค๋ ˆ๋“œ(Log thread)**์™€ ๋ฒ„ํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋””์Šคํฌ๋กœ ๋‚ด๋ ค์“ฐ๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๊ธฐ ์“ฐ๋ ˆ๋“œ

์ฝ๊ธฐ / ์“ฐ๊ธฐ ์“ฐ๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ = innodb_write_io_threads / nodb_read_io_threads

4.1.3 ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๋ฐ ์‚ฌ์šฉ๊ตฌ์กฐ

๊ธ€๋กœ๋ฒŒ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • MySQL ์„œ๋ฒ„๊ฐ€ ์‹œ์ž‘๋˜๋ฉด์„œ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋œ๋‹ค.
  • ํ•˜๋‚˜์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„๋งŒ ํ• ๋‹น๋œ๋‹ค. ๋ชจ๋“  ์Šค๋ ˆ๋“œ์— ์˜ํ•ด ๊ณต์œ ๋œ๋‹ค.

๋กœ์ปฌ(์„ธ์…˜) ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

  • MySQL ์„œ๋ฒ„ ์ƒ์— ์กด์žฌํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ, ์„œ๋ฒ„์™€์˜ ์ปค๋„ฅ์…˜์„ ์„ธ์…˜ ์ด๋ผ๊ณ  ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ธ์…˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค.
  • ๊ฐ ํด๋ผ์ด์–ธํŠธ ์Šค๋ ˆ๋“œ ๋ณ„๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ํ• ๋‹น๋˜๋ฉฐ ์ ˆ๋Œ€ ๊ณต์œ ๋˜์ง€ ์•Š๋Š”๋‹ค.

4.1.4 ํ”Œ๋Ÿฌ๊ทธ์ธ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋ชจ๋ธ

MySQL์˜ ๋…ํŠนํ•œ ๊ตฌ์กฐ ์ค‘ ๋Œ€ํ‘œ์ ์ธ ๊ฒƒ์ด ๋ฐ”๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋ธ์ด๋‹ค!

  • ์‚ฌ์šฉ์ž ์ธ์ฆ ๋ฐฉ์‹, ๊ฒ€์ƒ‰ ์—”์ง„, ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ๋“ฑ์„ ํ”Œ๋Ÿฌ๊ทธ์ธ ํ˜•ํƒœ๋กœ ๊ฐœ๋ฐœํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ธ๋“ค๋Ÿฌ API MySQL ์—”์ง„์˜ ์ฟผ๋ฆฌ ์‹คํ–‰๊ธฐ๋Š” ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์ œ๊ณตํ•˜๋Š” API๋ฅผ ์ด์šฉํ•˜์—ฌ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—๊ฒŒ CRUD ์ž‘์—…์„ ์œ„์ž„ํ•œ๋‹ค. → ์ด ๋•Œ, ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์ด ์ œ๊ณตํ•˜๋Š” API = ํ•ธ๋“ค๋Ÿฌ API
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ชจ๋ธ ํ•ธ๋“ค๋Ÿฌ API ๊ทœ์น™์„ ๋งŒ์กฑํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ๋ˆ„๊ตฌ๋“ ์ง€ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์„ ๋งŒ๋“ค์–ด์„œ MySQL ์„œ๋ฒ„์— ์ถ”๊ฐ€ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์€ ์—”์ง„์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋ฉฐ, ๋งˆ์ง€๋ง‰์ธ “์ฝ๊ธฐ/์“ฐ๊ธฐ” ๋งŒ์ด ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์—์„œ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค.
    • GROUP BY, ORDER BY ๋“ฑ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋„ MySQL ์—”์ง„์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฏ€๋กœ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๊ธฐ๋Šฅ์€ ์ž‘์•„๋ณด์ด๊ฒ ์ง€๋งŒ, ์ฒ˜๋ฆฌ ๋ฐฉ์‹์ด ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๊ฒŒ ๋ ๊ฒƒ์ด๋‹ค.
  • ์ฟผ๋ฆฌ ์ž‘์—…์€ ์—ฌ๋Ÿฌ ํ•˜์œ„ ์ž‘์—…์œผ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, ์ด ์ž‘์—…์—์„œ MySQL ์—”์ง„ ์˜์—ญ๊ณผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„ ์˜์—ญ์˜ ์ฐจ์ด๋ฅผ ์•„๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

4.1.5 ์ปดํฌ๋„ŒํŠธ

  • MySQL 8.0 ์— ๊ธฐ์กด ํ”Œ๋Ÿฌ๊ทธ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•จ
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋‹จ์ ์„ ๋ณด์™„ํ•ด์„œ ๊ตฌํ˜„๋จ
  • INSTALL COMPONENT  ๋ฅผ ํ†ตํ•ด์„œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ด€๋ จ ์ƒˆ๋กœ์šด ์‹œ์Šคํ…œ ๋ณ€์ˆ˜๋ฅผ ์„ค์น˜ํ•˜๋ฉด ๋œ๋‹ค.
  • MySQL ์„œ๋ฒ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ๋‹จ์ 
    1. ์˜ค์ง MySQL ์„œ๋ฒ„์™€ ์ธํ„ฐํŽ˜์ด์Šค ํ•  ์ˆ˜ ์žˆ๊ณ , ํ”Œ๋Ÿฌ๊ทธ์ธ๋ผ๋ฆฌ ํ†ต์‹ ํ•  ์ˆ˜ ์—†๋‹ค.
    2. MySQL ์„œ๋ฒ„์˜ ๋ณ€์ˆ˜๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•˜์ง€ ์•Š๋‹ค. (์บก์Šํ™” ์•ˆ ํ•จ)
    3. ํ”Œ๋Ÿฌ๊ทธ์ธ์€ ์ƒํ˜ธ ์˜์กด ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์—†์–ด์„œ ์ดˆ๊ธฐํ™”๊ฐ€ ์–ด๋ ต๋‹ค.

4.1.6 ์ฟผ๋ฆฌ ์‹คํ–‰ ๊ตฌ์กฐ

  • ์ฟผ๋ฆฌ ํŒŒ์„œ(Parser) : ์ฟผ๋ฆฌ ๋ฌธ์žฅ์— ๋Œ€ํ•ด์„œ ๋ฌธ๋ฒ•(Syntax) ํ™•์ธ์„ ํ•˜๊ณ  ์ฟผ๋ฆฌ ๋ฌธ์žฅ์„ ์ ์ ˆํ•œ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜์—ฌ ํŒŒ์„œ ํŠธ๋ฆฌ(parser tree)๋ฅผ ๋งŒ๋“ ๋‹ค.
  • ์ „์ฒ˜๋ฆฌ๊ธฐ(Pre-processor) : ์•ž์—์„œ ๋งŒ๋“ค์–ด์ง„ ํŒŒ์„œ ํŠธ๋ฆฌ๋ฅผ ๋ณด๊ณ  ๊ตฌ์กฐ์ ์œผ๋กœ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•œ๋‹ค. (์˜ˆ๋ฅผ ๋“ค๋ฉด, ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ…Œ์ด๋ธ”์ด๋‚˜ ์ปฌ๋Ÿผ ๋“ฑ์— ์ ‘๊ทผํ•œ๋‹ค๊ฑฐ๋‚˜ ์ ‘๊ทผํ•˜๋ ค๊ณ  ๋ณด๋‹ˆ ๊ถŒํ•œ์ด ์—†๋‹ค๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ)
  • ์˜ตํ‹ฐ๋งˆ์ด์ €(Optimizer) : ์š”์ฒญ๋ฐ›์€ ์ฟผ๋ฆฌ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๊ฐ€์žฅ ์ ์€ ๋น„์šฉ์œผ๋กœ ๋น ๋ฅด๊ฒŒ → ์ฆ‰, ์ตœ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ• ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.
    • ์•ž์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ํ•ด์•ผํ•  ์ผ์€ ์ด ์˜ตํ‹ฐ๋งˆ์ด์ €๊ฐ€ ๋” ๋‚˜์€ ๊ฒฐ์ •์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ = ์‹คํ–‰ ๊ณ„ํš ์ƒ์„ฑ
  • ์‹คํ–‰ ์—”์ง„ : ์˜ตํ‹ฐ๋งˆ์ด์ €์— ์˜ํ•ด ๊ฒฐ์ •๋œ ์‹คํ–‰ ๊ณ„ํš๋Œ€๋กœ ํ•ธ๋“ค๋Ÿฌ์—๊ฒŒ ์ง€์‹œํ•œ๋‹ค.
    • ex) ์ž„์‹œ ํ…Œ์ด๋ธ” ๋งŒ๋“ค์–ด → where ์กฐ๊ฑด๋Œ€๋กœ ๋ ˆ์ฝ”๋“œ ์ฝ์–ด์™€ → ์ฝ์€ ๋ ˆ์ฝ”๋“œ๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”์— ์จ๋ผ → …
  • ํ•ธ๋“ค๋Ÿฌ(์Šคํ† ๋ฆฌ์ง€ ์—”์ง„) : MySQL ์„œ๋ฒ„์˜ ๊ฐ€์žฅ ๋ฐ‘๋‹จ์—์„œ ์‹คํ–‰ ์—”์ง„์ด ๋‚ด๋ฆฐ ์ง€์‹œ๋Œ€๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

4.1.7 ๋ณต์ œ

  • ๋ณต์ œ(Replication) = 2๋Œ€ ์ด์ƒ์˜ MySQL ์„œ๋ฒ„๊ฐ€ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๋„๋ก ์‹ค์‹œ๊ฐ„ ๋™๊ธฐํ™”ํ•˜๋Š” ๊ธฐ์ˆ 
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐˆ์ˆ˜๋ก ๋Œ€์šฉ๋Ÿ‰ํ™” ๋˜์–ด ๊ฐ€๋Š” ๊ฒƒ์„ ์ƒ๊ฐํ•˜๋ฉด ํ™•์žฅ์„ฑ(Scalability)๋Š” DBMS์—์„œ ์•„์ฃผ ์ค‘์š”ํ•œ ์š”์†Œ
  • MySQL์˜ ๋ณต์ œ๋Š” ๊ฑฐ์˜ 2000๋…„๋„๋ถ€ํ„ฐ ์ œ๊ณต๋๊ธฐ ๋•Œ๋ฌธ์— ํƒ€ DBMS์˜ ๋ณต์ œ๋ณด๋‹ค ํ›จ์”ฌ ์ด์ „๋ถ€ํ„ฐ ์ œ๊ณต๋œ ๊ธฐ๋Šฅ์ด๋ฉฐ ๋˜ํ•œ ๊ทธ๋งŒํผ ์•ˆ์ •์ 
  • ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„(INSERT/UPDATE ์ด์šฉ, Primary) + ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„(SELECT๋งŒ ๊ฐ€๋Šฅ, Secondary)
    • ๋งˆ์Šคํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ 1๊ฐœ, ์Šฌ๋ ˆ์ด๋ธŒ๋Š” 1๊ฐœ ์ด์ƒ์ด์ง€๋งŒ ์„œ๋ฒ„ ํ•˜๋‚˜๋กœ ๋งˆ์Šคํ„ฐ์ด๋ฉด์„œ ์Šฌ๋ ˆ์ด๋ธŒ๋„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ
    • ๋‹จ์ง€ ์„œ๋ฒ„์˜ ์—ญํ•  ๋ชจ๋ธ์„ ์ง€์นญํ•˜๋Š” ๊ฒƒ์ผ๋ฟ!
    ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„
    1. ๋งˆ์Šคํ„ฐ์— ์“ฐ์ธ ๋ฐ์ดํ„ฐ๋ฅผ ์Šฌ๋ ˆ์ด๋ธŒ์— “๋ณต์ œ"ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๊ธฐํ™”ํ•œ๋‹ค.
    2. ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋Š” ๋ณต์ œ๋ฅผ ์œ„ํ•ด์„œ MySQL ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ํ™œ์„ฑํ™”ํ•ด์„œ ๋‚จ๊ฒจ์•ผ ํ•œ๋‹ค.
      1. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์—๋Š” DML(๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฌธ์žฅ)๊ณผ DDL(์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฌธ์žฅ)์ด ๊ธฐ๋ก๋จ
    ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„
    1. ์Šฌ๋ ˆ์ด๋ธŒ ์„œ๋ฒ„๋Š” **๋งˆ์Šคํ„ฐ ์„œ๋ฒ„์— ์ ‘์†ํ•  ์ •๋ณด(IP, Port, ๊ณ„์ •)**๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ๋œ๋‹ค.
    2. ๋งˆ์Šคํ„ฐ ์„œ๋ฒ„๋กœ ๋™๊ธฐํ™” ์š”์ฒญ์„ ํ•˜๊ณ  ๋ฐ›์•„์˜จ ๋‚ด์—ญ์„ ๋ฆด๋ ˆ์ด ๋กœ๊ทธ์— ๊ธฐ๋กํ•œ๋‹ค.
      1. ์ฐธ๊ณ ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์™€ ๋ฆด๋ ˆ์ด ๋กœ๊ทธ๋Š” ๋‚ด์šฉ์ด ๋™์ผํ•˜๋‹ค.
  • ๐Ÿšจ ๋ณต์ œ์‹œ ์ฃผ์˜์‚ฌํ•ญ
    1. ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ๋งŒ ์„ค์ • ๊ฐ€๋Šฅ
    2. ์Šฌ๋ ˆ์ด๋ธŒ๋Š” ํ•ญ์ƒ ์ฝ๊ธฐ ์ „์šฉ
    3. ๋งˆ์Šคํ„ฐ ์žฅ๋น„์™€ ์Šฌ๋ ˆ์ด๋ธŒ ์žฅ๋น„ ์‚ฌ์–‘์€ ๋™์ผํ•œ ๊ฒƒ์œผ๋กœ ์‚ฌ์šฉ
    4. ๋ณต์ œ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ์ค‘์ง€(๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ์ž‘์„ฑ์€ ๋น„์šฉ์ด ๊ต‰์žฅํžˆ ํฐ ์ž‘์—…)
    5. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ์™€ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€(isolation level)
      1. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ํŒŒ์ผ์€ ์–ด๋–ค ๋‚ด์šฉ์ด ๊ธฐ๋ก๋˜๋Š๋ƒ์— ๋”ฐ๋ผ STATEMENT ํฌ๋งท ๋ฐฉ์‹๊ณผ ROW ํฌ๋งท ๋ฐฉ์‹
      • STATEMENT ํฌ๋งท : ๋งˆ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋˜๋Š” ์ฟผ๋ฆฌ ๋ฌธ์žฅ ๊ธฐ๋ก
      • ROW ํฌ๋งท : ๋งˆ์Šคํ„ฐ์—์„œ ์‹คํ–‰๋œ ์ฟผ๋ฆฌ์— ์˜ํ•ด ๋ณ€๊ฒฝ๋œ ๋ ˆ์ฝ”๋“œ ๊ฐ’์„ ๊ธฐ๋ก

4.1.8 ์ฟผ๋ฆฌ ์บ์‹œ

  • ์ฟผ๋ฆฌ(SQL)๋ฅผ ์บ์‹œํ•˜์ง€ ์•Š๊ณ , ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์บ์‹œํ•œ๋‹ค.
  • ์ฟผ๋ฆฌ ์บ์‹œ๋Š” key, value ์Œ์˜ ๋งต(Map) ๊ฐ™์€ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋‹ค.
  • MySQL์—๋งŒ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด๋ฉฐ, ์ƒ๊ฐ๋ณด๋‹ค ํšจ์œจ์ ์ด์ง€ ์•Š์€ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.
  • ๐Ÿ”ฝ ์ฟผ๋ฆฌ ์บ์‹œ ํ™•์ธ ์ ˆ์ฐจ
    1. ์š”์ฒญ์œผ๋กœ ๋“ค์–ด์˜จ ๋ฌธ์žฅ์ด ์ฟผ๋ฆฌ ์บ์‹œ์— ์กด์žฌํ•˜๋Š”๊ฐ€? (๊ณต๋ฐฑ, ๋Œ€์†Œ๋ฌธ์ž ๋“ฑ ์™„๋ฒฝํ•˜๊ฒŒ ์ผ์น˜ํ•ด์•ผ)
    2. ์‚ฌ์šฉ์ž์˜ ๊ถŒํ•œ์€ ์ถฉ๋ถ„ํ•œ๊ฐ€?
    3. ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์‹คํ–‰๋œ ์ฟผ๋ฆฌ๋ฉด, ๊ฒฐ๊ณผ๋„ ๊ฐ™์€ ๊ฐ€์‹œ ๋ฒ”์œ„ ๋‚ด์˜ ํŠธ๋žœ์žญ์…˜์—์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฒฐ๊ณผ์ธ๊ฐ€?
      1. ๊ฐ€์‹œ ๋ฒ”์œ„ : ์ž์‹ ์˜ ํŠธ๋žœ์žญ์…˜ ์•„์ด๋””๋ณด๋‹ค ์ž‘์€ ๊ฒƒ(์ž์‹ ์˜ ํŠธ๋žœ์žญ์…˜๋ณด๋‹ค ์ด์ „์— ์‹คํ–‰๋œ ํŠธ๋žœ์žญ์…˜)๋งŒ ํ™•์ธ ๊ฐ€๋Šฅํ•œ ์กฐ๊ฑด
    4. ์ฟผ๋ฆฌ์— ์‚ฌ์šฉ๋œ ๊ธฐ๋Šฅ์ด ์บ์‹œ๋ผ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
    5. → CURRENT_DATE, SYSDATE, RAND ๊ฐ™์ด ํ˜ธ์ถœ ์‹œ์ ์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง€๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€?, ๋ณ€์ˆ˜๊ฐ€ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š”์ง€?
    6. ์บ์‹œ ์ƒ์„ฑ ํ›„ ํ•ด๋‹น ๋ฐ์ดํ„ฐ์— ๋ณ€๊ฒฝ์ด ์žˆ์—ˆ๋Š”์ง€?
    7. ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ํฐ ๋ฐ์ดํ„ฐ๋Š” ์•„๋‹Œ์ง€?
    8. ์ฟผ๋ฆฌ ์บ์‹œ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€?
      1. ์บ์‹œํ•  ์ˆ˜ ์—†๋Š” ์š”์†Œ
      • ์ž„์‹œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ
      • ์‚ฌ์šฉ์ž ๋ณ€์ˆ˜ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ
      • ์ปฌ๋Ÿผ(column)๊ธฐ๋ฐ˜ ๊ถŒํ•œ ์„ค์ •
      • LOCK IN SHARE MODE ํžŒํŠธ
      • FOR UPDATE ํžŒํŠธ
      • User Defined Function ์‚ฌ์šฉ
      • ๋…๋ฆฝ์ ์ธ SELECT ๋ฌธ์ด ์•„๋‹Œ ์ผ๋ถ€๋ถ„์˜ ์„œ๋ธŒ ์ฟผ๋ฆฌ
      • Stored Procedure, Function, Trigger์—์„œ ์‚ฌ์šฉํ•œ ์ฟผ๋ฆฌ
      • SQL_NO_CACHE ํžŒํŠธ
    ๐Ÿง ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์บ์‹œ ํ™•์ธ ์ ˆ์ฐจ(์ด ๋ฐ–์—๋„ ๋” ์žˆ์Œ)๊ฐ€ ์žˆ๊ธฐ์— ์บ์‹œ ์ ์ค‘๋ฅ ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๊ณ , 
    ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ๋„ˆ๋ฌด ํฌ๋ฉด ์บ์‹œ๋ฅผ ๋น„์šฐ๋Š”๋ฐ๋„ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๊ฑธ๋ฆฌ๋ฏ€๋กœ 
    ์ „์ฒด์ ์œผ๋กœ ๋ณด์•˜์„ ๋•Œ ๊ณผ์—ฐ ํšจ์œจ์ ์ธ๊ฐ€์— ๋Œ€ํ•ด์„œ๋Š” ์‚ฌ์šฉ ํ™˜๊ฒฝ์„ ์ž˜ ๋”ฐ์ ธ๋ด์•ผ ํ•  ํ•„์š”๊ฐ€ ์žˆ๋‹ค…
    

4.1.9 ์Šค๋ ˆ๋“œ ํ’€

์ผ์ •๋Ÿ‰์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ด๋†“๊ณ , ์Šค๋ ˆ๋“œ๊ฐ€ ํ•„์š”ํ•  ๋•Œ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ์Šค๋ ˆ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐฉ์‹ → why? ์š”์ฒญ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋งŽ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ์ค„์ด๊ณ ์ž!

  • ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ
    • ์Šค๋ ˆ๋“œ ์ƒ์„ฑ, ์ œ๊ฑฐ
    • context switching
    • ์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง
  • Enterprise ๋ฒ„์ „ : ์Šค๋ ˆ๋“œ ํ’€ ์ œ๊ณต Community ๋ฒ„์ „ : ์ œ๊ณต X → Percona Server ์‚ฌ์šฉํ•˜๋ฉด ๋จ..

4.1.10 ํŠธ๋žœ์žญ์…˜ ์ง€์› ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ

  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ : DB ์„œ๋ฒ„์—์„œ ํ…Œ์ด๋ธ”์˜ ๊ตฌ์กฐ ์ •๋ณด, ์Šคํ† ์–ด๋“œ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์˜ ์ •๋ณด
  • ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์„ InnoDB์— ์ €์žฅ

+ Recent posts