PostgreSQL ๋ฐ ์—ฐ๊ฒฐ๋ณ„ ์“ฐ๊ธฐ ์ผ๊ด€์„ฑ ์„ค์ •

์ด ๊ธฐ์‚ฌ์˜ ๋ฒˆ์—ญ์€ ์ฝ”์Šค์˜ ํ•™์ƒ๋“ค์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค". ์ด ๋ฐฉํ–ฅ์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š” ๋ฐ ๊ด€์‹ฌ์ด ์žˆ์œผ์‹ญ๋‹ˆ๊นŒ? ์šฐ๋ฆฌ๋Š” ๋‹น์‹ ์„ ์ดˆ๋Œ€ํ•ฉ๋‹ˆ๋‹ค ์˜คํ”ˆ๋ฐ์ด, ํ”„๋กœ๊ทธ๋žจ, ์˜จ๋ผ์ธ ํ˜•์‹์˜ ๊ธฐ๋Šฅ, ๊ต์œก ํ›„ ์กธ์—…์ƒ์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์—ญ๋Ÿ‰ ๋ฐ ๊ฒฝ๋ ฅ ์ „๋ง์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

PostgreSQL ๋ฐ ์—ฐ๊ฒฐ๋ณ„ ์“ฐ๊ธฐ ์ผ๊ด€์„ฑ ์„ค์ •

PostgreSQL ๋ฐ ์—ฐ๊ฒฐ๋ณ„ ์“ฐ๊ธฐ ์ผ๊ด€์„ฑ ์„ค์ •
Compose์—์„œ๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋‹ค๋ฃจ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋Šฅ๊ณผ ๋‹จ์ ์— ๋” ์ต์ˆ™ํ•ด์งˆ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ๋ž‘ํ•˜๋Š” ๋ฒ•์„ ๋ฐฐ์šฐ๋ฉด์„œ ์šฐ๋ฆฌ๋Š” ์˜ค๋žซ๋™์•ˆ ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•ด ์˜จ ๋ณด๋‹ค ์„ฑ์ˆ™ํ•œ ๋„๊ตฌ์— ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์ด ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ ์ƒ๊ฐํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. PostgreSQL์—์„œ ๋ณด๊ณ  ์‹ถ์—ˆ๋˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์— ๊ฑธ์ณ ์—ฐ๊ฒฐ๋ณ„๋กœ ๊ตฌ์„ฑ ๊ฐ€๋Šฅํ•œ ์“ฐ๊ธฐ ์ผ๊ด€์„ฑ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๊ทธ๊ฒƒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ์˜ค๋Š˜์€ ๊ทธ๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์™œ ๋‚ด๊ฐ€ ๊ทธ๊ฒƒ์„ ํ•„์š”๋กœํ•ฉ๋‹ˆ๊นŒ?

ํด๋Ÿฌ์Šคํ„ฐ์˜ ์ž‘๋™ ๋ฐฉ์‹์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ฒญ๊ตฌ์„œ ๊ฒฐ์ œ ์•ฑ์„ ์ƒ๊ฐํ•ด ๋ณด์„ธ์š”. ํด๋Ÿฌ์Šคํ„ฐ ์ „๋ฐ˜์— ๊ฑธ์ณ XNUMX% ์ผ๊ด€์„ฑ์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ชจ๋“  ๋ณ€๊ฒฝ์ด ์ด๋ฃจ์–ด์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ๋™๊ธฐ ์ปค๋ฐ‹์„ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ท€ํ•˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋น ๋ฅด๊ฒŒ ์„ฑ์žฅํ•˜๋Š” ์†Œ์…œ ๋„คํŠธ์›Œํฌ๋ผ๋ฉด ์•„๋งˆ๋„ XNUMX% ์ผ๊ด€์„ฑ๋ณด๋‹ค ๋น ๋ฅธ ์‘๋‹ต์„ ์„ ํ˜ธํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋น„๋™๊ธฐ ์ปค๋ฐ‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํƒ€ํ˜‘์„ ๋งŒ๋‚˜๋‹ค

๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ์„ฑ๋Šฅ ๊ฐ„์— ๊ท ํ˜•์„ ๋งž์ถฐ์•ผ ํ•ฉ๋‹ˆ๋‹ค. PostgreSQL์€ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์ด ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๊ณ  ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ผ๊ด€์„ฑ์—์„œ ๋ฉ€์–ด์ง‘๋‹ˆ๋‹ค. ์ด์ œ ํƒ€ํ˜‘์•ˆ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ ˆ์ถฉ์•ˆ 1: ์„ฑ๋Šฅ

PostgreSQL ํด๋Ÿฌ์Šคํ„ฐ์— ์ผ๊ด€์„ฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์“ฐ๊ธฐ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ๋”์— ์ด๋ฃจ์–ด์ง€๋ฉฐ ์—…๋ฐ์ดํŠธ๋Š” ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ ํ›„์— ๋ณต์ œ๋ณธ์œผ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค. PostgreSQL ํด๋Ÿฌ์Šคํ„ฐ์— ์ผ๊ด€์„ฑ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋™๊ธฐ์‹์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์“ฐ๊ธฐ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ๋”์—๊ฒŒ ์ด๋ฃจ์–ด์ง€๋ฉฐ, ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ๋”๋Š” ๋ณต์ œ๋ณธ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ณด๋‚ด๊ณ  ์“ฐ๊ธฐ๊ฐ€ ์„ฑ๊ณตํ–ˆ๋‹ค๋Š” ํ™•์ธ์„ ์“ฐ๊ธฐ๋ฅผ ์‹œ์ž‘ํ•œ ํด๋ผ์ด์–ธํŠธ์— ๋ณด๋‚ด๊ธฐ ์ „์— ๊ฐ ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ํ™•์ธ์„ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์˜ ์‹ค์งˆ์ ์ธ ์ฐจ์ด์ ์€ ๋น„๋™๊ธฐ์‹ ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐœ์˜ ๋„คํŠธ์›Œํฌ ํ™‰์ด ํ•„์š”ํ•œ ๋ฐ˜๋ฉด ๋™๊ธฐ์‹ ๋ฐฉ๋ฒ•์—๋Š” ๋„ค ๊ฐœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ ˆ์ถฉ์•ˆ 2: ์ผ๊ด€์„ฑ

์ด ๋‘ ๊ฐ€์ง€ ์ ‘๊ทผ ๋ฐฉ์‹์—์„œ ๋ฆฌ๋”๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๋„ ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค. ์ž‘์—…์ด ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ณต์ œ๋ณธ์ด ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ผ๋งˆ๋‚˜ ์†์‹ค๋  ๊ฒƒ์ธ๊ฐ€? ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ž์ฒด์™€ ๋ณต์ œ ํšจ์œจ์„ฑ์— ๋”ฐ๋ผ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. Compose ๋ณต์ œ๋Š” ์ •๋ณด์˜ ์–‘์ด ๋ฆฌ๋”๋ณด๋‹ค 1MB ์ ์€ ๊ฒฝ์šฐ ๋ณต์ œ๋ณธ์ด ๋ฆฌ๋”๊ฐ€ ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋น„๋™๊ธฐ ์ž‘์—… ์ค‘์— ์ตœ๋Œ€ 1MB์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ์ž ์žฌ์ ์œผ๋กœ ์†์‹ค๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ๋™๊ธฐ ๋ชจ๋“œ์—์„œ๋Š” ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋”์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ฆฌ๋”์—์„œ ํ™•์ธ๋œ ๋ชจ๋“  ์“ฐ๊ธฐ๊ฐ€ ๋ณต์ œ๋ณธ์—์„œ ํ™•์ธ๋˜์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ชจ๋“  ๋ณต์ œ๋ณธ์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ์ผ๊ด€์„ฑ์ž…๋‹ˆ๋‹ค.

