ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ PostgreSQL๋ก ์์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ: ์ด๋ก ๊ณผ ์ค์ต - PostgreSQL ์ด์ ๋ฐ ์ ์ง๋ณด์ ์ ๋ต
octo54 2025. 3. 10. 11:17๐ PostgreSQL๋ก ์์ํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ: ์ด๋ก ๊ณผ ์ค์ต
5.2 PostgreSQL ์ด์ ๋ฐ ์ ์ง๋ณด์ ์ ๋ต
PostgreSQL์ ์์ ์ ์ผ๋ก ์ด์ํ๋ ค๋ฉด ์ง์์ ์ธ ์ ์ง๋ณด์์ ์ฑ๋ฅ ์ต์ ํ, ์ฅ์ ๋์ ์ ๋ต์ด ํ์ํฉ๋๋ค.
์ด๋ฒ ๊ธ์์๋ PostgreSQL ์ด์ ํ๊ฒฝ์์ ํ์ํ ํต์ฌ ์ ์ง๋ณด์ ์ ๋ต๊ณผ ์ฅ์ ๋์ ๋ฐฉ๋ฒ์ ๋ค๋ฃน๋๋ค.
5.2.1 PostgreSQL ์ด์ ๋ฐ ์ ์ง๋ณด์ ๊ฐ์
PostgreSQL์ ์ด์ํ ๋ ๊ณ ๋ คํด์ผ ํ ์ฃผ์ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
โ
๋ฐฑ์
๋ฐ ๋ณต๊ตฌ ๊ด๋ฆฌ (์ ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ๋ฐฑ์
)
โ
์๋ฒ ์ฑ๋ฅ ์ต์ ํ (postgresql.conf ํ๋)
โ
์๋ํ๋ ๋ฐ์ดํฐ ์ ์ง๋ณด์ (VACUUM, ANALYZE)
โ
๋ชจ๋ํฐ๋ง ๋ฐ ์ฅ์ ๋์ (pg_stat_statements, Prometheus, Grafana)
โ
๋ณด์ ์
๋ฐ์ดํธ ๋ฐ ํจ์น ๊ด๋ฆฌ
๊ฐ ํญ๋ชฉ์ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
5.2.2 ์ ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ๋ฐฑ์ ๋ฐ ๋ณต๊ตฌ ์ ๋ต
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฅ์ ๋ฐ์ ์ ๋น ๋ฅธ ๋ณต๊ตฌ๋ฅผ ์ํด ์ ๊ธฐ์ ์ธ ๋ฐฑ์
์ด ํ์์
๋๋ค.
PostgreSQL์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฑ์
๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
โ ๋ฐฑ์ ์ ๋ต ๋น๊ต
๋ฐฑ์ ๋ฐฉ์ ํน์ง ๋ณต๊ตฌ ์๋ ์ฌ์ฉ ์ฌ๋ก
pg_dump | SQL ํ์ผ ๋๋ ์์ถ ๋ฐฑ์ | ๋๋ฆผ | ์๊ท๋ชจ ๋ฐ์ดํฐ ๋ฐฑ์ |
pg_basebackup | ์ ์ฒด ๋ฐ์ดํฐ ๋๋ ํฐ๋ฆฌ ๋ฐฑ์ | ๋น ๋ฆ | ์ด์ ํ๊ฒฝ ๊ธฐ๋ณธ ๋ฐฑ์ |
PITR (Point-In-Time Recovery) | ํน์ ์์ ๋ณต๊ตฌ ๊ฐ๋ฅ | ๋น ๋ฆ | ๊ธ์ต, ํธ๋์ญ์ ์๋น์ค |
๐น ์ ๊ธฐ์ ์ธ pg_basebackup ์ํ
pg_basebackup -U postgres -D /backup/postgres -Ft -z -P
โ ํ์ผ ๊ธฐ๋ฐ ๋ฐฑ์ ์ผ๋ก ์ ์ฒด ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ
๐น WAL ๋ก๊ทธ๋ฅผ ํ์ฉํ PITR ๋ฐฑ์ ์ค์
wal_level = replica
archive_mode = on
archive_command = 'cp %p /var/lib/postgresql/wal_archive/%f'
โ PITR(Point-In-Time Recovery)์ ์ฌ์ฉํ๋ฉด ํน์ ์์ ์ผ๋ก ๋ณต๊ตฌ ๊ฐ๋ฅ
๐ก ์ด์ ํ๊ฒฝ์์๋ pg_basebackup + PITR์ ์กฐํฉํ์ฌ ๋ฐฑ์ ์๋ํ ํ์
5.2.3 ์ฑ๋ฅ ์ ์ง๋ณด์๋ฅผ ์ํ ์๋ํ ์ค์ (VACUUM, ANALYZE)
PostgreSQL์ MVCC(Multi-Version Concurrency Control) ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
์ด ๋๋ฌธ์ ๋ถํ์ํ ๋ฐ์ดํฐ ์ ๋ฆฌ(VACUUM)์ ํต๊ณ ๋ถ์(ANALYZE)์ด ํ์ํฉ๋๋ค.
โ VACUUM๊ณผ ANALYZE์ ์ฐจ์ด์
๋ช ๋ น์ด ๊ธฐ๋ฅ ์คํ ์ฃผ๊ธฐ
VACUUM | ๋ถํ์ํ ๋ฐ์ดํฐ ์ ๋ฆฌ | ์ ๊ธฐ์ ์ผ๋ก ์คํ |
ANALYZE | ํต๊ณ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธ | SELECT ์ฑ๋ฅ ํฅ์ |
๐น AUTOVACUUM ํ์ฑํ ํ์ธ
SHOW autovacuum;
โ ๊ธฐ๋ณธ์ ์ผ๋ก on ์ํ์ฌ์ผ ํจ
๐น VACUUM ANALYZE ์๋ ์คํ ์์
VACUUM ANALYZE;
โ ํ ์ด๋ธ์ ์ ๋ฆฌ ๋ฐ ํต๊ณ ์ ๋ฐ์ดํธ
๐ก ๋์ฉ๋ ํ ์ด๋ธ์ ๊ฒฝ์ฐ autovacuum_vacuum_scale_factor๋ฅผ ์กฐ์ ํ์ฌ ์ต์ ํ ๊ฐ๋ฅ
autovacuum_vacuum_scale_factor = 0.1
โ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ด ๋ง์ ๊ฒฝ์ฐ 0.2 → 0.1๋ก ์กฐ์ ํ์ฌ ๋ ์์ฃผ ์คํ
5.2.4 ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๋ฐ ์ฑ๋ฅ ๋ถ์
PostgreSQL์์๋ pg_stat_statements์ ์ธ๋ถ ๋ชจ๋ํฐ๋ง ํด(Grafana, Prometheus)์ ํ์ฉํ์ฌ ์ฑ๋ฅ์ ๋ถ์ํ ์ ์์ต๋๋ค.
โ ์ฃผ์ ๋ชจ๋ํฐ๋ง ๋๊ตฌ
๋๊ตฌ ์ค๋ช
pg_stat_statements | ๊ฐ์ฅ ๋๋ฆฐ SQL ์ฟผ๋ฆฌ ๋ถ์ |
pgBadger | PostgreSQL ๋ก๊ทธ ๋ถ์ ๋ฐ ์ฑ๋ฅ ๋ฆฌํฌํธ |
Prometheus + Grafana | ์ค์๊ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง |
pg_activity | PostgreSQL์ htop ๋์ฒด ๋ชจ๋ํฐ๋ง ๋๊ตฌ |
๐น pg_stat_statements ํ์ฑํ
CREATE EXTENSION pg_stat_statements;
โ PostgreSQL์ SQL ์คํ ํต๊ณ๋ฅผ ์์ง
๐น ๊ฐ์ฅ ์คํ ์๊ฐ์ด ๊ธด ์ฟผ๋ฆฌ ํ์ธ
SELECT query, calls, total_time
FROM pg_stat_statements
ORDER BY total_time DESC
LIMIT 5;
โ ๊ฐ์ฅ ๋๋ฆฐ SQL์ ์ฐพ์ ์ต์ ํ ๊ฐ๋ฅ
๐ก ์ด์ ํ๊ฒฝ์์๋ Prometheus + Grafana๋ฅผ ํ์ฉํ์ฌ ์ค์๊ฐ ๋ชจ๋ํฐ๋ง ๊ตฌ์ถ ํ์
5.2.5 ์ฅ์ ๋์ ๋ฐ ๋ฐ์ดํฐ ๋ณต๊ตฌ ์ ์ฐจ
PostgreSQL ์ด์ ์ค ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฅ์ ๋ฐ์ ์ ์ ์ํ ๋์์ด ํ์ํฉ๋๋ค.
๋ค์์ ์ฃผ์ ์ฅ์ ๋์ ์๋๋ฆฌ์ค์ ํด๊ฒฐ ๋ฐฉ๋ฒ์
๋๋ค.
โ ์ฃผ์ ์ฅ์ ์ ํ ๋ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ
์ฅ์ ์ ํ ์์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ
์๋ฒ ๋ค์ด | PostgreSQL ํ๋ก์ธ์ค ์ข ๋ฃ | systemctl restart postgresql |
๋์คํฌ ์ฉ๋ ๋ถ์กฑ | WAL ๋ก๊ทธ ๋ฐ ๋ฐ์ดํฐ ์ฆ๊ฐ | VACUUM FULL, ๋ก๊ทธ ์ ๋ฆฌ |
๋๋ฆฐ ์ฟผ๋ฆฌ ๋ฐ์ | ์ธ๋ฑ์ค ๋ถ์ฌ, ANALYZE ๋ฏธ์คํ | EXPLAIN ANALYZE๋ก ์ต์ ํ |
๋ฐ์ดํฐ ์์ | ์๋ชป๋ DELETE, DROP ์คํ | PITR ๋ณต๊ตฌ ์ํ |
๐น PostgreSQL ๊ฐ์ ์ข ๋ฃ ํ ๋ณต๊ตฌ ์ ์ฐจ
pg_ctl restart -D /var/lib/postgresql/data
โ ๊ฐ์ ์ข ๋ฃ๋ PostgreSQL ์๋ฒ ์ฌ์์
๐น ๋์คํฌ ์ฉ๋ ๋ถ์กฑ ํด๊ฒฐ (pg_wal ์ ๋ฆฌ)
rm -rf /var/lib/postgresql/pg_wal/archive/*
โ WAL ๋ก๊ทธ๊ฐ ๊ณผ๋ํ๊ฒ ์์ด๋ฉด ์ญ์ ํ ์ฌ์์
๐น ์์๋ ํ ์ด๋ธ ๋ณต๊ตฌ (pg_repack ํ์ฉ)
pg_repack -U postgres -d mydb -t users
โ ๋ฐ์ดํฐ ์์์ด ์์ฌ๋ ๊ฒฝ์ฐ pg_repack์ผ๋ก ํ ์ด๋ธ ์ ๋ฆฌ
๐ก ์ด์ ํ๊ฒฝ์์๋ ์ฅ์ ๋ฐ์ ์ PITR ๋ณต๊ตฌ ๋ฐ Streaming Replication ํ์ฉ ํ์
5.2.6 PostgreSQL ๋ณด์ ์ ์ง ๋ฐ ์ ๊ธฐ ์ ๋ฐ์ดํธ
์ด์ ํ๊ฒฝ์์๋ ๋ณด์ ํจ์น ๋ฐ ์ ๊ธฐ์ ์ธ ์ ๋ฐ์ดํธ๊ฐ ํ์์ ์ ๋๋ค.
โ PostgreSQL ๋ณด์ ์ฒดํฌ๋ฆฌ์คํธ
โ
scram-sha-256 ๋๋ SSL/TLS ์ธ์ฆ ์ฌ์ฉ (pg_hba.conf ํ์ธ)
โ
GRANT ๋ฐ REVOKE๋ฅผ ํ์ฉํ์ฌ ์ต์ ๊ถํ๋ง ๋ถ์ฌ
โ
pgAudit๋ฅผ ํ์ฑํํ์ฌ SQL ๋ก๊ทธ ๊ธฐ๋ก (CREATE EXTENSION pgaudit;)
โ
PostgreSQL ์ต์ ๋ฒ์ ์ ์ง (SELECT version(); ๋ก ํ์ธ)
๐ก ์ด์ ํ๊ฒฝ์์๋ PostgreSQL์ ๋ณด์ ํจ์น๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ํ์ธํ๊ณ ์ ๋ฐ์ดํธํด์ผ ํจ
5.2.7 PostgreSQL ์ด์ ๋ฐ ์ ์ง๋ณด์ ํต์ฌ ์ ๋ฆฌ
โ
๋ฐฑ์
๋ฐ ๋ณต๊ตฌ ์ ๋ต์ ๊ตฌ์ถ (pg_basebackup + PITR)
โ
VACUUM, ANALYZE๋ฅผ ํ์ฉํ์ฌ ์๋ ์ ์ง๋ณด์
โ
pg_stat_statements, Prometheus, Grafana๋ก ์ค์๊ฐ ๋ชจ๋ํฐ๋ง
โ
์ฅ์ ๋ฐ์ ์ pg_wal ์ ๋ฆฌ ๋ฐ pg_repack์ ํ์ฉํ ๋ฐ์ดํฐ ๋ณต๊ตฌ
โ
๋ณด์ ์
๋ฐ์ดํธ ๋ฐ ํจ์น๋ฅผ ์ฃผ๊ธฐ์ ์ผ๋ก ์ํ
์ด์ PostgreSQL ์ด์ ํ๊ฒฝ์ ์์ ์ ์ผ๋ก ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์ตํ์ต๋๋ค!
๋ค์ ๊ธ์์๋ PostgreSQL ์ต์ ๋ํฅ ๋ฐ ๋ฏธ๋ ์ ๋ง์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ๐
๐ ๋ค์ ๊ธ ์๊ณ : PostgreSQL ์ต์ ๋ํฅ ๋ฐ ๋ฏธ๋ ์ ๋ง
๐ ๋ค์ ํธ: 6.1 PostgreSQL ์ต์ ๋ํฅ ๋ฐ ๋ฏธ๋ ์ ๋ง
์ด์ PostgreSQL์ ์ด์ ๋ฐ ์ ์ง๋ณด์ ์ ๋ต์ ๋ํ ๊ธ์ด ์์ฑ๋์์ต๋๋ค!
๋ค์ ๊ธ์์๋ PostgreSQL ์ต์ ๋ํฅ ๋ฐ ๋ฏธ๋ ์ ๋ง์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค. ๐๐
'study > postgresql' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
- Total
- Today
- Yesterday
- AI ์๋ํ
- seo ์ต์ ํ 10๊ฐ
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- App Router
- AI์ฑ๋ด
- ํ๋ก ํธ์๋
- SEO์ต์ ํ
- ๋ฐฑ์๋๊ฐ๋ฐ
- NestJS
- ์น๊ฐ๋ฐ
- ๋ฐฑ์๋
- nodejs
- Webpack
- Prisma
- Next.js
- kotlin
- github
- ์ค๋งํธ ์ปจํธ๋ํธ
- REACT
- llm
- LangChain
- rag
- Docker
- ๊ด๋ฆฌ์
- Ktor
- nextJS
- PostgreSQL
- fastapi
- CI/CD
- gatsbyjs
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |