JiwonDev

์ •๋ฆฌ์ค‘-6

by JiwonDev

MySQL์€ 5.7๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

์ฒ˜์Œ์—๋Š” ๋ฐ์ดํ„ฐ ํŒŒ์ผ(Table Space)์—๋งŒ ์•”ํ˜ธํ™”๋ฅผ ์ œ๊ณตํ–ˆ์—ˆ์œผ๋‚˜, MySQL8.0์œผ๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ ๋˜๋ฉฐ ๋ฆฌ๋‘, ์–ธ๋‘๋กœ๊ทธ์™€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋“ฑ ๋ชจ๋“  ๊ฒƒ์„ ์•”ํ˜ธํ™” ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€๊ฒฝ๋˜์—ˆ๋‹ค.

 

๐Ÿ“Œ ์•”ํ˜ธํ™”์™€ ๋ณตํ˜ธํ™”๊ฐ€ ์ง„ํ–‰๋˜๋Š” ๊ณณ

MySQL ๋‚ด๋ถ€์—์„œ ์•”ํ˜ธํ™”๋œ ์ƒํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฑด ์•„๋‹ˆ๋‹ค. ์ฆ‰ MySQL ๋‚ด๋ถ€์™€ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ๋Š” ์•”ํ˜ธํ™”๋ฅผ ํ•˜๋˜ ๋ง๋˜ ๋ณ„ ์ฐจ์ด๊ฐ€ ์—†๋Š”๋ฐ, ์ด๋ฅผ TDE(Transparent Data Encryption, ํˆฌ๋ช…ํ•œ ๋ฐ์ดํ„ฐ ์•”ํ˜ธํ™”)์ด๋ผ ๋ถ€๋ฅธ๋‹ค.

 

๋””์Šคํฌ <-> MySQL ์„œ๋ฒ„ ์‚ฌ์ด์—์„œ ์•”ํ˜ธํ™” ๋ฐ ๋ณตํ˜ธํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์ฆ‰ ๋””์Šคํฌ ์ž…์ถœ๋ ฅ์„ ๋‹ด๋‹นํ•˜๋Š” InnoDB ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์˜ I/O ๋ ˆ์ด์–ด์—์„œ ์•”ํ˜ธ & ๋ณตํ˜ธํ™”๊ฐ€ ์ง„ํ–‰๋œ๋‹ค.

 

์•”ํ˜ธํ™”๋Š” ๋ณดํ†ต ๋ฉ”๋ชจ๋ฆฌ(In-Process), ๋„คํŠธ์›Œํฌ ์ „์†ก(In-Transit), ๋””์Šคํฌ ์ €์žฅ(At Rest)์—์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, MySQL์€ AtRest ๋ฐฉ์‹์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋˜๊ฒ ๋‹ค.

 

 

๐Ÿ“Œ 2๋‹จ๊ณ„ ํ‚ค ๊ด€๋ฆฌ

MySQL ์„œ๋ฒ„์˜ TDE์—์„œ, ์•”ํ˜ธํ™” ํ‚ค๋Š” KeyRing์ด๋ผ๋Š” 2๋‹จ๊ณ„ ํ‚ค ๊ด€๋ฆฌ ํ”Œ๋Ÿฌ๊ทธ์ธ์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.

์ฐธ๊ณ ๋กœ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด KeyRing ์•”ํ˜ธํ™” ๋ฐฉ์‹์„ KMIP, AWS๋“ฑ์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ธฐ๋ณธ์€ File-Based

๋ฌผ๋ก  ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ง์ ‘ ์•”ํ˜ธํ™”ํ•ด์„œ MySQL์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

