ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต

6.4 PostgreSQL ์‹ค๋ฌด Q&A ๋ฐ ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ

PostgreSQL์„ ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์™€ ์˜ค๋ฅ˜๋ฅผ ๋งˆ์ฃผํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ ๊ธ€์—์„œ๋Š” PostgreSQL ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ ์งˆ๋ฌธ๊ณผ ๋‹ต๋ณ€์„ ํ†ตํ•ด PostgreSQL ์šด์˜ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ฃผ์š” ์ด์Šˆ๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€


6.4.1 PostgreSQL ์„ค์น˜ ๋ฐ ์ดˆ๊ธฐ ์„ค์ • ๋ฌธ์ œ ํ•ด๊ฒฐ

Q1. PostgreSQL์ด ์ •์ƒ์ ์œผ๋กœ ์„ค์น˜๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (Ubuntu/Debian)

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ ํ›„ ์„ค์น˜

sudo apt update && sudo apt install postgresql postgresql-contrib

2๏ธโƒฃ ์„œ๋น„์Šค ์‹œ์ž‘ ํ™•์ธ

sudo systemctl start postgresql
sudo systemctl enable postgresql

3๏ธโƒฃ PostgreSQL ์ƒํƒœ ํ™•์ธ

sudo systemctl status postgresql

Q2. psql ์ ‘์† ์˜ค๋ฅ˜ (FATAL: role "postgres" does not exist)

๋ฐ˜์‘ํ˜•

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

sudo -u postgres psql

โœ… postgres ๊ธฐ๋ณธ ๊ณ„์ •์ด ์—†๋‹ค๋ฉด, ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์ƒˆ๋กœ ์ƒ์„ฑ

sudo -u postgres createuser --interactive

6.4.2 PostgreSQL ์ ‘๊ทผ ๋ฐ ์ธ์ฆ ๋ฌธ์ œ ํ•ด๊ฒฐ

Q3. ์›๊ฒฉ ์ ‘์†์ด ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ (pg_hba.conf ์„ค์ • ์˜ค๋ฅ˜)

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ PostgreSQL ์„ค์ • ํŒŒ์ผ ์ˆ˜์ • (pg_hba.conf)

sudo nano /etc/postgresql/17/main/pg_hba.conf

โœ… ๋‹ค์Œ ์ค„ ์ถ”๊ฐ€ (IP ์ฃผ์†Œ๋ฅผ ์›๊ฒฉ ์ ‘์† ํ—ˆ์šฉํ•˜๋„๋ก ๋ณ€๊ฒฝ)

host    all             all             0.0.0.0/0               scram-sha-256

โœ… PostgreSQL ์„ค์ • ๋ฐ˜์˜

sudo systemctl restart postgresql

Q4. FATAL: password authentication failed for user "postgres" ์˜ค๋ฅ˜ ๋ฐœ์ƒ

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ PostgreSQL ๋‚ด๋ถ€์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ

ALTER USER postgres WITH PASSWORD '์ƒˆ๋กœ์šด_๋น„๋ฐ€๋ฒˆํ˜ธ';

2๏ธโƒฃ PostgreSQL ์ธ์ฆ ๋ฐฉ์‹์„ scram-sha-256์œผ๋กœ ๋ณ€๊ฒฝ (postgresql.conf)

password_encryption = scram-sha-256

6.4.3 PostgreSQL ์„ฑ๋Šฅ ๋ฌธ์ œ ํ•ด๊ฒฐ

Q5. ์ฟผ๋ฆฌ๊ฐ€ ๋„ˆ๋ฌด ๋Š๋ ค์ง€๋Š” ๊ฒฝ์šฐ (EXPLAIN ANALYZE ํ™œ์šฉ)

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ EXPLAIN ANALYZE ์‹คํ–‰

EXPLAIN ANALYZE SELECT * FROM users WHERE email = 'test@example.com';

2๏ธโƒฃ Seq Scan(์ˆœ์ฐจ ๊ฒ€์ƒ‰)์ด๋ผ๋ฉด ์ธ๋ฑ์Šค ์ƒ์„ฑ

CREATE INDEX idx_users_email ON users(email);

โœ… ์ธ๋ฑ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๊ฒ€์ƒ‰ ์†๋„๊ฐ€ ํฌ๊ฒŒ ํ–ฅ์ƒ๋จ

Q6. ํ…Œ์ด๋ธ”์ด ๋„ˆ๋ฌด ์ปค์ ธ์„œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋˜๋Š” ๊ฒฝ์šฐ (VACUUM ์‚ฌ์šฉ)

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ VACUUM FULL ์‹คํ–‰ํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๊ณต๊ฐ„ ์ •๋ฆฌ