์ผ๊ด€์„ฑ๊ณผ ์„ฑ๋Šฅ ๊ฐ„์˜ ๊ท ํ˜•์—์„œ ์ผ๊ด€์„ฑ์ด ๋ถ„๋ช…ํ•œ ์ด์ ์„ ๊ฐ–๋Š” ์ฒญ๊ตฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋™๊ธฐ์‹ ๋™์ž‘์ด ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์œ ํšจํ•œ ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. ์ด์ œ ๊ฐ€๋Šฅํ•œ ํ•œ ๋นจ๋ฆฌ ์š”์ฒญ์— ์‘๋‹ตํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ๊ด€์‹ฌ์„ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ์ž„๋ฌด์ธ ์†Œ์…œ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค. ์ด ๊ฒฝ์šฐ ๋„คํŠธ์›Œํฌ ํ™‰ ์ˆ˜๊ฐ€ ์ ๊ณ  ์ปค๋ฐ‹ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์ ์€ ์„ฑ๋Šฅ์ด ์šฐ์„ ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์„ฑ๋Šฅ๊ณผ ์ผ๊ด€์„ฑ ์‚ฌ์ด์˜ ๊ท ํ˜•์„ ์ƒ๊ฐํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

์ ˆ์ถฉ์  3: ์ถฉ๋Œ

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

ํŠธ๋žœ์žญ์…˜ ๋‹น ํ•˜๋‚˜์˜ ์—ฐ๊ฒฐ?

๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ์ผ๊ด€์„ฑ๊ณผ ์„ฑ๋Šฅ์˜ ๋‹ค์–‘ํ•œ ์กฐํ•ฉ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์™„์ „ํžˆ ์ผ๊ด€์ ์ด๋ผ๊ณ  ์ƒ๊ฐ๋˜๋Š” ์ฒญ๊ตฌ์„œ ์ง€๋ถˆ ์•ฑ์ด๋‚˜ ๊ฑฐ์˜ ์ผ์‹œ์ ์ธ ์†Œ์…œ ๋„คํŠธ์›Œํ‚น ์•ฑ์ด ์•„๋‹ˆ๋ผ๋ฉด ๋ง์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  ๊ฒฝ์šฐ์—๋Š” ์ผ๋ถ€ ์ž‘์—…์€ ๋™๊ธฐ์‹์ด์–ด์•ผ ํ•˜๊ณ  ์ผ๋ถ€ ์ž‘์—…์€ ๋น„๋™๊ธฐ์‹์ด์–ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฑ„ํŒ…์— ์ „์†ก๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์ปค๋ฐ‹๋  ๋•Œ๊นŒ์ง€ ์‹œ์Šคํ…œ์ด ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ธฐ๋ฅผ ์›ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๋™์ผํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ฒฐ์ œ๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒฝ์šฐ ๊ธฐ๋‹ค๋ ค์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ฒฐ์ •์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‚ด๋ฆฝ๋‹ˆ๋‹ค. ๊ฐ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์–ธ์ œ ์‚ฌ์šฉํ• ์ง€์— ๋Œ€ํ•ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ์ •์„ ๋‚ด๋ฆฌ๋Š” ๊ฒƒ์€ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๊ฐ€ ์—ฐ๊ฒฐ๊ณผ ํŠธ๋žœ์žญ์…˜์„ ์œ„ํ•ด SQL ์ˆ˜์ค€์—์„œ ์ด๋“ค ์‚ฌ์ด๋ฅผ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ๋กœ ์ œ์–ด ๋ณด์žฅ