์ด๋Š” MySQL์€ ์•”ํ˜ธํ™” ์—ฌ๋ถ€๋ฅผ ์ธ์ง€ํ•˜์ง€ ๋ชปํ•˜๊ณ , ์ธ๋ฑ์Šค๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ถ”์ฒœํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ MySQL ์„œ๋ฒ„์— ๋ฃจํŠธ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•˜๋”๋ผ๋„ ํ‰๋ฌธ์˜ ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์—, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•”ํ˜ธํ™”๋ฅผ ์ ์ ˆํžˆ ํ˜ผํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋” ์•ˆ์ „ํ•œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค. (ex ๋น„๋ฐ€๋ฒˆํ˜ธ ์ €์žฅ)

 

๐Ÿ“Œ ์•”ํ˜ธํ™”์™€ ์„ฑ๋Šฅ

 

์œ„์—๋„ ์–ธ๊ธ‰ํ–ˆ์ง€๋งŒ, TDE ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ ๋””์Šคํฌ๋กœ๋ถ€ํ„ฐ ์ด๋ฏธ ์ฝํ˜€์ง„ ๋ฐ์ดํ„ฐ๋Š” ๋ณตํ˜ธํ™”๊ฐ€ ์™„๋ฃŒ๋œ ์ƒํƒœ๋กœ InnoDB ๋ฒ„ํผํ’€์— ์ €์žฅ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ์— ์ „ํ˜€ ์˜ํ–ฅ์ด ์—†๋‹ค.

 

๋ฌผ๋ก  ์ฟผ๋ฆฌ๊ฐ€ ๋ฒ„ํผํ’€์— ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์š”์ฒญํ•  ๊ฒฝ์šฐ, ๋””์Šคํฌ์—์„œ ๋ณตํ˜ธํ™” ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ๊ฒƒ์ด๋‹ค.

 

๋‹ค๋งŒ ์•”ํ˜ธํ™”์˜ ๊ฒฝ์šฐ ํฐ ์ƒ๊ด€์—†๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฐ์ดํ„ฐ ํŽ˜์ด์ง€ ์ €์žฅ์€ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ถ„๋ฆฌ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. MySQL ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋ฒ„์˜ ์„ฑ๋Šฅ์€ ๋” ์‚ฌ์šฉํ•˜๊ฒ ์ง€๋งŒ, ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ์˜ ์ง€์—ฐ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์‚ฌ์šฉ์ž ์ฟผ๋ฆฌ ์„ฑ๋Šฅ๋ง๊ณ , ์„œ๋ฒ„ ์ž์›. ์ฆ‰ ๋””์Šคํฌ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋Š” ์–ผ๋งˆ๋‚˜ ๋Š๋ ค์งˆ๊นŒ? ์„œ๋น„์Šค๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒ ์ง€๋งŒ, ๋ณดํ†ต ์ฝ๊ธฐ๋Š” 3๋ฐฐ, ์“ฐ๊ธฐ๋Š” 5๋ฐฐ ์ •๋„ ๋Š๋ ค์ง„๋‹ค. ๋ฌผ๋ก  ๋ฐ€๋ฆฌ์ดˆ(ms)๋‹จ์œ„๋ผ์„œ ํฐ ์ฐจ์ด๊ฐ€ ์—†๋‹ค๊ณ  ๋ณผ ์ˆ˜๋„ ์žˆ๊ฒ ๋‹ค.

Real MySQL 8.0 - ๋ฐฑ์€๋นˆ, ์ด์„ฑ์šฑ ์ง€์Œ

 

์‹ค์งˆ์ ์ธ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์•Œ๊ธฐ์œ„ํ•ด์„œ๋Š”, MySQL TDE์— ์‚ฌ์šฉ๋˜๋Š” AES-256 ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํŠน์ง•์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

AES (Advanced Encryption Standard) ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์•”ํ˜ธํ™” ๋Œ€์ƒ์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ ์šฉ๋Ÿ‰์ด ๋” ์ปค์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ, MySQL ํŽ˜์ด์ง€๋Š” ์•”ํ˜ธํ™” ํ‚ค๋ณด๋‹ค ์ด๋ฏธ ํ›จ์”ฌ ํฌ๊ธฐ๋•Œ๋ฌธ์— ๋ณ„ ์ƒ๊ด€์—†๋‹ค. ๊ทธ๋ž˜์„œ TDE๋ฅผ ์ ์šฉํ•ด์„œ ์•”ํ˜ธํ™” ์ „/ํ›„ ํ…Œ์ด๋ธ”์˜ ํฌ๊ธฐ๋Š” ๋™์ผํ•˜๋‹ค. 

 

