[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