๊ธฐ๋ณธ์ ์œผ๋กœ PostgreSQL์€ ์ผ๊ด€์„ฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์„œ๋ฒ„ ๋งค๊ฐœ๋ณ€์ˆ˜์— ์˜ํ•ด ์ œ์–ด๋ฉ๋‹ˆ๋‹ค. synchronous_commit. ๊ธฐ๋ณธ์ ์œผ๋กœ ์œ„์น˜์— ์žˆ์Šต๋‹ˆ๋‹ค onํ•˜์ง€๋งŒ ์„ธ ๊ฐ€์ง€ ๋‹ค๋ฅธ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. local, remote_write ๋˜๋Š” off.

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋‹ค์Œ์œผ๋กœ ์„ค์ •ํ•  ๋•Œ off ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ๋„ ๋ชจ๋“  ๋™๊ธฐ ์ปค๋ฐ‹์ด ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. local ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋กœ์ปฌ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ๋™๊ธฐ ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•˜์ง€๋งŒ ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. Remote_write ๋” ๋‚˜์•„๊ฐ€ ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๋Š” ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ด๋ฃจ์–ด์ง€์ง€๋งŒ ๋ณต์ œ๋ณธ์ด ์“ฐ๊ธฐ๋ฅผ ํ—ˆ์šฉํ–ˆ์ง€๋งŒ ๋””์Šคํฌ์— ์“ฐ์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜ ๋ฒ”์œ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ํ–‰๋™์„ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ ์‚ฌํ•ญ์„ ์—ผ๋‘์— ๋‘ก๋‹ˆ๋‹ค. on โ€“ ์ด๊ฒƒ์€ ๋™๊ธฐ์‹ ๋…น์Œ์ด๋ฏ€๋กœ ๋‹ค์Œ์„ ์„ ํƒํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. local ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ์ปค๋ฐ‹์˜ ๊ฒฝ์šฐ ๋กœ์ปฌ ์ปค๋ฐ‹์„ ๋™๊ธฐ ์ƒํƒœ๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ž ์‹œ ํ›„์— ์ด๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. synchronous_commit ะฒ local ์„œ๋ฒ„๋ฅผ ์œ„ํ•ด. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ–ˆ์Šต๋‹ˆ๋‹ค. synchronous_commit ์ฆ‰์„์—์„œ ๊ฐ€๋Šฅํ• ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์—ฐ๊ฒฐ ์„ธ์…˜์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

SET SESSION synchronous_commit TO ON;  
// Your writes go here

์„ธ์…˜์˜ ๋ชจ๋“  ํ›„์† ์“ฐ๊ธฐ๋Š” ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์— ๊ธ์ •์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ๋ณต์ œ๋ณธ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ๋ฅผ ์Šน์ธํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์„ค์ •์„ ๋ฐ”๊พธ์ง€ ์•Š๋Š” ์ด์ƒ synchronous_commit ๋‹ค์‹œ. ๋ถ€๋ถ„์€ ์ƒ๋žตํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค SESSION ๋ช…๋ น์—์„œ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด ๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์€ ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•ด ๋™๊ธฐ์‹ ๋ณต์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์ข‹์Šต๋‹ˆ๋‹ค. ๋งŽ์€ NoSQL ์ƒ์„ฑ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ํŠธ๋žœ์žญ์…˜ ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š์ง€๋งŒ PostgreSQL์—์„œ๋Š” ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜์„ ์‹œ์ž‘ํ•œ ๋‹ค์Œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. synchronous_commit ะฒ on ๊ฑฐ๋ž˜ ํ•ญ๋ชฉ์„ ์‹คํ–‰ํ•˜๊ธฐ ์ „์—. COMMIT ๋งค๊ฐœ๋ณ€์ˆ˜ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋žœ์žญ์…˜์„ ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค. synchronous_commit, ์“ฐ๊ธฐ๊ฐ€ ๋น„๋™๊ธฐ์ ์ด์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์ง€๋งŒ ๋‹น์‹œ์— ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

BEGIN;  
SET LOCAL synchronous_commit TO ON;  
// Your writes go here
COMMIT;  

์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์— ๊ธ์ •์ ์ธ ์‘๋‹ต์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์ „์— ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜ ์ปค๋ฐ‹์ด ๋ณต์ œ๋ณธ์— ๊ธฐ๋ก๋œ ๊ฒƒ์œผ๋กœ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

PostgreSQL ๊ตฌ์„ฑ

์ด์ „์— ์šฐ๋ฆฌ๋Š” PostgreSQL ์‹œ์Šคํ…œ์„ ์ƒ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. synchronous_commit,์— ์„ค์น˜๋จ local. ์„œ๋ฒ„ ์ธก์—์„œ ์ด๋ฅผ ํ˜„์‹ค์ ์œผ๋กœ ๋งŒ๋“ค๋ ค๋ฉด ๋‘ ๊ฐ€์ง€ ์„œ๋ฒ„ ๊ตฌ์„ฑ ์˜ต์…˜์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ๋” ์žˆ์Šต๋‹ˆ๋‹ค. synchronous_standby_names ์–ธ์ œ์ฏค ์ €์ ˆ๋กœ ๋“œ๋Ÿฌ๋‚ ์ง€ synchronous_commit ์—์žˆ์„ ๊ฒƒ์ด๋‹ค on. ๋™๊ธฐ์‹ ์ปค๋ฐ‹์— ์ ํ•ฉํ•œ ๋ณต์ œ๋ณธ์„ ๊ฒฐ์ •ํ•˜๊ณ  ์ด๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. *, ์ด๋Š” ๋ชจ๋“  ๋ณต์ œ๋ณธ์ด ๊ด€๋ จ๋จ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐ’์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ์—์„œ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ํŒŒ์ผ ์ถ”๊ฐ€ํ•˜์—ฌ:

