๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ ๋ฐ ์ฑ๋ฅ ํ๋ ์๋น์ค. ๋๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ์ง๋จํ๊ณ , ๋ณ๋ชฉ ํ์์ ํด๊ฒฐํ๋ฉฐ, ์ต๋ ์ฒ๋ฆฌ๋๊ณผ ์ต์ ์ง์ฐ ์๊ฐ์ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋ํฉ๋๋ค.
์์ํ๊ธฐ
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ ๋ฌธ์ ๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๊ฐ์ค๋ฉ๋๋ค. ๊ฐ๋ ๋ฐ์ํ๋ ๋๋ฆฐ ํ์์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ์ง์์ ์ธ ๋ถ๋ด์ผ๋ก ์์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ฒด๊ณ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ทจํฉ๋๋ค. ์ค์ ๋ถํ ํ์์ ํ๋กํ์ผ๋งํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ํตํด ๊ทผ๋ณธ ์์ธ์ ์๋ณํ๋ฉฐ, ์ธก์ ๊ฐ๋ฅํ ๊ฐ์ ์ ์ ๊ณตํ๋ ๋ชฉํ๋ณ ์ต์ ํ๋ฅผ ๊ตฌํํฉ๋๋ค.
์ ํฌ๋ PostgreSQL, MySQL, MongoDB, ๊ทธ๋ฆฌ๊ณ DynamoDB๋ฅผ ๋ค์ดํฐ๋ธ ํ๋กํ์ผ๋ง ๋๊ตฌ, pganalyze, DataDog Database Monitoring ๋ฐ ๋ง์ถคํ ๋ถ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ ํํฉ๋๋ค. ์๋ฃจ์ ์๋ ์ธ๋ฑ์ค ๋ณ๊ฒฝ, ์ฟผ๋ฆฌ ์ฌ์์ฑ, ๊ตฌ์ฑ ํ๋, ๊ทธ๋ฆฌ๊ณ ์ฝ๊ธฐ ๋ณต์ ๋ณธ ๋ฐ ์บ์ฑ๊ณผ ๊ฐ์ ์ํคํ ์ฒ ๊ฐ์ ์ด ํฌํจ๋ฉ๋๋ค.
๋๋ฆฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ, ๋์ ๋ฐ์ดํฐ๋ฒ ์ด์ค CPU/๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ฐ๊ฒฐ ํ ๊ณ ๊ฐ ๋๋ ์ฆ๊ฐํ๋ ์๋ต ์๊ฐ์ ๊ฐ์ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์๋น์ค์ ๋๋ค. ๋จ์ผ ๋ฌธ์ ์ฟผ๋ฆฌ์ด๋ ์์คํ ์ ์ธ ์ฑ๋ฅ ๋ฌธ์ ์ด๋ , ์ ํฌ๋ ๊ทผ๋ณธ ์์ธ์ ์๋ณํ๊ณ ํด๊ฒฐํฉ๋๋ค.
๋ถํ ์ํ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ํ๋กํ์ผ๋งํ๊ณ , ์์ ๋๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ์๋ณํ๋ฉฐ, ๋ฆฌ์์ค ํ์ฉ ํจํด์ ๋ถ์ํฉ๋๋ค.
EXPLAIN์ ์ฌ์ฉํ์ฌ ๋๋ฆฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ธต ๋ถ์ํ๊ณ , ๋๋ฝ๋ ์ธ๋ฑ์ค๋ฅผ ์๋ณํ๋ฉฐ, ์ ๊ธ ๊ฒฝํฉ์ ๋ถ์ํฉ๋๋ค.
์ฟผ๋ฆฌ ์ฌ์์ฑ์ ๊ตฌํํ๊ณ , ์ธ๋ฑ์ค๋ฅผ ์ถ๊ฐํ๋ฉฐ, ๊ตฌ์ฑ์ ํ๋ํ๊ณ , ์ฐ๊ฒฐ ๊ด๋ฆฌ๋ฅผ ์ต์ ํํฉ๋๋ค.
๊ฐ์ ์ฌํญ์ ๋ฒค์น๋งํนํ๊ณ , ํ๊ท๊ฐ ์๋์ง ํ์ธํ๋ฉฐ, ํผํฌ ์กฐ๊ฑด์์ ๋ถํ ํ ์คํธ๋ฅผ ์ํํฉ๋๋ค.
์ฑ๋ฅ ๋์๋ณด๋, ๋๋ฆฐ ์ฟผ๋ฆฌ ์๋ฆผ์ ๋ฐฐํฌํ๊ณ , ์ต์ ํ ๊ฒํ ์ฃผ๊ธฐ๋ฅผ ์ค์ ํฉ๋๋ค.
๊ทํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๋ฆฌ๊ฒ ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ ๋ฅผ ์ง๋จํ๊ณ ํด๊ฒฐํด ๋๋ฆฝ๋๋ค.
์ ํฌ ์ฑ๋ฅ ํ๋์ ๋๋ฆฐ ์ฟผ๋ฆฌ ๋ถ์, ์ธ๋ฑ์ค ์ต์ ํ, ๊ตฌ์ฑ ํ๋ผ๋ฏธํฐ ํ๋, ์ฐ๊ฒฐ ํ(connection pool) ํฌ๊ธฐ ์กฐ์ , VACUUM ๋ฐ ํต๊ณ ๊ด๋ฆฌ, ๊ทธ๋ฆฌ๊ณ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ง์ ๋ง์ถ ์ ์ฅ์ I/O ์ต์ ํ๋ฅผ ํฌํจํฉ๋๋ค.
MicrocosmWorks๋ ์๊ฐ๋น $20-$50์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ต์ ํ ๋ฐ ์ฑ๋ฅ ํ๋ ์๋น์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋ง์ ๊ณ ๊ฐ๋ค์ด ์๋น์ค ์์ ์ฒซ ์ฃผ ์ด๋ด์ ์๋นํ ์ฑ๋ฅ ํฅ์์ ๊ฒฝํํฉ๋๋ค.
๋ค, ์ ํฌ๋ ์ฟผ๋ฆฌ ์ฌ์์ฑ, ๋ณตํฉ ์ธ๋ฑ์ค ์ถ๊ฐ, ์ฟผ๋ฆฌ ํ๋ ํํธ ๊ตฌํ, ์กฐ์ธ(join) ์ฌ๊ตฌ์กฐํ๋ฅผ ํตํด ์ฟผ๋ฆฌ ์คํ ์๊ฐ์ ๋ช ๋ถ์์ ๋ฐ๋ฆฌ์ด(milliseconds) ๋จ์๋ก ์ผ์์ ์ผ๋ก ๋จ์ถํฉ๋๋ค. ๋ชจ๋ ๋ณ๋ชฉ ํ์(bottleneck)์ ์๋ณํ๊ณ ์ ๊ฑฐํ๊ธฐ ์ํด EXPLAIN ANALYZE๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์ ํฌ๋ ๋๋ฆฐ ์ฟผ๋ฆฌ ๋ก๊ทธ, ์ ๊ธ ๊ฒฝํฉ(lock contention) ์งํ, I/O ๋๊ธฐ ํต๊ณ, ๋ฒํผ ์บ์ ์ ์ค๋ฅ , ์ฐ๊ฒฐ ํ(connection pool) ํ์ฉ๋๋ฅผ ๋ถ์ํ์ฌ ์ ํํ ๋ณ๋ชฉ ํ์์ ํ์ ํฉ๋๋ค. ๋ํ N+1 ์ฟผ๋ฆฌ ๋ฐ ๋๋ฝ๋ ์ธ๋ฑ์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ์ ํ๋ฆฌ์ผ์ด์ ์์ค์ ์ฟผ๋ฆฌ ํจํด์ ํ๋กํ์ผ๋งํฉ๋๋ค.
๋ค, ์ฟผ๋ฆฌ ํ๊ท(query regression), ์ ๊ธ ์์ค์ปฌ๋ ์ด์ (lock escalation), ๋ฆฌ์์ค ๊ณ ๊ฐ(resource exhaustion)์ ๋ํ ์๋ํ๋ ์๋ฆผ์ ํฌํจํ๋ pganalyze, Datadog ๋๋ ๋ง์ถคํ Prometheus/Grafana ๋์๋ณด๋์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ ์ค์ ํ์ฌ, ๋ฌธ์ ๊ฐ ์ฌ์ฉ์์๊ฒ ์ํฅ์ ๋ฏธ์น๊ธฐ ์ ์ ๊ฐ์ง๋๋๋ก ํฉ๋๋ค.