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

๋ฐ˜์‘ํ˜•

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

2.3 ํŠธ๋žœ์žญ์…˜๊ณผ ๋™์‹œ์„ฑ ์ œ์–ด

PostgreSQL์€ ACID(Atomicity, Consistency, Isolation, Durability) ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•˜๋ฉฐ,
MVCC(Multi-Version Concurrency Control, ๋‹ค์ค‘ ๋ฒ„์ „ ๋™์‹œ์„ฑ ์ œ์–ด) ๋ฅผ ํ†ตํ•ด ๋™์‹œ์„ฑ ์ฒ˜๋ฆฌ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜(Transaction)์˜ ๊ฐœ๋…๊ณผ PostgreSQL์˜ ๋™์‹œ์„ฑ ์ œ์–ด ๋ฐฉ์‹์„ ์ƒ์„ธํžˆ ์•Œ์•„๋ณด๊ณ ,
ํŠธ๋žœ์žญ์…˜์„ ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


2.3.1 ํŠธ๋žœ์žญ์…˜(Transaction) ๊ฐœ์š”

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

โœ… ACID ํŠธ๋žœ์žญ์…˜ ํŠน์„ฑ

ํŠน์„ฑ ์„ค๋ช…

Atomicity (์›์ž์„ฑ) ํŠธ๋žœ์žญ์…˜ ๋‚ด์˜ ๋ชจ๋“  ์ž‘์—…์ด ์™„๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ „ํ˜€ ์‹คํ–‰๋˜์ง€ ์•Š์•„์•ผ ํ•จ
Consistency (์ผ๊ด€์„ฑ) ํŠธ๋žœ์žญ์…˜์ด ์™„๋ฃŒ๋œ ํ›„์—๋„ ๋ฐ์ดํ„ฐ๋Š” ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ ์œ ์ง€
Isolation (๊ณ ๋ฆฝ์„ฑ) ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํŠธ๋žœ์žญ์…˜์€ ์„œ๋กœ ๊ฐ„์„ญํ•˜์ง€ ์•Š๋„๋ก ๊ฒฉ๋ฆฌ
Durability (์ง€์†์„ฑ) ํŠธ๋žœ์žญ์…˜์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜๋ฉด ๋ฐ์ดํ„ฐ๋Š” ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅ๋จ

2.3.2 PostgreSQL์—์„œ ํŠธ๋žœ์žญ์…˜ ์‚ฌ์šฉํ•˜๊ธฐ

๋ฐ˜์‘ํ˜•

PostgreSQL์—์„œ๋Š” BEGIN, COMMIT, ROLLBACK์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”น ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ (BEGIN)

BEGIN;

ํŠธ๋žœ์žญ์…˜์ด ์‹œ์ž‘๋˜๋ฉฐ, ์ดํ›„ ์‹คํ–‰๋˜๋Š” ๋ชจ๋“  SQL ๋ฌธ์ด ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์ž…๋‹ˆ๋‹ค.

๐Ÿ”น ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹ (COMMIT)

COMMIT;

ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์‹คํ–‰๋œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ™•์ •(์ €์žฅ) ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ (ROLLBACK)

ROLLBACK;

ํŠธ๋žœ์žญ์…˜ ๋‚ด์—์„œ ์‹คํ–‰๋œ ๋ชจ๋“  ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ทจ์†Œ(๋˜๋Œ๋ฆผ) ํ•ฉ๋‹ˆ๋‹ค.


2.3.3 ํŠธ๋žœ์žญ์…˜ ์‹ค์Šต ์˜ˆ์ œ

๐Ÿ”น ํŠธ๋žœ์žญ์…˜์„ ํ™œ์šฉํ•œ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…

BEGIN;

INSERT INTO users (name, email, age) VALUES ('Alice', 'alice@example.com', 25);
INSERT INTO users (name, email, age) VALUES ('Bob', 'bob@example.com', 30);

COMMIT;

โœ… ๋‘ ๊ฐœ์˜ INSERT ๋ฌธ์ด ํ•˜๋‚˜์˜ ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ์ด๋ฉฐ, COMMIT ์‹คํ–‰ ํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ”น ํŠธ๋žœ์žญ์…˜ ๋กค๋ฐฑ ์˜ˆ์ œ

