PostgreSQL 12 ๋ฆด๋ฆฌ์Šค

PostgreSQL ํŒ€์€ ์˜คํ”ˆ ์†Œ์Šค ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์˜ ์ตœ์‹  ๋ฒ„์ „์ธ PostgreSQL 12์˜ ์ถœ์‹œ๋ฅผ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค.
PostgreSQL 12๋Š” ํŠนํžˆ ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ž‘์—… ์‹œ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œ์ผฐ์œผ๋ฉฐ ์ „๋ฐ˜์ ์ธ ๋””์Šคํฌ ๊ณต๊ฐ„ ์‚ฌ์šฉ๋„ ์ตœ์ ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  • JSON ๊ฒฝ๋กœ ์ฟผ๋ฆฌ ์–ธ์–ด ๊ตฌํ˜„(SQL/JSON ํ‘œ์ค€์˜ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„)
  • ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹ ์‹คํ–‰ ์ตœ์ ํ™”(WITH)
  • ์ƒ์„ฑ๋œ ์—ด ์ง€์›

๋˜ํ•œ ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” PostgreSQL์˜ ํ™•์žฅ์„ฑ๊ณผ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด ์ง€์†์ ์œผ๋กœ ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๊ตญ์ œํ™” ์ง€์›, ์ธ์ฆ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์‹œ์Šคํ…œ์„ ๋ณด๋‹ค ์‰ฝ๊ฒŒ โ€‹โ€‹๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฆด๋ฆฌ์Šค์—๋Š” ํ”Œ๋Ÿฌ๊ทธํ˜• ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์šฉ ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌํ˜„์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ์ด์ œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž์‹ ๋งŒ์˜ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€ ๋ฐฉ๋ฒ•์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ ๊ฐœ์„ 

PostgreSQL 12์—๋Š” ์ธ๋ฑ์‹ฑ ๋ฐ ํŒŒํ‹ฐ์…”๋‹ ์‹œ์Šคํ…œ์— ๋Œ€ํ•œ ์ƒ๋‹นํ•œ ์„ฑ๋Šฅ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ ๊ฐœ์„  ์‚ฌํ•ญ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL์˜ ํ‘œ์ค€ ์ธ๋ฑ์‹ฑ ์œ ํ˜•์ธ B-ํŠธ๋ฆฌ ์ธ๋ฑ์Šค๋Š” ๋ฒ„์ „ 12์—์„œ ์ž์ฃผ ์ธ๋ฑ์Šค ์ˆ˜์ •์ด ํ•„์š”ํ•œ ์›Œํฌ๋กœ๋“œ์— ๋งž๊ฒŒ ์ตœ์ ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. PostgreSQL 12์šฉ TPC-C ๋ฒค์น˜๋งˆํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ณต๊ฐ„ ์‚ฌ์šฉ๋Ÿ‰์ด ํ‰๊ท  40% ๊ฐ์†Œํ•˜๊ณ  ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์ด ์ „๋ฐ˜์ ์œผ๋กœ ํ–ฅ์ƒ๋˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค.

๋ถ„ํ• ๋œ ํ…Œ์ด๋ธ”์— ๋Œ€ํ•œ ์ฟผ๋ฆฌ๋Š” ํŠนํžˆ ๋ฐ์ดํ„ฐ ๋ฐฐ์—ด์˜ ์ œํ•œ๋œ ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ์ˆ˜์ฒœ ๊ฐœ์˜ ํŒŒํ‹ฐ์…˜์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ…Œ์ด๋ธ”์˜ ๊ฒฝ์šฐ ๋ˆˆ์— ๋„๊ฒŒ ๊ฐœ์„ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. INSERT ๋ฐ COPY๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ„ํ• ๋œ ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์œผ๋ฉฐ ์ฟผ๋ฆฌ๋ฅผ ์ฐจ๋‹จํ•˜์ง€ ์•Š๊ณ  ์ƒˆ ํŒŒํ‹ฐ์…˜์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

PostgreSQL 12๋Š” ๋‹ค์Œ์„ ํฌํ•จํ•˜์—ฌ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ์ธ๋ฑ์‹ฑ์„ ์ถ”๊ฐ€๋กœ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • GiST, GIN ๋ฐ SP-GiST ์ธ๋ฑ์Šค ์œ ํ˜•์— ๋Œ€ํ•œ WAL ์ƒ์„ฑ ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ ๊ฐ์†Œ;
  • GiST ์ธ๋ฑ์Šค์— ์†Œ์œ„ ์ปค๋ฒ„๋ง ์ธ๋ฑ์Šค(INCLUDE ์ ˆ)๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ;
  • ๊ฑฐ๋ฆฌ ์—ฐ์‚ฐ์ž(<->)์™€ SP-GiST ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด์›ƒ" ์ฟผ๋ฆฌ(k-NN ๊ฒ€์ƒ‰)๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ
  • CREATE STATISTICS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฐ’(MCV) ํ†ต๊ณ„ ์ˆ˜์ง‘์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ’์ด ๊ณ ๋ฅด์ง€ ์•Š๊ฒŒ ๋ถ„ํฌ๋œ ์—ด์„ ์‚ฌ์šฉํ•  ๋•Œ ๋” ๋‚˜์€ ์ฟผ๋ฆฌ ๊ณ„ํš์„ ์–ป๋Š” ๋ฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.

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

