PostgreSQL 13 ๋ฆด๋ฆฌ์Šค

XNUMX๋…„์˜ ๊ฐœ๋ฐœ ๋์— ์ถœํŒ์‚ฌ : DBMS์˜ ์ƒˆ๋กœ์šด ์•ˆ์ • ์ง€์  PostgreSQL 13. ์ƒˆ๋กœ์šด ์ง€์  ์—…๋ฐ์ดํŠธ ๋‚˜์˜ฌ ๊ฒƒ์ด๋‹ค 2025๋…„ XNUMX์›”๊นŒ์ง€ XNUMX๋…„๊ฐ„.

์ฃผ์š” ํ˜์‹ :

  • ๊ตฌํ˜„ ์ค‘๋ณต ์ œ๊ฑฐ ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ์ธ๋ฑ์‹ฑํ•  ๋•Œ ์ฟผ๋ฆฌ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ  ๋””์Šคํฌ ๊ณต๊ฐ„ ์†Œ๋ชจ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต ์ œ๊ฑฐ๋Š” ๋ฐ˜๋ณต๋˜๋Š” ํŠœํ”Œ ๊ทธ๋ฃน์„ ๋ณ‘ํ•ฉํ•˜๊ณ  ์ค‘๋ณต ํ•ญ๋ชฉ์„ ํ•˜๋‚˜์˜ ์ €์žฅ๋œ ๋ณต์‚ฌ๋ณธ์— ๋Œ€ํ•œ ๋งํฌ๋กœ ๋ฐ”๊พธ๋Š” ํ•ธ๋“ค๋Ÿฌ์˜ ์ฃผ๊ธฐ์  ์‹คํ–‰์„ ํ†ตํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.
  • ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง‘๊ณ„ ํ•จ์ˆ˜, ๊ทธ๋ฃนํ™”๋œ ์„ธํŠธ (๊ทธ๋ฃนํ™” ์„ธํŠธ) ๋˜๋Š” ๋ถ„ํ• ๋œ (ํŒŒํ‹ฐ์…˜๋œ) ํ…Œ์ด๋ธ”. ์ตœ์ ํ™”์—๋Š” ์ง‘๊ณ„ ์‹œ ์‹ค์ œ ๋ฐ์ดํ„ฐ ๋Œ€์‹  ํ•ด์‹œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์ด ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋Œ€๊ทœ๋ชจ ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ํŒŒํ‹ฐ์…”๋‹ ์‹œ ํŒŒํ‹ฐ์…˜์„ ์‚ญ์ œํ•˜๊ฑฐ๋‚˜ ๋ณ‘ํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ์ด ํ™•๋Œ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๊ธ‰ ํ†ต๊ณ„IN ๋˜๋Š” ANY ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜๋Š” OR ์กฐ๊ฑด์ด๋‚˜ ๋ชฉ๋ก ๊ฒ€์ƒ‰์„ ํฌํ•จํ•˜๋Š” ์ฟผ๋ฆฌ์˜ ์˜ˆ์•ฝ ํšจ์œจ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด CREATE STATISTICS ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
  • ์ž‘์—… ์ค‘ ์ธ๋ฑ์Šค ์ •๋ฆฌ๊ฐ€ ๊ฐ€์†ํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ง„๊ณต ์ธ๋ฑ์Šค์—์„œ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์„ ๋ณ‘๋ ฌํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด "PARALLEL" ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€๋ฆฌ์ž๋Š” VACUUM์— ๋Œ€ํ•ด ๋™์‹œ์— ์‹คํ–‰๋  ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ํ›„ ์ž๋™ VACUUM ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ด์ „ ๋‹จ๊ณ„์—์„œ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ์˜ ํ›„์† ๋‹จ๊ณ„์—์„œ ์ •๋ ฌ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋Š” ์ฆ๋ถ„ ์ •๋ ฌ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ์—์„œ ์ƒˆ๋กœ์šด ์ตœ์ ํ™”๋ฅผ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด "ํ™œ์„ฑํ™”_์ฆ๋ถ„_์ •๋ ฌ"๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ณต์ œ ์Šฌ๋กฏ, ๋ณต์ œ๋ณธ์„ ์ˆ˜์‹ ํ•˜๋Š” ๋ชจ๋“  ๋ฐฑ์—… ์„œ๋ฒ„์—์„œ ์ˆ˜์‹ ๋  ๋•Œ๊นŒ์ง€ ์“ฐ๊ธฐ ์ง€์—ฐ ๋กœ๊ทธ(WAL) ์„ธ๊ทธ๋จผํŠธ์˜ ๋ณด์กด์„ ์ž๋™์œผ๋กœ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋ณต์ œ ์Šฌ๋กฏ์€ ๋ฐฑ์—… ์„œ๋ฒ„๊ฐ€ ์˜คํ”„๋ผ์ธ์ธ ๊ฒฝ์šฐ์—๋„ ๊ธฐ๋ณธ ์„œ๋ฒ„๊ฐ€ ์ถฉ๋Œ์„ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ํ–‰์„ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ์‚ฌ์šฉ max_slot_wal_keep_size ์ด์ œ ๋””์Šคํฌ ๊ณต๊ฐ„ ๋ถ€์กฑ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด WAL ํŒŒ์ผ์˜ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • DBMS ํ™œ๋™ ๋ชจ๋‹ˆํ„ฐ๋ง ๊ธฐ๋Šฅ์ด ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. EXPLAIN ๋ช…๋ น์€ WAL ๋กœ๊ทธ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ํ†ต๊ณ„ ํ‘œ์‹œ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. V pg_basebackup ์ง€์†์ ์ธ ๋ฐฑ์—… ์ƒํƒœ๋ฅผ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ANALYZE ๋ช…๋ น์€ ์ž‘์—… ์ง„ํ–‰ ์ƒํ™ฉ์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
  • ์ƒˆ๋กœ์šด ๋ช…๋ น์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค pg_verify๋ฐฑ์—… pg_basebackup ๋ช…๋ น์œผ๋กœ ์ƒ์„ฑ๋œ ๋ฐฑ์—…์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ JSON์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ JSON ๊ฒฝ๋กœ datetime() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„ ํ˜•์‹(ISO 8601 ๋ฌธ์ž์—ด ๋ฐ ๊ธฐ๋ณธ PostgreSQL ์‹œ๊ฐ„ ์œ ํ˜•)์„ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด "jsonb_path_query('["2015-8-1", "2015-08-12"]', '$[*] ? (@.datetime() < "2015-08-2 ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ".datetime ())')" ๋ฐ "jsonb_path_query_array('["12:30", "18:40"]', '$[*].datetime("HH24:MI")')".
  • ๋‚ด์žฅ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ gen_random_uuid () UUID v4๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒํ‹ฐ์…”๋‹ ์‹œ์Šคํ…œ์€ ๋…ผ๋ฆฌ์  ๋ณต์ œ์™€ "BEFORE" ํ‘œํ˜„์‹์œผ๋กœ ์ง€์ •๋œ ๋ณต์ œ์— ๋Œ€ํ•œ ์™„๋ฒฝํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
    ํ–‰ ์ˆ˜์ค€์—์„œ ์ž‘๋™ํ•˜๋Š” ํŠธ๋ฆฌ๊ฑฐ์ž…๋‹ˆ๋‹ค.

  • ๊ตฌ๋ฌธ "๋จผ์ € ๊ฐ€์ ธ์˜ค๊ธฐ"๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด "ORDER BY"๋ฅผ ์ ์šฉํ•œ ํ›„ ์–ป์€ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์˜ ๋์— ์žˆ๋Š” ์ถ”๊ฐ€ ํ–‰์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด "WITH TIES" ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๊ฐœ๋… ๊ตฌํ˜„(โ€œ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ")๋Š” DBMS ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ์—†๋Š” ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ ๋ชฉ๋ก์€ ์ฒ˜์Œ์— ๋ฏธ๋ฆฌ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ ์ˆ˜ํผ์œ ์ €๊ฐ€ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์—๋Š” ๋‹ค์Œ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. pgcrypto, ํ…Œ์ด๋ธ”๊ธฐ๋Šฅ, h์Šคํ† ์–ด ๊ธฐํƒ€
  • ์™ธ๋ถ€ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์ธ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ๋ž˜ํผ(postgres_fdw)๋Š” ์ธ์ฆ์„œ ๊ธฐ๋ฐ˜ ์ธ์ฆ์— ๋Œ€ํ•œ ์ง€์›์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. SCRAM ์ธ์ฆ์„ ์‚ฌ์šฉํ•  ๋•Œ ํด๋ผ์ด์–ธํŠธ๋Š” "์ฑ„๋„ ๋ฐ”์ธ๋”ฉ"(์ฑ„๋„ ๋ฐ”์ธ๋”ฉ).

์ถœ์ฒ˜ : opennet.ru

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