BEGIN;

INSERT INTO users (name, email, age) VALUES ('Charlie', 'charlie@example.com', 20);
INSERT INTO users (name, email, age) VALUES ('David', 'david@example.com', 17);

ROLLBACK;

โœ… ROLLBACK ์‹คํ–‰ ์‹œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ฝ์ž…์ด ์ทจ์†Œ๋ฉ๋‹ˆ๋‹ค.
(์˜ˆ์ œ์—์„œ David์˜ ๋‚˜์ด๊ฐ€ 18์„ธ ์ด์ƒ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜์ง€ ๋ชปํ•ด CHECK ์ œ์•ฝ ์กฐ๊ฑด์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ์ „์ฒด ํŠธ๋žœ์žญ์…˜์ด ๋ฌดํšจํ™”๋ฉ๋‹ˆ๋‹ค.)


2.3.4 ํŠธ๋žœ์žญ์…˜ ์ €์žฅ์  (SAVEPOINT) ์‚ฌ์šฉํ•˜๊ธฐ

PostgreSQL์—์„œ๋Š” ํŠธ๋žœ์žญ์…˜ ์ค‘๊ฐ„์— ์ €์žฅ์ (SAVEPOINT)์„ ์„ค์ •ํ•˜์—ฌ ๋ถ€๋ถ„์ ์œผ๋กœ ๋กค๋ฐฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”น SAVEPOINT๋ฅผ ํ™œ์šฉํ•œ ๋ถ€๋ถ„ ๋กค๋ฐฑ ์˜ˆ์ œ

BEGIN;

INSERT INTO users (name, email, age) VALUES ('Eve', 'eve@example.com', 28);
SAVEPOINT my_savepoint;  -- ์ €์žฅ์  ์„ค์ •

INSERT INTO users (name, email, age) VALUES ('Frank', 'frank@example.com', 22);

ROLLBACK TO my_savepoint;  -- `Frank` ๋ฐ์ดํ„ฐ๋งŒ ๋กค๋ฐฑ๋จ

COMMIT;  -- `Eve` ๋ฐ์ดํ„ฐ๋Š” ์ •์ƒ์ ์œผ๋กœ ์ €์žฅ๋จ

โœ… ROLLBACK TO my_savepoint๋ฅผ ์‹คํ–‰ํ•˜๋ฉด Frank๋งŒ ๋กค๋ฐฑ๋˜๊ณ  Eve๋Š” ์ €์žฅ๋จ


2.3.5 ๋™์‹œ์„ฑ ์ œ์–ด์™€ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ (Isolation Level)

PostgreSQL์€ MVCC(Multi-Version Concurrency Control, ๋‹ค์ค‘ ๋ฒ„์ „ ๋™์‹œ์„ฑ ์ œ์–ด) ๋ฅผ ์ง€์›ํ•˜์—ฌ,
ํŠธ๋žœ์žญ์…˜ ๊ฐ„ ์ถฉ๋Œ์„ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

MVCC๋Š” ๊ฐ ํŠธ๋žœ์žญ์…˜์ด ์‹คํ–‰๋  ๋•Œ ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ณ„๋„์˜ ๋ฒ„์ „์œผ๋กœ ์œ ์ง€ํ•˜๋ฏ€๋กœ,
ํ•œ ํŠธ๋žœ์žญ์…˜์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€๊ฒฝํ•ด๋„ ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์ด ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

โœ… PostgreSQL์˜ ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€

๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์„ค๋ช…

READ COMMITTED ๊ธฐ๋ณธ ๊ฐ’. ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ COMMIT ๋œ ๋ฐ์ดํ„ฐ๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Œ
REPEATABLE READ ํŠธ๋žœ์žญ์…˜ ์‹œ์ž‘ ์‹œ์ ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ณด์ด์ง€ ์•Š์Œ
SERIALIZABLE ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€. ์™„์ „ํ•œ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜์ง€๋งŒ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์Œ

๐Ÿ”น ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์„ค์ •ํ•˜๊ธฐ

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;