SQL ์–ธ์–ด ๊ธฐ๋Šฅ ๋ฐ ํ‘œ์ค€ ํ˜ธํ™˜์„ฑ ๊ฐœ์„ 

PostgreSQL 12์—๋Š” SQL/JSON ํ‘œ์ค€์— ์ •์˜๋œ JSON ๊ฒฝ๋กœ ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋ฌธ์„œ๋ฅผ ์ฟผ๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ๋Š” JSONB ํ˜•์‹์œผ๋กœ ์ €์žฅ๋œ ๋ฌธ์„œ์— ๋Œ€ํ•œ ๊ธฐ์กด ์ธ๋ฑ์‹ฑ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํ™œ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

PostgreSQL 12์—๋Š” "์ƒ์„ฑ ์—ด"์— ๋Œ€ํ•œ ์ง€์›์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SQL ํ‘œ์ค€์— ์„ค๋ช…๋œ ์ด ์—ด ์œ ํ˜•์€ ๋™์ผํ•œ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋‹ค๋ฅธ ์—ด์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ’์„ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฒ„์ „์—์„œ PostgreSQL์€ ๊ณ„์‚ฐ๋œ ๊ฐ’์ด ๋””์Šคํฌ์— ์ €์žฅ๋˜๋Š” "์ €์žฅ๋œ ์ƒ์„ฑ ์—ด"์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

๊ตญ์ œํ™”

PostgreSQL 12์—์„œ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์•…์„ผํŠธ๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๋Š” ๋น„๊ต๋ฅผ ํ—ˆ์šฉํ•˜๋Š” "๋น„๊ฒฐ์ •์  ๋ฐ์ดํ„ฐ ์ •๋ ฌ"์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ICU ๋ฐ์ดํ„ฐ ์ •๋ ฌ์— ๋Œ€ํ•œ ์ง€์›์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ

PostgreSQL์€ ์ถ”๊ฐ€ ๋ณด์•ˆ ๋ฐ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ํ–ฅ์ƒ๋œ ๊ธฐ๋Šฅ์„ ํ†ตํ•ด ๊ฐ•๋ ฅํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ง€์›์„ ํ™•์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๋ฆด๋ฆฌ์Šค์—๋Š” GSSAPI ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ์ธ์ฆ์„ ์œ„ํ•œ ํด๋ผ์ด์–ธํŠธ์ธก ๋ฐ ์„œ๋ฒ„์ธก ์•”ํ˜ธํ™” ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜์—ˆ์œผ๋ฉฐ, PostgreSQL์ด OpenLDAP๋กœ ์ปดํŒŒ์ผ๋  ๋•Œ PostgreSQL์ด LDAP ์„œ๋ฒ„๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ PostgreSQL 12๋Š” ์ด์ œ ๋‹ค๋‹จ๊ณ„ ์ธ์ฆ ์˜ต์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ PostgreSQL ์„œ๋ฒ„๋Š” clientcert=verify-full์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์‚ฌ์šฉ์ž ์ด๋ฆ„๊ณผ ํ•จ๊ป˜ ์œ ํšจํ•œ SSL ์ธ์ฆ์„œ๋ฅผ ์ œ๊ณตํ•˜๋„๋ก ํด๋ผ์ด์–ธํŠธ์— ์š”๊ตฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋ฅผ ๋ณ„๋„์˜ ์ธ์ฆ ๋ฐฉ๋ฒ• ์š”๊ตฌ ์‚ฌํ•ญ(์˜ˆ: scram-sha-256)๊ณผ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ฆฌ

PostgreSQL 12์—๋Š” REINDEX CONCURRENTLY ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„์ฐจ๋‹จ ์ธ๋ฑ์Šค ์žฌ๊ตฌ์ถ•์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ๊ธด ์ธ๋ฑ์Šค ์žฌ๊ตฌ์ถ• ์ค‘์— DBMS ๊ฐ€๋™ ์ค‘์ง€ ์‹œ๊ฐ„์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ PostgreSQL 12์—์„œ๋Š” pg_checksums ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ข…๋ฃŒ ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ํŽ˜์ด์ง€ ์ฒดํฌ์„ฌ์„ ํ™œ์„ฑํ™”ํ•˜๊ฑฐ๋‚˜ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ๋””์Šคํฌ์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๊ธฐ๋Šฅ์ธ ํŽ˜์ด์ง€ ์ฒดํฌ์„ฌ์€ PostgreSQL ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ initdb๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ดˆ๊ธฐํ™”๋œ ๊ฒฝ์šฐ์—๋งŒ ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : linux.org.ru

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