2025.08.20 ~ 2025.09.04
MySQL ํต์ฌ ๋์ ์๋ฆฌ(์คํ ๋ฆฌ์ง ์์ง, ํธ๋์ญ์ , ์ธ๋ฑ์ค, ์ตํฐ๋ง์ด์ , ์คํ๊ณํ ๋ฑ) ์ฌํ ์ดํด
๋ฐํ๋ฅผ ํตํด ๊ฐ์ ํ์ต ๋ด์ฉ์ ์ ๋ฆฌ ๋ฐ ๊ณต์
- ๋งค์ฃผ 2~3๊ฐ ์ฑํฐ๋ฅผ ์ฝ๊ณ ๋ฐํ
- ๋ฐํ์๋ ๋ฐํ์๋ฃ/์ ๋ฆฌ๋ณธ ์์ฑ
- ์ง์์๋ต ๋ฐ ํ ๋ก
- ์ฃผ์ ๊ฐ๋
-
MySQL ์์ง (๋จธ๋ฆฌ)
1-1. ์ปค๋ฅ์ ํธ๋ค๋ฌ: ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ๊ด๋ฆฌ, ์ธ์ฆ ์ฒ๋ฆฌ
1-2. SQL ํ์ & ์ ์ฒ๋ฆฌ๊ธฐ: SQL ๋ฌธ๋ฒ ๊ฒ์ฆ, ๊ตฌ๋ฌธ ํธ๋ฆฌ ์์ฑ
1-3. ์ตํฐ๋ง์ด์ : ์ฌ๋ฌ ์คํ ๊ฒฝ๋ก ์ค ์ต์ ์ ์คํ๊ณํ ์ ํ (๋น์ฉ ๊ธฐ๋ฐ ์ต์ ํ)
1-4. ์ฟผ๋ฆฌ ์คํ๊ธฐ: ์ตํฐ๋ง์ด์ ๊ฐ ๋ง๋ ๊ณํ์ ์ค์ ์คํ -
์คํ ๋ฆฌ์ง ์์ง (์๋ฐ)
2-1. ๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ๋์คํฌ์ ์ฝ๊ณ ์ฐ๋ ๋ชจ๋
2-2. MyISAM, InnoDB, Memory ๋ฑ ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐ๋ก ํ์ฅ ๊ฐ๋ฅ
2-3. InnoDB๋ ํธ๋์ญ์ , MVCC, ์ธ๋ํค ์ง์ / MyISAM์ ๋จ์ ๊ตฌ์กฐ, ๋น ๋ฅธ ์ฝ๊ธฐ -
ํ๋ฌ๊ทธ์ธ ์ํคํ ์ฒ
3-1. ์ธ์ฆ, ์คํ ๋ฆฌ์ง ์์ง, UDF ๋ฑ ๋ชจ๋ํ ํ์ฅ ์ง์
3-2. ๋ค๋ฅธ DBMS์ ์ฐจ๋ณํ๋๋ MySQL์ ๊ฐ์ฅ ํฐ ํน์ง -
๋ฒํผ ํ & ์บ์ ๊ณ์ธต
4-1. InnoDB ๋ฒํผ ํ: ๋ฐ์ดํฐ/์ธ๋ฑ์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์บ์ฑ
4-2. ์ฟผ๋ฆฌ ์บ์(8.0๋ถํฐ ์ ๊ฑฐ): ์บ์ ์ผ๊ด์ฑ ๋ฌธ์ ๋ก ํ์ง๋จ
- ํต์ฌ ํ ๋ก
-
Community ๋ฒ์ ์๋ Thread Pool์ด ์๋๋ฐ, ๋์ ํญ์ฃผ ์ํฉ์์ ์ด๋ป๊ฒ ๋์ํ ์ ์์๊น?
(โ ProxySQL, ์ ํ๋ฆฌ์ผ์ด์ ์ปค๋ฅ์ ํ, Scale-out ๋ฑ์ผ๋ก ๋ณด์) -
MySQL์ด โ์คํ ๋ฆฌ์ง ์์ง ํ๋ฌ๊ทธ์ธ ๊ตฌ์กฐโ๋ฅผ ์ฑํํ ์ด์ ๋ ๋ฌด์์ผ๊น?
(โ ๋ค์ํ ์ํฌ๋ก๋์ ๋ง์ถฐ ์ต์ ์์ง์ ์ ํ ๊ฐ๋ฅ, ๋ฒ์ฉ DBMS๋ก ํ์ฅ์ฑ ํ๋ณด) -
InnoDB๊ฐ ๋ํดํธ๊ฐ ๋ ์ง๊ธ, MyISAM ๊ฐ์ ์์ง์ ์ฌ์ ํ ๊ณ ๋ คํ ํ์๊ฐ ์์๊น?
- ๋ฐํ์: ์ฑ์ค, ์์
- ์ฃผ์ ๊ฐ๋ : ACID, MVCC, Isolation Level
- ํต์ฌ ํ ๋ก : Undo/Redo Log ๊ด๋ฆฌ์ ์ฑ๋ฅ Trade-off
- ๋ฐํ์: ์ฑ์ค, ์์
- ์ฃผ์ ๊ฐ๋
- InnoDB ํ์ด์ง ์์ถ vs ํ ์ด๋ธ ์์ถ
- ์์ถ ์๊ณ ๋ฆฌ์ฆ (zlib, LZ4)๊ณผ ๋์คํฌ ๊ณต๊ฐ ์ ์ฝ ํจ๊ณผ
- ์์ถ์ด ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ (์ฝ๊ธฐ ์ฑ๋ฅ โ / ์ฐ๊ธฐ ์ฑ๋ฅ โ ๊ฐ๋ฅ)
- ํต์ฌ ํ ๋ก
- OLTP ํ๊ฒฝ์์ ์์ถ์ ์ ์ฉํ ๊ฒฝ์ฐ TPS ์ ํ vs ์ ์ฅ๊ณต๊ฐ ์ ์ฝ์ ํธ๋ ์ด๋์คํ
- SSD ๊ธฐ๋ฐ ์คํ ๋ฆฌ์ง์์ ์์ถ์ด ์ฌ์ ํ ์๋ฏธ๊ฐ ์๋๊ฐ?
- ๋ฐํ์: ์ฑ์ค, ์์
- ์ฃผ์ ๊ฐ๋
- MySQL Keyring ํ๋ฌ๊ทธ์ธ: keyring_file, keyring_okv, keyring_encrypted_file
- ํ ์ด๋ธ์คํ์ด์ค ์ํธํ, Redo/Undo ๋ก๊ทธ ์ํธํ, ๋ฐ์ด๋๋ฆฌ ๋ก๊ทธ ์ํธํ
- TDE (Transparent Data Encryption) ๊ฐ๋
- ํต์ฌ ํ ๋ก
- DB ์์ฒด ์ํธํ vs ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ ์ํธํ
- GDPR/๊ฐ์ธ์ ๋ณด๋ณดํธ๋ฒ ๋์ ์ ์ด๋๊น์ง DB ์ํธํ๊ฐ ํ์ํ ๊น?
๋ฐํ์: ์ฑ์ค, ์์
- ์ฃผ์ ๊ฐ๋
- B-Tree ์ธ๋ฑ์ค, ํด๋ฌ์คํฐ๋ง ์ธ๋ฑ์ค, ๋ณด์กฐ ์ธ๋ฑ์ค ๊ตฌ์กฐ
- ์ปค๋ฒ๋ง ์ธ๋ฑ์ค, ๋ฃจ์ค ์ธ๋ฑ์ค ์ค์บ, MRR/Index Condition Pushdown
- ์ธ๋ฑ์ค ์ค๊ณ ์์น: ์นด๋๋๋ฆฌํฐ, ์ ํ๋, ์กฐํฉ ์ธ๋ฑ์ค
- ํต์ฌ ํ ๋ก
- ์ค๋ฌด์์ LIKE '%keyword' ๊ฒ์ โ ์ธ๋ฑ์ค ๋ฏธํ์ฉ ๋ฌธ์
- Elasticsearch vs MySQL ์ธ๋ฑ์ค ํ์ฉ ๋น๊ต
- MogoDB, PostgreSQL ์ ๋น๊ต ๋ฐ ๊ฐ ์ฅ๋จ์ ๋ฐ ํน์ง ์ ๋ฆฌ
- ๋ฐํ์: ์ฑ์ค, ์์
- ์ฃผ์ ๊ฐ๋
- ์ตํฐ๋ง์ด์ ๊ฐ ์คํ๊ณํ์ ์ ํํ๋ ๋ฐฉ์
- ํต๊ณ ์ ๋ณด์ ๋น์ฉ ๊ธฐ๋ฐ ์ต์ ํ
- ์ตํฐ๋ง์ด์ ํํธ (USE INDEX, STRAIGHT_JOIN, SQL_CALC_FOUND_ROWS)
- ํต์ฌ ํ ๋ก
- ์ตํฐ๋ง์ด์ ๊ฐ ๋นํจ์จ์ ์ธ ์คํ๊ณํ์ ์ ํํ ๋ ์ด๋ป๊ฒ ๊ฐ์ ํ ๊ฒ์ธ๊ฐ?
- ํํธ ๋จ์ฉ ์ ์ ์ง๋ณด์ ๋ฌธ์
- ๋ฐํ์: ์ฑ์ค, ์์
- ์ฃผ์ ๊ฐ๋
- EXPLAIN ์ถ๋ ฅ ํด์: type, key, rows, filtered
- EXPLAIN FORMAT=JSON ๊ณผ ์ตํฐ๋ง์ด์ Trace
- ์คํ๊ณํ ์บ์ ๋ฐ Reuse
- ํต์ฌ ํ ๋ก
- EXPLAIN๋ง์ผ๋ก ํ๋ ํ๋จ ๊ฐ๋ฅํ ๊น?
- ๋๊ท๋ชจ ์ฟผ๋ฆฌ ํ๋ ์ ์ค์ธก ๋ชจ๋ํฐ๋ง (performance_schema, sys ์คํค๋ง) ํ์์ฑ
- ๋ฐํ์: ์ฑ์ค, ์์
๐ก ์ ์ฒด ์ธ์ฌ์ดํธ
-
๋จ์ ๊ธฐ๋ฅ ์ต๋์ด ์๋๋ผ ์ฑ๋ฅ/์์ ์ฑ/ํ์ฅ์ฑ ๊ด์ ์ผ๋ก ์ดํด๊ฐ ๊น์ด์ง
-
์ค์ ํ๋ก์ ํธ ์ค๊ณ/์ด์ ์ ์ ์ฉํ ํฌ์ธํธ ๋์ถ