VACUUM FULL;

2๏ธโƒฃ ANALYZE ์‹คํ–‰ํ•˜์—ฌ ์ตœ์‹  ํ†ต๊ณ„ ๋ฐ˜์˜

ANALYZE;

Q7. pg_stat_statements๋กœ ๋Š๋ฆฐ ์ฟผ๋ฆฌ ์ฐพ๊ธฐ

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ pg_stat_statements ํ™•์žฅ ๋ชจ๋“ˆ ํ™œ์„ฑํ™”

CREATE EXTENSION pg_stat_statements;

2๏ธโƒฃ ๊ฐ€์žฅ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๊ธด ์ฟผ๋ฆฌ ์กฐํšŒ

SELECT query, total_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;

6.4.4 ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐ ๋ณต๊ตฌ ๋ฌธ์ œ ํ•ด๊ฒฐ

Q8. DROP TABLE์„ ์‹ค์ˆ˜๋กœ ์‹คํ–‰ํ•œ ๊ฒฝ์šฐ (PITR ๋ณต๊ตฌ)

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ ๋ฐฑ์—…(pg_basebackup)์—์„œ ๋ณต์›
2๏ธโƒฃ WAL ๋กœ๊ทธ(Point-In-Time Recovery)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์‹œ์ ์œผ๋กœ ๋ณต๊ตฌ

restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'
recovery_target_time = '2025-03-07 12:00:00'

โœ… ํŠน์ • ์‹œ์ ์œผ๋กœ ๋ณต๊ตฌ ๊ฐ€๋Šฅ (PITR)

Q9. UPDATE๋‚˜ DELETE ์‹คํ–‰ ํ›„ ๋กค๋ฐฑํ•˜๋Š” ๋ฐฉ๋ฒ•

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

BEGIN;
UPDATE users SET email = 'wrong@example.com' WHERE id = 1;
ROLLBACK;

โœ… ROLLBACK์„ ์‹คํ–‰ํ•˜๋ฉด ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ์ทจ์†Œ๋จ


6.4.5 ํ™•์žฅ ๊ธฐ๋Šฅ ๋ฐ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ ๋ฌธ์ œ ํ•ด๊ฒฐ

Q10. pgvector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰์ด ๋Š๋ ค์ง€๋Š” ๊ฒฝ์šฐ

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ HNSW ์ธ๋ฑ์Šค ์ถ”๊ฐ€

CREATE INDEX ON embeddings USING hnsw (embedding);

โœ… AI ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ์†๋„ ์ตœ์ ํ™”

Q11. PostgreSQL์—์„œ ๋Œ€์šฉ๋Ÿ‰ JSON ๋ฐ์ดํ„ฐ๊ฐ€ ๋Š๋ ค์ง€๋Š” ๊ฒฝ์šฐ

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ JSONB ํ•„๋“œ์— GIN ์ธ๋ฑ์Šค ์ถ”๊ฐ€

CREATE INDEX idx_jsonb_data ON users USING GIN (data);

โœ… JSON ๊ฒ€์ƒ‰ ์†๋„๋ฅผ ๋Œ€ํญ ํ–ฅ์ƒ


6.4.6 PostgreSQL ์žฅ์•  ๋ฐ ์„œ๋ฒ„ ๋ฌธ์ œ ํ•ด๊ฒฐ

Q12. PostgreSQL ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘๋‹จ๋œ ๊ฒฝ์šฐ (pg_ctl ์‚ฌ์šฉ)

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:

pg_ctl restart -D /var/lib/postgresql/data

โœ… PostgreSQL ์„œ๋น„์Šค ๊ฐ•์ œ ์žฌ์‹œ์ž‘

Q13. ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋ถ€์กฑ (pg_wal ๋กœ๊ทธ๊ฐ€ ๋„ˆ๋ฌด ์ปค์ง„ ๊ฒฝ์šฐ)

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
1๏ธโƒฃ ๋ถˆํ•„์š”ํ•œ WAL ๋กœ๊ทธ ์‚ญ์ œ

