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