synchronous_commit = local  
synchronous_standby_names='*'

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ synchronous_commit ์˜๋ฏธ์ƒ local, ๋กœ์ปฌ ๋””์Šคํฌ๋Š” ๋™๊ธฐ์‹์œผ๋กœ ์œ ์ง€๋˜์ง€๋งŒ ๋„คํŠธ์›Œํฌ ๋ณต์ œ๋ณธ ์ปค๋ฐ‹์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋น„๋™๊ธฐ์‹์ธ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฌผ๋ก , ์œ„์— ํ‘œ์‹œ๋œ ๊ฒƒ์ฒ˜๋Ÿผ ์ด๋Ÿฌํ•œ ์ปค๋ฐ‹์„ ๋™๊ธฐ์‹์œผ๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์ง€ ์•Š๋Š” ํ•œ.

๊ฐœ๋ฐœ ๊ณผ์ •์„ ๋”ฐ๋ผ์˜ค์…จ๋‹ค๋ฉด ์ง€์‚ฌ ํ”„๋กœ์ ํŠธ, ์ตœ๊ทผ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ํ™•์ธํ•˜์…จ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค(1, 2)๋ฅผ ํ†ตํ•ด ์ฃผ์ง€์‚ฌ ์‚ฌ์šฉ์ž๋Š” ์ด๋Ÿฌํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ผ๊ด€์„ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ช‡ ๋งˆ๋”” ๋”...

๋ถˆ๊ณผ ์ผ์ฃผ์ผ ์ „๋งŒ ํ•ด๋„ ์ €๋Š” PostgreSQL์„ ์ด๋ ‡๊ฒŒ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ๋ง์”€๋“œ๋ ธ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋•Œ Compose ํ”Œ๋žซํผํŒ€์˜ ์ผ์›์ธ Kurt๋Š” ๊ทธ๋Ÿฌํ•œ ๊ธฐํšŒ๊ฐ€ ์กด์žฌํ•œ๋‹ค๊ณ  ์ฃผ์žฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Š” ๋‚ด ๋ฐ˜๋Œ€ ์˜๊ฒฌ์„ ์ง„์ •์‹œํ‚ค๊ณ  PostgreSQL ๋ฌธ์„œ์—์„œ ์ด๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ:

PostgreSQL ๋ฐ ์—ฐ๊ฒฐ๋ณ„ ์“ฐ๊ธฐ ์ผ๊ด€์„ฑ ์„ค์ •

์ด ์„ค์ •์€ ์–ธ์ œ๋“ ์ง€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํŠธ๋žœ์žญ์…˜์˜ ๋™์ž‘์€ ์ปค๋ฐ‹ ์‹œ ์ ์šฉ๋˜๋Š” ์„ค์ •์— ๋”ฐ๋ผ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ถ€ ํŠธ๋žœ์žญ์…˜์€ ๋™๊ธฐ์‹์œผ๋กœ ์ปค๋ฐ‹ํ•˜๊ณ  ๋‹ค๋ฅธ ํŠธ๋žœ์žญ์…˜์€ ๋น„๋™๊ธฐ์‹์œผ๋กœ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ•์ œ๋กœ multistatement ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ธฐ๋ณธ๊ฐ’์ด ๋ฐ˜๋Œ€์ธ ๊ฒฝ์šฐ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ปค๋ฐ‹์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํŠธ๋žœ์žญ์…˜์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. SET LOCAL synchronous_commit TO OFF ๊ฑฐ๋ž˜์—์„œ.

๊ตฌ์„ฑ ํŒŒ์ผ์„ ์•ฝ๊ฐ„ ์ˆ˜์ •ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์ผ๊ด€์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€