[PostgreSQL] Listen & Notify
PostgreSQL์ ๊ตฌ๋ ๋ชจ๋ธ๋ ์ง์ํ๋ค. DB๊ฐ ์ ์ด๋ฐ๊ฑธ ์ ๊ณตํ๋์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง...
์๋ฌดํผ ๊ตฌ๋
์์คํ
์ ๋ง๋ค๊ธฐ์๋ ๊ฝค๋ ์ ์ฉํ๋ค.
SELECT 1 from ... ๊ฐ์๊ฑธ ๋ ๋ฆฌ๋ ๋จ์ ํด๋ง๋ณด๋ค๋ ๋ถํ๊ฐ ์ ๊ณ ๊ตฌํ์ด ์ฉ์ดํ ๋ถ๋ถ์ด ์๋ค.
Listen
๋จผ์ ์์ ์ ์ธก์์ ์๊ฐํด๋ณด์.
์์ ์ listen์ด๋ผ๋ ํน์ํ ๋ช
๋ น์ด๋ฅผ ํตํด์ ์ํํ ์ ์๋ค.
์ด๊ฑด "foo"๋ผ๋ ์ด๋ฆ์ ์ฑ๋์ ์์ ํ๋ค๋ ๋ป์ด๋ค.
์ด ๋ช ๋ น์ ์ฌ์ฉํ๋ ์๊ฐ ํ์ฌ ํธ๋์ญ์ ์ธ์ ์ด ๊ตฌ๋ ์ํ๊ฐ ๋๊ณ , polling์ ํตํด์ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ค๊ฒ ๋๋ค.
์ด๊ฑด ํฐ๋ฏธ๋ ์ธ์
์ด๋ผ์ ๋ญ๊ฐ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฌ์ค ์ด๋ฒคํธ๊ฐ ๋ ์์ค๋ฉด ๋ฐ์์ฌ ์ ์๋ ์ํ๊ฐ ๋ ๊ฒ์ด๋ค.
์ ํ๋ฆฌ์ผ์ด์
์์ค์์๋ ์ปค๋ฅ์
์ ํตํด์ polling์ ํ๊ณ , ์์ ๋ ์ด๋ฒคํธ๋ฅผ ๊ฐ๋ค ์ฐ๋ฉด ๋๋ค.
๊ตฌ๋ ์ ํด์ ํ๋ ค๋ฉด unlisten์ ์ฐ๋ฉด ๋๋ค.

Notify
์ด์ notify๋ฅผ ๋ ๋ ค์ ๊ตฌ๋
์๋ค์ ๊นจ์๋ณด์.
notify๋ ๋ฌธ์์ด ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ผ ์๋ ์๊ณ , ๋ฉ์์ง ์์ด ์๋ฆผ๋ง ๋ณด๋ผ ์๋ ์๋ค.
์ด๊ฑด "foo"๋ผ๋ ์ฑ๋์ "hello"๋ผ๋ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด๋ค.
๊ทธ๋ฌ๋ฉด ์์ ์๋ ๊ทธ ๋ฉ์ธ์ง๋ฅผ ์กฐํํ ์ ์๋ค.
ํฐ๋ฏธ๋ ์ธ์
์ ํด๋ง์ ์ฆ๊ฐ ์์ ํ๋ ๊ทธ๋ฐ UI๋ ์์ด์, ์ธ๋ฏธ์ฝ๋ก ํ๋ ์ ๋๋ ์ณ์ผ์ง ๋ฐ์์จ๋ค.
์๋ฌดํผ ์ด๋ ๊ฒ ์ ๊ฐ์ ธ์จ ๊ฒ์ ๋ณผ ์ ์๋ค.
๋๋ต์ ์ธ ๊ตฌ์กฐ์ ํ๊ณ
PostgreSQL์ ๊ตฌ๋ ๋ชจ๋ธ์ Redis pub/sub๊ณผ ๋น์ทํ ๋ถ๋ถ์ด ๋ง๋ค.
์ฐ์ , ํ๋์ ์ฑ๋์ ๊ตฌ๋
์๊ฐ ์ฌ๋ฟ์ด๋ผ๋ฉด ๊ตฌ๋
์๋ค์ ํ๋์ ๋ฉ์ธ์ง๋ฅผ ์ ๋ถ ๊ณต์ ํ๋ค.
ํ๋๋ง ๋ฐ๊ณ ๊ทธ๋ฐ๊ฑด ์๋๋ค.



๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ํ๋ ์ ์ํ ์ ์, listen์ด ์๋ ์ฑ๋์ notify๋ฅผ ํ๋ฉด, ๊ทธ ์๋ฆผ์ ๋ฒ๋ ค์ง๋ค๋ ๊ฒ์ด๋ค.
์ด๋ฐ ํ๊ณ๋ Redis pub/sub๊ณผ ๋น์ทํ๋ค.
ํ๋์ ํธ๋์ญ์ ์ธ์ ์ ์ฌ๋ฌ๊ฐ์ ์ฑ๋์ listenํ๊ณ ์ฌ๋ฌ๊ฐ์ ๊ตฌ๋ ์ํ๋ฅผ ๊ฐ์ง ์ ์๋ค.
์ฐธ์กฐ
https://www.postgresql.org/docs/current/sql-notify.html
https://www.postgresql.org/docs/current/sql-listen.html
https://postgresql.kr/blog/pg_listen_notify.html