โœ… ํ˜„์žฌ ํŠธ๋žœ์žญ์…˜์˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€์„ REPEATABLE READ๋กœ ๋ณ€๊ฒฝ


2.3.6 ํŠธ๋žœ์žญ์…˜ ์ถฉ๋Œ ๋ฐ Deadlock ํ•ด๊ฒฐ

ํŠธ๋žœ์žญ์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ๋•Œ, ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์ถฉ๋Œํ•  ๊ฒฝ์šฐ PostgreSQL์€ ์ž๋™์œผ๋กœ ํ•ด๊ฒฐ์„ ์‹œ๋„ํ•˜์ง€๋งŒ,
์ผ๋ถ€ ๊ฒฝ์šฐ Deadlock(๊ต์ฐฉ ์ƒํƒœ) ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ”น Deadlock ์˜ˆ์ œ

-- ํŠธ๋žœ์žญ์…˜ 1
BEGIN;
UPDATE users SET age = 30 WHERE id = 1;
-- (์ž ๊น€) 

-- ํŠธ๋žœ์žญ์…˜ 2 (๋™์‹œ์— ์‹คํ–‰)
BEGIN;
UPDATE users SET age = 35 WHERE id = 1;
-- ํŠธ๋žœ์žญ์…˜ 1์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ ์ƒํƒœ ๋ฐœ์ƒ

๐Ÿ”น Deadlock ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

1๏ธโƒฃ ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ˆœ์„œ ์กฐ์ •
2๏ธโƒฃ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ ์กฐ์ • (READ COMMITTED → REPEATABLE READ)
3๏ธโƒฃ ํŠธ๋žœ์žญ์…˜ ํƒ€์ž„์•„์›ƒ ์„ค์ • (LOCK TIMEOUT)

SET lock_timeout = '5s';

2.3.7 ๊ฒฐ๋ก : ํŠธ๋žœ์žญ์…˜๊ณผ ๋™์‹œ์„ฑ ๊ด€๋ฆฌ ์ตœ์ ํ™”

โœ… PostgreSQL์€ ACID ํŠธ๋žœ์žญ์…˜์„ ์™„๋ฒฝ ์ง€์›ํ•˜๋ฉฐ, BEGIN, COMMIT, ROLLBACK์„ ํ™œ์šฉํ•˜์—ฌ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ
โœ… SAVEPOINT๋ฅผ ์ด์šฉํ•˜๋ฉด ํŠธ๋žœ์žญ์…˜์˜ ์ผ๋ถ€๋งŒ ๋กค๋ฐฑ ๊ฐ€๋Šฅ
โœ… MVCC(Multi-Version Concurrency Control) ๋ฅผ ํ†ตํ•ด ๋™์‹œ์„ฑ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”
โœ… ํŠธ๋žœ์žญ์…˜ ๊ฒฉ๋ฆฌ ์ˆ˜์ค€ (Isolation Level) ์„ ์กฐ์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ ์œ ์ง€ ๊ฐ€๋Šฅ
โœ… Deadlock์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ํŠธ๋žœ์žญ์…˜ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์กฐ์ •ํ•˜๊ณ  Lock Timeout์„ ์„ค์ •ํ•ด์•ผ ํ•จ

์ด์ œ PostgreSQL์—์„œ ํŠธ๋žœ์žญ์…˜์„ ํšจ๊ณผ์ ์œผ๋กœ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค!
๋‹ค์Œ ๊ธ€์—์„œ๋Š” ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€


๐Ÿ”Ž ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ : PostgreSQL ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ

๐Ÿ“Œ ๋‹ค์Œ ํŽธ: 3.1 PostgreSQL ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ์ „๋žต


์ด์ œ PostgreSQL์˜ ํŠธ๋žœ์žญ์…˜๊ณผ ๋™์‹œ์„ฑ ์ œ์–ด์— ๋Œ€ํ•œ ๊ธ€์ด ์™„์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!
๋‹ค์Œ ๊ธ€์—์„œ๋Š” PostgreSQL ๋ฐฑ์—… ๋ฐ ๋ณต๊ตฌ ์ „๋žต์„ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค. ๐Ÿš€๐Ÿ˜Š

๋ฐ˜์‘ํ˜•
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
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
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•