๋‹ค๋งŒ ๊ฐ™์€ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด ์•”ํ˜ธํ™”์™€ ์••์ถ•์ด ๋™์‹œ์— ์ ์šฉ๋  ๋•Œ, MySQL์€ ์••์ถ•์„ ๋จผ์ € ์‹คํ–‰ํ•˜๊ณ  ์•”ํ˜ธํ™”๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

์ด๋Š” ์•”ํ˜ธํ™”๋œ ๊ฒฐ๊ณผ๋ฌผ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ˜ผ๋ˆ์„ฑ(Chaos)์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ์••์ถ• ํšจ์œจ์ด ๋งค์šฐ ๋–จ์–ด์ง€๊ณ , ์•”ํ˜ธํ™”๋ฅผ ๋จผ์ €ํ•ด๋ฒ„๋ฆฌ๋ฉด ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ฌ๋ผ์ ธ ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํŽ˜์ด์ง€๋„ ์•”ํ˜ธํ™”&๋ณตํ˜ธํ™”๋ฅผ ์ค‘๋ณตํ•ด์„œ ํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

๐Ÿ“Œ ๋กœ๊ทธ ์•”ํ˜ธํ™”

Redo, Undo, ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ ๋ชจ๋‘ ์•”ํ˜ธํ™” ๊ฐ€๋Šฅํ•˜๋‹ค. ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•์€ ๋‚˜์ค‘์— ์ถ”๊ฐ€๋กœ ์ž‘์„ฑํ•˜๊ฒ ๋‹ค-

 

์ฐธ๊ณ ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ์•”ํ˜ธํ™”ํ•˜๋ฉด mysqlbinlog๋“ฑ์˜ ๋„๊ตฌ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ํ†ตํ•œ ๋ณต๊ตฌ๊ฐ€ ์–ด๋ ต๋‹ค.

๊ธฐ์กด์—๋Š” ๋กœ๊ทธ๋งŒ ๋ฐฑ์—…ํ•ด๋‘๋ฉด ์ด๋ฅผ ์ด์šฉํ•ด DB ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ–ˆ์ง€๋งŒ, ์ด์   ์•”ํ˜ธํ™”๋˜์–ด ๋กœ๊ทธ๋ฅผ ์ฝ์„ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋น„๋ฐ€ํ‚ค๊ฐ€ ํ•ด๋‹น ๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ MySQL์ด ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ž˜์™€ ๊ฐ™์ด mysqlbinlog ๋„๊ตฌ๊ฐ€ ํ•ด๋‹น MySQL ์„œ๋ฒ„๋กœ ์ ‘์†ํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋ฐ–์—๋Š” ์—†๋‹ค. ๋งŒ์•ฝ ํ•ด๋‹น ์„œ๋ฒ„์— ์ ‘์†์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋กœ๊ทธ๋ฅผ ํ†ตํ•œ ๋ณต๊ตฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

$ mysqlbinlog --read-from-remote-server -uroot -p -vvv ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ๊ทธํŒŒ์ผ
$ Enter password:

 

'๐ŸŒฑBackend > DB(MySQL,PostgreSQL)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

PostgreSQL ์™€ vaccum์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.  (2) 2024.01.21
์ •๋ฆฌ์ค‘-5  (0) 2021.10.27
์ •๋ฆฌ์ค‘ - 4  (0) 2021.10.20
์ •๋ฆฌ์ค‘ - 3  (0) 2021.10.20
์ •๋ฆฌ์ค‘ -2  (0) 2021.10.20

๋ธ”๋กœ๊ทธ์˜ ์ •๋ณด

JiwonDev

JiwonDev

ํ™œ๋™ํ•˜๊ธฐ