rm -rf /var/lib/postgresql/pg_wal/archive/*

2๏ธโƒฃ PostgreSQL ์„ค์ • ๋ณ€๊ฒฝ (postgresql.conf)

wal_keep_size = 512MB

โœ… WAL ๋กœ๊ทธ ํฌ๊ธฐ๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ๋””์Šคํฌ ์šฉ๋Ÿ‰ ์ ˆ์•ฝ


6.4.7 PostgreSQL ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€์ด๋“œ ์š”์•ฝ

โœ… ์„ค์น˜ ๋ฐ ์ ‘๊ทผ ๋ฌธ์ œ: pg_hba.conf, postgresql.conf ์„ค์ • ํ™•์ธ
โœ… ์ธ์ฆ ์˜ค๋ฅ˜ ํ•ด๊ฒฐ: ALTER USER postgres WITH PASSWORD ์‚ฌ์šฉ
โœ… ์ฟผ๋ฆฌ ์„ฑ๋Šฅ ๋ฌธ์ œ: EXPLAIN ANALYZE, ์ธ๋ฑ์Šค ์ตœ์ ํ™”
โœ… ๋ฐ์ดํ„ฐ ์†์‹ค ๋ฐ ๋ณต๊ตฌ: PITR, ROLLBACK, pg_basebackup ํ™œ์šฉ
โœ… ํ™•์žฅ ๊ธฐ๋Šฅ ๋ฌธ์ œ: pgvector, GIN Index, Foreign Data Wrapper(FDW) ์ตœ์ ํ™”
โœ… ์„œ๋ฒ„ ์žฅ์•  ํ•ด๊ฒฐ: pg_ctl restart, pg_wal ์ •๋ฆฌ


6.4.8 ๊ฒฐ๋ก : PostgreSQL ์‹ค๋ฌด ๋ฌธ์ œ ํ•ด๊ฒฐ ํ•ต์‹ฌ ์ •๋ฆฌ

โœ… PostgreSQL ์„ค์น˜ ๋ฐ ์›๊ฒฉ ์ ‘์† ์˜ค๋ฅ˜ ํ•ด๊ฒฐ
โœ… ์ฟผ๋ฆฌ ์†๋„ ์ €ํ•˜ ๋ฌธ์ œ ํ•ด๊ฒฐ (EXPLAIN ANALYZE ํ™œ์šฉ)
โœ… ๋ฐ์ดํ„ฐ ์†์‹ค ๋Œ€๋น„ ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ์ „๋žต (PITR, pg_basebackup)
โœ… ๋Œ€์šฉ๋Ÿ‰ JSON ๋ฐ์ดํ„ฐ ์ตœ์ ํ™” (GIN Index ํ™œ์šฉ)
โœ… ์„œ๋ฒ„ ์žฅ์•  ๋ฐ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฌธ์ œ ํ•ด๊ฒฐ (VACUUM, pg_stat_statements)

์ด์ œ PostgreSQL ์šด์˜ ์ค‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค!
PostgreSQL์„ ๋”์šฑ ์•ˆ์ •์ ์œผ๋กœ ์šด์˜ํ•ด ๋ณด์„ธ์š”. ๐Ÿš€


๐Ÿ”Ž ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ : PostgreSQL ์ตœ์ข… ๋งˆ๋ฌด๋ฆฌ ๋ฐ ์ถ”๊ฐ€ ํ•™์Šต ๋ฆฌ์†Œ์Šค

๐Ÿ“Œ ๋‹ค์Œ ํŽธ: 6.5 PostgreSQL ์ตœ์ข… ๋งˆ๋ฌด๋ฆฌ ๋ฐ ์ถ”๊ฐ€ ํ•™์Šต ๋ฆฌ์†Œ์Šค


์ด์ œ PostgreSQL ์‹ค๋ฌด์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๊นŒ์ง€ ์™„๋ฒฝ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค!
๋‹ค์Œ ๊ธ€์—์„œ๋Š” PostgreSQL ํ•™์Šต์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ์ถ”๊ฐ€๋กœ ๊ณต๋ถ€ํ•  ๋ฆฌ์†Œ์Šค๋ฅผ ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€๐Ÿ˜Š

๋ฐ˜์‘ํ˜•

'study > postgresql' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต - PostgreSQL ์ตœ์ข… ๋งˆ๋ฌด๋ฆฌ ๋ฐ ์ถ”๊ฐ€ ํ•™์Šต ๋ฆฌ์†Œ์Šค  (0) 2025.03.10
๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต - PostgreSQL ์‹ฌํ™” ์ฃผ์ œ ๋ฐ ์ตœ์ ํ™” ํŒ ๋ชจ์Œ  (0) 2025.03.10
๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต - PostgreSQL ํ™œ์šฉ์„ ์œ„ํ•œ ์‹ค์ „ ๊ฐ€์ด๋“œ  (0) 2025.03.10
๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต - PostgreSQL ์ตœ์‹  ๋™ํ–ฅ ๋ฐ ๋ฏธ๋ž˜ ์ „๋ง  (0) 2025.03.10
๐Ÿ“Œ PostgreSQL๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ: ์ด๋ก ๊ณผ ์‹ค์Šต - PostgreSQL ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜ ์ „๋žต  (0) 2025.03.10
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2025/03   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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 31
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•