์ ์๊ฐ์๋ ์ด์ ๋ฆด๋ฆฌ์ค์ ๋ฌ๋ฆฌ PostgreSQL 12์๋ ๋ถํ ๋๋ ์ฟผ๋ฆฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ๊ฐ์ ํ๋ ๊ฐ์ง ํ์ ์ ์ธ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ง ์์ต๋๋ค. ๋๋ PostgreSQL 12์ ์ฃผ์ ๊ธฐ๋ฅ์ด ๋ ๋ฐ์ด๋ ์์ ์ฑ์ด๋ผ๊ณ ๋๋ดํ ์ ์ด ์์ต๋๋ค. ๋น์ฆ๋์ค์ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ๋ ๊ผญ ํ์ํ ๊ฒ์ด ์๋๊ฐ์?
๊ทธ๋ฌ๋ PostgreSQL 12๋ ์ฌ๊ธฐ์ ๋๋์ง ์์ต๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ฌํญ์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค. ์ ๊ทธ๋ ์ด๋๋ง ํ๋ฉด ๋ฉ๋๋ค!
(๊ธ์, ์ธ๋ฑ์ค๋ฅผ ๋ค์ ๋น๋ํ ์๋ ์์ง๋ง ์ด๋ฒ ๋ฆด๋ฆฌ์ค์์๋ ์์ ๋งํผ ๋ฌด์ญ์ง ์์ต๋๋ค.)
PostgreSQL์ ์
๊ทธ๋ ์ด๋ํ๊ณ ๋ถํ์ํ ์๋ ์์ด ์ฆ์ ์๋นํ ๊ฐ์ ์ ๋๋ฆด ์ ์๋ค๋ฉด ์ข์ ๊ฒ์
๋๋ค. ๋ช ๋
์ ์ ๋ PostgreSQL 9.4์์ PostgreSQL 10์ผ๋ก์ ์
๊ทธ๋ ์ด๋๋ฅผ ๊ฒํ ํ๊ณ PostgreSQL 10์ ํฅ์๋ ์ฟผ๋ฆฌ ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋๋ถ์ ์ ํ๋ฆฌ์ผ์ด์
์๋๊ฐ ์ด๋ป๊ฒ ๋นจ๋ผ์ก๋์ง ํ์ธํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ฑฐ์ ์๋ฌด๊ฒ๋ ํ์ํ์ง ์๋ค๋ ๊ฒ์
๋๋ค(๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ง ์ค์ ํ๋ฉด ๋ฉ๋๋ค). max_parallel_workers
).
๋์ํ์ธ์. ์ ๊ทธ๋ ์ด๋ ํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฆ์ ๋ ์ ์๋ํ๋ฉด ํธ๋ฆฌํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ PostgreSQL์๋ ์ ์ ๋ ๋ง์ ์ฌ์ฉ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ฌ์ฉ์๋ฅผ ๊ธฐ์๊ฒ ํ๊ธฐ ์ํด ๋งค์ฐ ์ด์ฌํ ๋ ธ๋ ฅํฉ๋๋ค.
๊ทธ๋ ๋ค๋ฉด PostgreSQL 12๋ก ๊ฐ๋จํ ์ ๊ทธ๋ ์ด๋ํ๋ฉด ์ด๋ป๊ฒ ๋ง์กฑํ ์ ์์๊น์? ์ง๊ธ ๋ง์ ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ฃผ์ ์ธ๋ฑ์ฑ ๊ฐ์
์ธ๋ฑ์ฑ์ด ์์ผ๋ฉด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฉ๋ฆฌ ๊ฐ์ง ์์ต๋๋ค. ์ ๋ณด๋ฅผ ๋นจ๋ฆฌ ์ฐพ์ ์ ์๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? PostgreSQL์ ๊ธฐ๋ณธ ์ธ๋ฑ์ฑ ์์คํ
์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋จ์ํ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค CREATE INDEX ON some_table (some_column)
, PostgreSQL์ ์ฐ๋ฆฌ๊ฐ ์ง์์ ์ผ๋ก ๊ฐ์ ์ฝ์
, ์
๋ฐ์ดํธ ๋ฐ ์ญ์ ํ๋ ๋์ ์ธ๋ฑ์ค๋ฅผ ์ต์ ์ํ๋ก ์ ์งํ๊ธฐ ์ํด ๋ง์ ์์
์ ์ํํฉ๋๋ค. ๋ง์น ๋ง์ ์ฒ๋ผ ๋ชจ๋ ๊ฒ์ด ์ ์ ๋ก ์๋ํฉ๋๋ค.
๊ทธ๋ฌ๋ PostgreSQL ์ธ๋ฑ์ค์๋ ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
PostgreSQL 12๋ B-ํธ๋ฆฌ ์ธ๋ฑ์ค์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์์ผฐ์ผ๋ฉฐ TPC-C์ ๊ฐ์ ๋ฒค์น๋งํฌ๋ฅผ ์ฌ์ฉํ ์คํ์ ๋ฐ๋ฅด๋ฉด ํ์ฌ ํ๊ท 40% ๋ ์ ์ ๊ณต๊ฐ์ด ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ์ด์ ๋ B-ํธ๋ฆฌ ์ธ๋ฑ์ค ์ ์ง ๊ด๋ฆฌ(์ฆ, ์ฐ๊ธฐ ์์ )๋ฟ๋ง ์๋๋ผ ์ธ๋ฑ์ค๊ฐ ํจ์ฌ ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ๊ฒ์์๋ ์์๋๋ ์๊ฐ์ด ์ค์ด๋ญ๋๋ค.
ํ
์ด๋ธ์ ์ ๊ทน์ ์ผ๋ก ์
๋ฐ์ดํธํ๋ ์ ํ๋ฆฌ์ผ์ด์
- ์ผ๋ฐ์ ์ผ๋ก OLTP ์ ํ๋ฆฌ์ผ์ด์
(
์ผ๋ถ ์
๊ทธ๋ ์ด๋ ์ ๋ต์์๋ ์ด๋ฌํ ์ด์ ์ ํ์ฉํ๊ธฐ ์ํด B-ํธ๋ฆฌ ์ธ๋ฑ์ค๋ฅผ ์ฌ๊ตฌ์ถํด์ผ ํฉ๋๋ค(์:
PostgreSQL 12์ ์ธ๋ฑ์ฑ ์ธํ๋ผ์๋ ๋ค๋ฅธ ๊ฐ์ ์ฌํญ์ด ์์ต๋๋ค. ๋ง๋ฒ์ด ์์๋ ๋ ๋ค๋ฅธ ์ผ -
PostgreSQL 12๋ ์ธ๋ฑ์ค ์์ฑ ์ค์ GiST, GIN ๋ฐ SP-GiST ์ธ๋ฑ์ค์ ์ํด ์์ฑ๋๋ WAL ๋ ์ฝ๋์ ์ค๋ฒํค๋๋ฅผ ์ค์์ต๋๋ค. ์ด๋ ๋ช ๊ฐ์ง ์ค์ง์ ์ธ ์ด์ ์ ์ ๊ณตํฉ๋๋ค. WAL ๋ ์ฝ๋๋ ๋์คํฌ ๊ณต๊ฐ์ ๋ ์ฐจ์งํ๋ฉฐ ์ฌํด ๋ณต๊ตฌ๋ ํน์ ์์ ๋ณต๊ตฌ ๋ฑ์์ ๋ฐ์ดํฐ๊ฐ ๋ ๋น ๋ฅด๊ฒ ์ฌ์๋ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด๋ฌํ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ(์๋ฅผ ๋ค์ด PostGIS ๊ธฐ๋ฐ ์ง๋ฆฌ๊ณต๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ GiST ์ธ๋ฑ์ค๋ฅผ ๋ง์ด ์ฌ์ฉํจ) ์ด๋ ์ฌ์ฉ์์ ๋ ธ๋ ฅ ์์ด๋ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์๋ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋๋ค.
ํํฐ์ ๋ - ๋ ํฌ๊ณ , ๋ ์ข๊ณ , ๋ ๋น ๋ฆ ๋๋ค.
PostgreSQL 10 ๋์
PostgreSQL 12์์๋ ํนํ ํ ์ด๋ธ์ ์์ฒ ๊ฐ์ ํํฐ์ ์ด ์๋ ๊ฒฝ์ฐ ํํฐ์ ๋ ์์คํ ์ ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ฟผ๋ฆฌ๊ฐ ์์ฒ ๊ฐ์ ํํฐ์ ์ด ์๋ ํ ์ด๋ธ์์ ๋ช ๊ฐ์ ํํฐ์ ์๋ง ์ํฅ์ ๋ฏธ์น๋ ๊ฒฝ์ฐ ํจ์ฌ ๋ ๋น ๋ฅด๊ฒ ์คํ๋ฉ๋๋ค. ์ด๋ฌํ ์ ํ์ ์ฟผ๋ฆฌ์ ๋ํ ์ฑ๋ฅ๋ง ํฅ์๋๋ ๊ฒ์ ์๋๋๋ค. ๋ํ ์ฌ๋ฌ ํํฐ์ ์ด ์๋ ํ ์ด๋ธ์์ INSERT ์์ ์ด ์ผ๋ง๋ ๋น ๋ฅธ์ง ํ์ธํ ์ ์์ต๋๋ค.
๋ค์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋กํฉ๋๋ค.
์ด๋ฌํ ์ฅ์ ๋๋ถ์ PostgreSQL์ ์ฌ์ฉํ๋ฉด ํจ์ฌ ๋ ํฐ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ๋ ธ๋ ฅ์ ์์ต๋๋ค. ์๊ณ์ด ๋ฐ์ดํฐ ๊ธฐ๋ก๊ณผ ๊ฐ์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ํํฐ์ ์ด ๋ง์ ๊ฒฝ์ฐ ๊ฐ๋จํ ์ ๊ทธ๋ ์ด๋๋ง์ผ๋ก ์ฑ๋ฅ์ด ํฌ๊ฒ ํฅ์๋ฉ๋๋ค.
์ด๊ฒ์ด ์ ํํ "์ ๊ทธ๋ ์ด๋ํ๊ณ ์ฆ๊ธฐ๋" ๊ฐ์ ์ฌํญ์ ์๋์ง๋ง PostgreSQL 12์์๋ ๋ถํ ๋ ํ ์ด๋ธ์ ์ฐธ์กฐํ๋ ์ธ๋ ํค๋ฅผ ์์ฑํ ์ ์์ผ๋ฏ๋ก ๋ถํ ์์ ์ด ์ฆ๊ฑฐ์์ง๋๋ค.
WITH ์ฟผ๋ฆฌ๊ฐ ํจ์ฌ ๋ ์ข์์ก์ต๋๋ค.
์ธ์
๋๋ ์ข ์ข SQL ์ด๋ณด์๋ค์ด CTE๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ํ๋ค๋ ๊ฒ์ ์๊ฒ ๋๋๋ฐ, CTE๋ฅผ ํน์ ๋ฐฉ์์ผ๋ก ์์ฑํ๋ฉด ์ ๋ง ๋ช ๋ นํ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋๋ ์ด๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ๋ค์ ์์ฑํ์ฌ ๋์๋ค๋๋ ๊ฒ์ ์ข์ํ์ต๋๋ค. ะฑะตะท CTE ๋ฐ ์์ฐ์ฑ ํฅ์. ์ด์ ๋ชจ๋ ๊ฒ์ด ๋ฌ๋ผ์ก์ต๋๋ค.
PostgreSQL 12๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ์์ฉ ์์ด ํน์ ์ ํ์ CTE๋ฅผ ์ธ๋ผ์ธํ ์ ์์ต๋๋ค(SELECT
), ์์ฒญ์ด ๋๋ ๋ฌด๋ ต์ ํ ๋ฒ๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋ด๊ฐ ๋ค์ ์์ฑํ CTE ์ฟผ๋ฆฌ๋ฅผ ๊ณ์ ์ถ์ ํ๋ค๋ฉด ๋๋ถ๋ถ์ด ์ด ๋ฒ์ฃผ์ ์ํ ๊ฒ์
๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ์ด์ ๋น ๋ฅด๊ฒ ์คํ๋๋ ๋ช
ํํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๊ฒ๋ค๊ฐ PostgreSQL 12๋ ์ฌ์ฉ์๊ฐ ์๋ฌด๊ฒ๋ ํ ํ์ ์์ด SQL ์คํ ์์ฒด๋ฅผ ์ต์ ํํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ์ ๊ทธ๋ฌํ ์ฟผ๋ฆฌ๋ฅผ ์ต์ ํํ ํ์๊ฐ ์์์ง๋ผ๋ PostgreSQL์ด ๊ณ์ํด์ ์ฟผ๋ฆฌ ์ต์ ํ ์์ ์ ์ํํ๊ณ ์๋ค๋ ๊ฒ์ ์ข์ ์ผ์ ๋๋ค.
JIT(Just-in-Time) - ์ด์ ๊ธฐ๋ณธ๊ฐ
์ง์๋๋ PostgreSQL 12 ์์คํ
PostgreSQL 12์์๋ JIT๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ ์ ๋ก ์ฑ๋ฅ์ด ํฅ์๋์ง๋ง JIT๋ฅผ ๋์ ํ PostgreSQL 11์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํ์ฌ ์ฟผ๋ฆฌ ์ฑ๋ฅ์ ์ธก์ ํ๊ณ ์กฐ์ ํด์ผ ํ ์ฌํญ์ด ์๋์ง ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
PostgreSQL 12์ ๋๋จธ์ง ์๋ก์ด ๊ธฐ๋ฅ์ ์ด๋ป์ต๋๊น?
PostgreSQL 12์๋ ํ์ค SQL/JSON ๊ฒฝ๋ก ํํ์์ ์ฌ์ฉํ์ฌ JSON ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ฌํ๋ ๊ธฐ๋ฅ๋ถํฐ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ ๋ค๋จ๊ณ ์ธ์ฆ์ ์ด๋ฅด๊ธฐ๊น์ง ์๋ง์ ๋ฉ์ง ์ ๊ธฐ๋ฅ์ด ์์ต๋๋ค. clientcert=verify-full
, ์์ฑ๋ ์ด ๋ฑ์ด ์์ต๋๋ค. ๋ณ๋์ ๊ฒ์๋ฌผ๋ก ์ถฉ๋ถํฉ๋๋ค.
PostgreSQL 10๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก PostgreSQL 12๋ ์ ๊ทธ๋ ์ด๋ ์งํ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๋ฌผ๋ก ์์ ๋ง์ ๋ฐฉ์์ด ์์ ์ ์์ต๋๋ค. ์ ๊ฐ PostgreSQL 10์์ ํ๋ ๊ฒ์ฒ๋ผ ๊ฐ์ ์ ์ ์ฉํ๊ธฐ ์ ์ ํ๋ก๋์ ์์คํ ์์ ๋น์ทํ ์กฐ๊ฑด์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ ์คํธํด ๋ณด์ธ์. PostgreSQL 12๊ฐ ์ด๋ฏธ ์์๋ณด๋ค ์์ ์ ์ด๋๋ผ๋ ํ ์คํธ๋ฅผ ๊ฒ์ผ๋ฅด์ง ๋ง์ญ์์ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋ก๋์ ํ๊ฒฝ์ ์ถ์ํ๊ธฐ ์ ์ ์ฒ ์ ํ ๊ฒํ ํด์ผ ํฉ๋๋ค.
์ถ์ฒ : habr.com