๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ ๋ฐฉ์‹

1. ๋ฒ„์ „๋ณ„๋กœ DB ์„ค์น˜ ํ›„ ์—ฐ๊ฒฐํ•ด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฟผ๋ฆฌ ๋‚ ๋ ค์„œ ๋ฟŒ๋ ค์ฃผ๊ธฐ

2. ๋ฒ„์ „๋ณ„๋กœ ๋‚ด์šฉ์„ ์ถ”์ถœํ•ด์„œ ํ•œ DB์— ๋ฒ„์ „๋ณ„๋กœ ํ…Œ์ด๋ธ” ๋งŒ๋“ค์–ด์„œ ์ €์žฅํ•˜๊ธฐ

ํ…Œ์ด๋ธ”์„ ๋ฒ„์ „๋ณ„๋กœ ๋งŒ๋“œ๋Š” ์ด์œ  : ๋ฒ„์ „๋ณ„๋กœ ์ปฌ๋Ÿผ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—

 

 

configuration ํ™•์ธ ์ฟผ๋ฆฌ

select * from pg_settings;

 

์•„๋ž˜์™€ ๊ฐ™์ด ํ•„์š”ํ•œ ๋‚ด์šฉ์ด ํ•œ๋ฒˆ์— ์กฐํšŒ๋œ๋‹ค.

 

postgres.conf์™€ pg_settings์˜ ์ฐจ์ด

postgres.conf

  • PostgreSQL ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ํ˜„์žฌ ์„ค์ • ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋œ ํŒŒ์ผ
  • ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌ
  • vi๋กœ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์กฐ์ž‘ํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š์Œ

 

pg_settings

  • ์ธ์Šคํ„ด์Šค์— ๋Œ€ํ•œ ํ˜„์žฌ ์„ค์ • ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋œ ์‹œ์Šคํ…œ ์นดํƒˆ๋กœ๊ทธ ํ…Œ์ด๋ธ”
  • ALTER SYSTEM ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ ์ฟผ๋ฆฌ ์กฐ์ž‘์œผ๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ
  • ์‰ฝ๊ฒŒ ์•ก์„ธ์Šค ๊ฐ€๋Šฅ

PostgreSQL ์„ค์น˜

1. ํ„ฐ๋ฏธ๋„์—์„œ brew๋ฅผ ์ด์šฉํ•˜์—ฌ ์„ค์น˜

brew install postgresql

 

2. ๋ฒ„์ „ ํ™•์ธ

postgres -V

 

3. ์‹œ์ž‘

brew services start postgresql

 

4. ์ ‘์†

psql postgres

 

  • ์œ ์ € ํ™•์ธ

 

  • ์ข…๋ฃŒ
brew services stop postgresql

 

DBeaver ์—ฐ๊ฒฐ

1. DBeaver ๋‹ค์šด๋กœ๋“œ

  • ๊ณต์‹ ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•œ๋‹ค

 

2. PostgreSQL ์„ ํƒ

 

3. ์ •๋ณด ์ž…๋ ฅ (์œ ์ € ์ƒ์„ฑ ํ›„ ์ง„ํ–‰ํ•ด์•ผํ•จ) ํ›„ Test Connection ํด๋ฆญ

 

4. ๋“œ๋ผ์ด๋ฒ„ ์„ค์น˜

 

5. ์™„๋ฃŒ

 

 

 

 

Reference

https://shanepark.tistory.com/186

https://pbj0812.tistory.com/407

8. ํ…Œ์ด๋ธ” ์„ค๊ณ„์˜ ๊ธฐ์ดˆ

ํ…Œ์ด๋ธ”์˜ ๊ฐœ๋…๊ณผ ์ •๊ทœํ˜•
  1. ํ…Œ์ด๋ธ” ์„ค๊ณ„
  2. ์ •๊ทœํ˜•
  3. ์ฒดํฌํฌ์ธํŠธ

๐Ÿง ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ฃผ๋ฅ˜๊ฐ€ ๋œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ?

โ—๏ธ Garbage in, Garbage out ์ด๋ผ๋Š” ๋ง์ด ์žˆ๋“ฏ์ด, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ ์ €์žฅ์€ ๋งค์šฐ ์ค‘์š”ํ•จ

  1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์€ ๋งค์šฐ ๋†’์€ ๋‹จ๊ณ„๋กœ ์š”๊ตฌ๋จ
  2. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์ •ํ•ฉ์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์„ค๊ณ„ ๋…ธํ•˜์šฐ๊ฐ€ ๋งค์šฐ ๋ฐœ๋‹ฌํ•จ

ํ…Œ์ด๋ธ” ์„ค๊ณ„

ํ…Œ์ด๋ธ”

  • ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ทธ๋ฆ‡
  • ์—ด๊ณผ ํ–‰์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ (์—‘์…€)
  • ์œ ๋‹ˆํฌํ•œ ๊ธฐ๋ณธํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๊ณตํ†ต ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฒƒ์˜ ์ง‘ํ•ฉ
  • ํ˜„์‹ค ์„ธ๊ณ„์˜ ๊ฐœ๋…์ด๋‚˜ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ

์„œ๋ฒ„๋‚˜ ์Šคํ† ๋ฆฌ์ง€ ๊ฐ™์€ ๋ฌผ๋ฆฌ์ธต๊ณผ ๊ด€๊ณ„์—†์ด ๋…๋ฆฝ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์„œ '๋…ผ๋ฆฌ ์„ค๊ณ„'๋ผ๊ณ ๋„ ๋ถ€๋ฆ„

 

์›์น™

ํ…Œ์ด๋ธ”์ด๋ž€ ๊ณตํ†ต์ ์„ ๊ฐ€์ง„ ์‚ฌ๋ฌผ์˜ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค

ํ…Œ์ด๋ธ”๋ช…์€ ๋ฐ˜๋“œ์‹œ ๋ณต์ˆ˜ํ˜•์ด๋‚˜ ์ง‘ํ•ฉ๋ช…์‚ฌ๋กœ ํ‘œํ˜„ํ•ด์•ผ ํ•œ๋‹ค

 

ํ…Œ์ด๋ธ” ์„ค๊ณ„์˜ ์–ด๋ ค์›€

์ธ๊ฐ„์˜ ์ž์œ ๋กœ์šด ์‚ฌ๊ณ ๋ฅผ ๋ฐ˜์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ด๋ธ”์˜ ๊ตฌ์„ฑ ํŒจํ„ด์ด ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ๋Š” ๋“ฑ๋กํ•œ ๊ทธ ์‹œ์ ์—๋งŒ ์ •ํ•ฉ์„ฑ์ด ์žˆ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์žฅ๊ธฐ์ ์œผ๋กœ ์ •ํ•ฉ์„ฑ์„ ์–ป๋Š” ๋…ธ๋ ฅ์„ ํ•ด์•ผ ํ•œ๋‹ค.

โ†’ ๋ฐ์ดํ„ฐ๊ฐ€ '์ •์ '์ด์ง€ ์•Š๊ณ  '๋™์ '์ž„์„ ์ „์ œ๋กœ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค.

 

ํ•ด๊ฒฐ๋ฐฉ๋ฒ•

  • ๊ฐ€์žฅ ์ƒ์œ„์˜ ๊ฐœ๋…์ง‘ํ•ฉ์œผ๋กœ ์ •๋ฆฌํ•œ๋‹ค.
    • ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค๋ฉด ์ปฌ๋Ÿผ์„ ์ถ”๊ฐ€ํ•ด์„œ ๊ตฌ๋ถ„ํ•œ๋‹ค.

 

๋„๋ฉ”์ธ ์ฃผ๋„ ์„ค๊ณ„  DDD - ํ˜„์‹ค ์„ธ๊ณ„์™€ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์˜ ์„ธ๊ณ„๋ฅผ ์ž‡๋Š” ๋‹ค๋ฆฌ ์—ญํ• 

์†์„ฑ์ด ํ•„์š”ํ•œ์ง€ ์ƒ๊ฐํ•  ๋•Œ ๊ฒฐ์ •ํ•ด์•ผ ํ• ๊ฒƒ ์ด๋ฆ„ : ๋ฐ์ดํ„ฐ = ๋„๋ฉ”์ธ(๋ฐ์ดํ„ฐํ˜•- ์†์„ฑ์ด ์ทจํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ์ง‘ํ•ฉ)

์†์„ฑ(์นผ๋Ÿผ)์˜ ์ด๋ฆ„:

ID๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค๋Š” ๊ฐœ๋… = DB์— ์ €์žฅ๋œ ID๋Š” ํ˜„์‹ค ์„ธ๊ณ„์˜ ๋ฌผ์ฒด๋‚˜ ๊ฐœ๋…

 

 

๐Ÿ”‘  ๊ธฐ๋ณธํ‚ค

๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ๊ธฐ๋ณธํ‚ค ํ• ๋‹น์€ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ์˜ ๊ธฐ๋ณธ!

 

ํ•„์ˆ˜ ์š”๊ฑด

  • ๊ธฐ๋ณธํ‚ค๋Š” ํ•œ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์— ๋ฐ˜๋“œ์‹œ ํ•œ ๊ฐœ๋งŒ ์กด์žฌํ•ด์•ผ ํ•จ
  • ๊ธฐ๋ณธํ‚ค์˜ ์ปฌ๋Ÿผ ๋ช…์— ๋ฐ‘์ค„์„ ๊ทธ์–ด ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž„
  • ๊ธฐ๋ณธํ‚ค ์—ด์— NULL์€ ๋ถˆ๊ฐ€
  • ๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ฑฐ๋‚˜ ์ค‘๋ณต๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ์žˆ๋‹ค๋ฉด ๋ถˆ๊ฐ€
    • ๋ณ€๊ฒฝ ํ›„ ๊ฐ’์˜ ์œ ์ผ์„ฑ์„ ๋ณด์ฆํ•  ์ˆ˜ ์—†๊ณ  ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ๋งค์นญ์ด ์–ด๋ ค์›€

์ •๊ทœํ˜•

๋ฐ์ดํ„ฐ์˜ ๊ฐฑ์‹ ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋„ ๋ถ€์ •ํ•ฉ์ด ๋ฐœ์ƒํ•˜๊ธฐ ์–ด๋ ค์šด ํ…Œ์ด๋ธ”์˜ ํ˜•ํƒœ

โ†’ ์‰ฝ๊ฒŒ ๋งํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ค‘๋ณต์„ ์—†์• ๋Š” ์ž‘์—…

 

์ •๊ทœํ™” ๋…ผ๋ฆฌ - ํ•จ์ˆ˜ ์ข…์†์„ฑ

DB ์„ค๊ณ„ = DB์— ํฌํ•จ๋œ ๋ชจ๋“  ํ…Œ์ด๋ธ”์ด๋‚˜ ์˜ค๋ธŒ์ ํŠธ์˜ ์„ค๊ณ„๋ผ๋Š” ์˜๋ฏธ

์ •๊ทœํ™” = ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์„ ๋ณด์™„ํ•˜๋Š” ์ด๋ก 

 

๋ณ€์น™์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ •๊ทœํ™” ์•ˆ๋œ db๋Š” ๋ฆด๋ ˆ์ด์…˜์˜ ์„ค๊ณ„๊ฐ€ ์ƒ์‹์ ์ด์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค. ex) ํ•™์ƒ๊ณผ ์ˆ˜์—…์˜ ์ด์ˆ˜๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฆด๋ ˆ์ด์…˜์— ํ•™๋…„์ด๋ผ๋Š” ์†์„ฑ์ด ํฌํ•จ๋œ ๊ฒƒ์ด ์ด์ƒํ•˜๋‹ค

๋ณ€์น™์˜ ์›์ธ์€ ์ค‘๋ณต

์ค‘์š” : BCNF, 5NF

 

์ œ1์ •๊ทœํ˜•(1NF)

ํ…Œ์ด๋ธ”์ด์–ด์•ผ ํ• ๊ฒƒ

โ†’ ์นผ๋Ÿผ์ด๋‚˜ ํ–‰์˜ ์ˆœ์„œ๊ฐ€ ์—†๋‹ค : ROWID๋‚˜ ObjectID ๊ฐ™์€ ๊ฑธ ์“ฐ์ง€๋ง์•„์•ผํ•œ๋‹ค

โ†’ ์ค‘๋ณต๋˜๋Š” ํ–‰์„ ์ œ๊ฑฐ

โ†’ NULL์ด ํฌํ•จ๋˜๋ฉด ์•ˆ๋œ๋‹ค.

โ†’ ๊ฐ’์˜ ์›์ž์„ฑ

 

ํ•จ์ˆ˜ ์ข…์†์„ฑ(FD) 2NF~BCNF ๋Š” ํ•จ์ˆ˜ ์ข…์†์„ฑ์— ๊ด€ํ•œ ์ •์˜

 

์ œ2์ •๊ทœํ˜•(2NF)

ํ›„๋ณดํ‚ค์˜ ์ง„๋ถ€๋ถ„์ง‘ํ•ฉ์—์„œ ํ‚ค๊ฐ€ ์•„๋‹Œ ์†์„ฑ์— ํ•จ์ˆ˜ ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๋Š” ์ž‘์—…

 

์ œ3์ •๊ทœํ˜•

๋ณด์ด์Šค์ฝ”๋“œ ์ •๊ทœํ˜• (BCNF)

์ž๋ช…ํ•˜์ง€ ์•Š์€ ํ•จ์ˆ˜ ์ข…์†์„ฑ์ด ๋ชจ๋‘ ์ œ๊ฑฐ๋œ ์ƒํƒœ

 

  • ์ œ1~5์ •๊ทœํ˜•๊นŒ์ง€ ์žˆ์ง€๋งŒ ์‹ค๋ฌด์—์„œ๋Š” ์ œ3์ •๊ทœํ˜•๊นŒ์ง€ ์•Œ๋ฉด ์ถฉ๋ถ„ํ•˜๋‹ค.

 

๊ฒฐํ•ฉ ์ข…์†์„ฑ (JD)

4,5,6 ์ •๊ทœํ˜•

 

๋ฆด๋ ˆ์ด์…˜์˜ ์ง๊ต์„ฑ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฆด๋ ˆ์ด์…˜ ์‚ฌ์ด์˜ ์ค‘๋ณต์— ๊ด€ํ•œ ๊ฐœ๋…

 


 

NULL๊ณผ์˜ ์‹ธ์›€

  • ๋ฆด๋ ˆ์ด์…˜์—๋Š” NULL ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. (NULL ๊ฐ’์€ ๋น„์–ด)
    • NULL์€ ๊ด€๊ณ„ํ˜• ๋ชจ๋ธ์—๋Š” ์กด์žฌํ•˜์ง€ ์•Š๊ณ  SQL์˜ ํ…Œ์ด๋ธ”์—๋งŒ ์กด์žฌํ•œ๋‹ค. NULL์„ ๊ฐ€์ง„ ํ…Œ์ด๋ธ”์€ 1NF์˜ ์š”๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • NULL โ‰  ๊ณต์ง‘ํ•ฉ (๊ณต์ง‘ํ•œ์€ ์š”์†Œ๊ฐ€ 0๊ฐœ์ธ ์‹ค์žฌํ•˜๋Š” ์ง‘ํ•ฉ)
  • SQL์˜ NULL์€ C์–ธ์–ด์˜ NULL ํฌ์ธํŠธ์™€๋„ ๋‹ค๋ฅด๋‹ค.
  • NULL์€ ๊ฐ’์ด ์•„๋‹ˆ๋ผ์„œ ๊ฐ’์ฒ˜๋Ÿผ ๋น„๊ตํ•  ์ˆ˜ ์—†๋‹ค (= ์ด ์•„๋‹Œ IS)
  • NULL์€ ์—ฐ์‚ฐ์„ ๋ง์นœ๋‹ค. ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ์˜๋„ํ•˜์ง€ ์•Š์€ ๊ฒฐ๊ณผ๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ
  • NULL์€ ์˜ตํ‹ฐ๋งˆ์ด์ € ๊ตฌํ˜„์—๋„ ์•…์˜ํ–ฅ์ด ์žˆ๋‹ค. โ†’ ์ฟผ๋ฆฌ์˜ ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ค๋ฅด๋ฉด ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.

 

NULL์˜ ๋Œ€์ฑ…

  • ํ…Œ์ด๋ธ” ์ •๊ทœํ™”
  • ์ž˜๋ชป๋œ NULL ๋Œ€์ฑ… - ํŠน๋ณ„ํ•œ ๊ฐ’์ด ํžˆํŠธํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ - ๋กœ์ปฌ ๊ทœ์น™์€ ํ…Œ์ด๋ธ” ์ •์˜์— ๋ณด์ด์ง€ ์•Š๋Š”๋‹ค.
  • NULL์„ ํ”ผํ•˜๊ณ ์ž ํŽธ์˜์ƒ NULL์ด ์•„๋‹Œ NULL๊ณผ ๊ฐ™์€ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ํ…Œ์ด๋ธ” ์„ค๊ณ„๋ฅผ ์•…ํ™”
  • โ†’ COALESCE ํ•จ์ˆ˜: NVL์˜ ํ™•์žฅ, ์ธ์ˆ˜ ์ค‘์— ๊ฐ€์žฅ ์ฒ˜์Œ์— ๋‚˜์˜ค๋Š” NULL์ด ์•„๋‹Œ ๊ฒƒ์„ ๋ฐ˜ํ™˜ - ๋‹ค์ด๋‚˜๋ฏน SQL

์ฒดํฌํฌ์ธํŠธ (SQL ์ฝ”๋”ฉ์˜ ๊ธฐ์ˆ  ์ฐธ์กฐ)

๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์„ค๊ณ„

  1. ๋ชจ๋“  ํ…Œ์ด๋ธ”์— ๊ธฐ๋ณธํ‚ค๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์ž
    • ๊ธฐ๋ณธ ํ‚ค์˜ ์š”๊ฑด: ์œ ์ผํ•œ ๊ฐ’, NOT NULL, ์•ˆ์ •์„ฑ(=๊ฐฑ์‹  ๋ถˆํ•„์š”), ๊ฐ„๋‹จ(ex. ์ •์ˆ˜)
    • ๊ธฐ๋ณธ ํ‚ค๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ๋…๋ฆฝ์ ์ธ ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. (๋น„์ฆˆ๋‹ˆ์Šค ์ •์ฑ… ๋ณ€๊ฒฝ์œผ๋กœ์ธํ•ด ๊ธฐ๋ณธ ํ‚ค๊ฐ€ ๊ฐฑ์‹ ๋˜๋ฉด ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ)
  1. ์ค‘๋ณต์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ ์ œ๊ฑฐํ•˜์ž
  2. ๋ฐ˜๋ณต ๊ทธ๋ฃน์„ ์ œ๊ฑฐํ•˜์ž โ†’ ์ •๊ทœํ™”
  3. ์ปฌ๋Ÿผ๋‹น ํ•˜๋‚˜์˜ ํŠน์„ฑ๋งŒ ์ €์žฅํ•˜์ž
    • ์›์ž์„ฑ, ํ•œ ์ปฌ๋Ÿผ์— ์—ฌ๋Ÿฌ ํŠน์„ฑ ํฌํ•จํ•˜๋ฉด ๊ฒ€์ƒ‰์ด๋‚˜ ๊ทธ๋ฃจํ•‘์ด ์–ด๋ ค์›€ 
    • ์ฟผ๋ฆฌํ•  ๋•Œ ์ชผ๊ฐœ๋Š” ๊ฒƒ์€ ์–ด๋ ต์ง€๋งŒ, ํ•ฉ์น˜๋Š” ๊ฒƒ์€ ์‰ฝ๋‹ค! (์ฃผ์†Œ, ์ „ํ™”๋ฒˆํ˜ธ ๋“ฑ)
  4. ์™œ ๊ณ„์‚ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉด ์ข‹์ง€ ์•Š์€์ง€ ์ดํ•ดํ•˜์ž (์ •ํ•ฉ์„ฑ)
    • ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐ๋˜๋Š” ์ปฌ๋Ÿผ์ด ์žˆ๋‹ค๋ฉด, ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๋กœ์šฐ๊ฐ€ ๋ณ€๊ฒฝ, ์‚ฝ์ž…, ์‚ญ์ œ๋  ๋•Œ๋งˆ๋‹ค ๊ฐ’์„ ์žฌ๊ณ„์‚ฐํ•ด์•ผํ•˜๋ฏ€๋กœ, ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆด๋ฟ๋”๋Ÿฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์–ด๋ ต๋‹ค
    • ๋น„๊ฒฐ์ •์  ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ์—๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ฑธ ์ˆ˜ ์—†๋‹ค
    • ๊ณ„์‚ฐ ์ปฌ๋Ÿผ : ์–ป๋Š” ํ˜œํƒ > ๋ถ€ํ•˜ ๋น„์šฉ ์ผ ๋•Œ๋งŒ ์‚ฌ์šฉ
๊ฒฐ์ •์  ํ•จ์ˆ˜์™€ ๋น„๊ฒฐ์ •์  ํ•จ์ˆ˜
* ๊ฒฐ์ •์ (Deterministic) ํ•จ์ˆ˜ : ์ž…๋ ฅ์ด ๊ฐ™์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์€ ํ•จ์ˆ˜
* ๋น„๊ฒฐ์ •์ (Nondeterministic) ํ•จ์ˆ˜ : ์ž…๋ ฅ์ด ๊ฐ™์•„๋„ ๋งค๋ฒˆ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ํ•จ์ˆ˜. ์ธ๋ฑ์Šค ๋ถˆ๊ฐ€
  1. ํ…Œ์ด๋ธ” ๊ฐ„ ๊ด€๊ณ„๋ฅผ ๋ช…ํ™•ํžˆ ํ•˜์ž
    • ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์˜ ์ •ํ™•์„ฑ ์œ ๋ฌด๋ฅผ ๊ทœ์ •ํ•˜๋Š” ๊ฒƒ์€ ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์ด๋ฏ€๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งž์ถฐ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์„ค๊ณ„ํ•ด์•ผ ํ•œ๋‹ค
    • ํ…Œ์ด๋ธ” A์˜ ๋ณ€๊ฒฝ์— ๋”ฐ๋ฅธ ํ…Œ์ด๋ธ” B์˜ ์˜ํ–ฅ์„ ์ƒ๊ฐํ•ด์„œ ์„ค๊ณ„ํ•œ๋‹ค
  1. ์ œ3์ •๊ทœํ™”๋กœ๋„ ๋ถ€์กฑํ•˜๋‹ค๋ฉด ๋” ์ •๊ทœํ™”ํ•˜์ž

 

 

 

 

 

์ฐธ๊ณ 

https://www.sunny-son.space/MySQL/RDBMstart07/

 

 

 

 

 

ACL

Access Control List์˜ ์ค„์ž„๋ง๋กœ redis 6๋ถ€ํ„ฐ ๋„์ž…๋œ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

 

๋‹ค๋ฅธ RDBMS(MySQL, Oracle ๋“ฑ)์—๋Š” ์œ ์ €๋ณ„๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ๋ฒ”์œ„๋ฅผ ์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ

redis์—๋Š” ์œ ์ €๋ผ๋Š” ๊ฐœ๋…์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

 

ACL์€ ์œ ์ €๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปค๋งจ๋“œ์™€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ํ‚ค ์ธก๋ฉด์—์„œ ํŠน์ • ์—ฐ๊ฒฐ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.

 

# 1
ACL SETUSER alice on >p1pp0 ~cached:* +get

# 2
AUTH alice p1pp0
  • #1 : alice ๋ผ๋Š” user๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    • ์ด๋ฆ„ 
    • ํŒจ์Šค์›Œ๋“œ : p1pp0
    • ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํ‚ค ํŒจํ„ด : cached ๋กœ ์‹œ์ž‘ํ•˜๋Š” key๋“ค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. (allkeys : ๋ชจ๋“  ํ‚ค์— ์ ‘๊ทผ ๊ฐ€๋Šฅ)
    • ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ปค๋งจ๋“œ : ์ ‘๊ทผํ•  ๋•Œ๋Š” get ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. (allcommands : ๋ชจ๋“  ๋ช…๋ น์–ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ)
  • #2 : alice ๊ณ„์ •์œผ๋กœ redis๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋งŒ ์„ค์ •ํ•œ๋‹ค๋Š” ๊ฒƒ์€ "default" user๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

ACL feature๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ user๋ฅผ ์ƒ์„ฑํ•˜๊ณ , user๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” key์™€ command๋ฅผ ์ง€์ •ํ•ด๋†“๋Š”๋‹ค๋ฉด, redis๋ฅผ ์กฐ๊ธˆ ๋” ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์‚ฌ์šฉ์ž ๋“ฑ๋ก

> ACL SETUSER user on/off >password keys commands
  • user: user-id๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • on/off: ์‚ฌ์šฉ ์—ฌ๋ถ€๋ฅผ ์ •ํ•œ๋‹ค. on์ด๋ฉด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ , off์ด๋ฉด ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
    • Off๋Š” ์‚ฌ์šฉ์ž๋Š” ๋“ฑ๋กํ•˜์ง€๋งŒ ์ผ๋‹จ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ๊ฒฝ์šฐ ๋˜๋Š” ๊ธฐ์กด ์‚ฌ์šฉ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ด ๊ฒฝ์šฐ ์ƒˆ๋กœ ๋กœ๊ทธ์ธ(auth)์€ ํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ด๋ฏธ ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž์˜ ์‚ฌ์šฉ์„ ๋ง‰์ง€๋Š” ๋ชปํ•œ๋‹ค.
  • >password: '>' ๊ตฌ๋ถ„์ž ๋‹ค์Œ์— ์ง€์ •ํ•œ๋‹ค. ์ž์œ ๋กญ๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํŒจ์Šค์›Œ๋“œ ์—†์ด ์‚ฌ์šฉํ•˜๋ ค๋ฉด nopass๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๋กœ๊ทธ์ธ ์‹œ ์–ด๋–ค ๋ฌธ์ž์—ด์ด๋“  ์ž…๋ ฅํ•ด๋„ ๋œ๋‹ค.
    • ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ง€์ •ํ–ˆ์„ ๊ฒฝ์šฐ: auth user password ๋กœ ๋กœ๊ทธ์ธ
  • keys:
    • ๋ชจ๋“  ํ‚ค : allkeys ๋˜๋Š” ~*
    • ํŠน์ • ํŒจํ„ด : ์˜ˆ) ~user*, ~key* ์ด๋ ‡๊ฒŒ ์ง€์ •ํ•˜๋ฉด user ๋˜๋Š” key๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ‚ค์— ๋Œ€ํ•ด์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ‚ค X : Resetkeys
    • ํ‚ค ํŒจํ„ด์„ ์ง€์ •ํ•˜๋ฉด ๋งค ๋ช…๋ น๋งˆ๋‹ค ๋น„๊ตํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์ด ๋–จ์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์„ฑ๋Šฅ์ด ์šฐ์„ ์ผ ๊ฒฝ์šฐ ์‚ฌ์šฉ์— ์ฃผ์˜
  • commands:
    • ๋ชจ๋“  ๋ช…๋ น : allcommands ๋˜๋Š” +@all
    • ๋ช…๋ น X : Nocommands ๋˜๋Š” -@all
    • ๋ช…๋ น์€ ๊ทธ๋ฃน ๋˜๋Š” ๋ช…๋ น์œผ๋กœ ์ถ”๊ฐ€ ๋˜๋Š” ๋บ„ ์ˆ˜ ์žˆ๋‹ค.
      • ๋ช…๋ น ๊ทธ๋ฃน : +@group/-@group, ๋ช…๋ น : +command/-command

 

์‚ฌ์šฉ์ž ์กฐํšŒ

ACL GETUSER user

 

์‚ฌ์šฉ์ž ์‚ญ์ œ

ACL DELUSER user

 

๋ณธ์ธ ํ™•์ธ

ACL WHOAMI

 

์‚ฌ์šฉ์ž ๋ฆฌ์ŠคํŠธ ์กฐํšŒ

ACL USERS

 

์‚ฌ์šฉ์ž ์ •๋ณด ๋ฆฌ์ŠคํŠธ ์กฐํšŒ

ACL LIST

 

์‚ฌ์šฉ์ž ์ •๋ณด ์ €์žฅ

ACL SAVE

 

์‚ฌ์šฉ์ž ์ •๋ณด ๋กœ๋“œ

ACL LOAD

 

๋ช…๋ น ๊ทธ๋ฃน ์กฐํšŒ

127.0.0.1:6379> ACL CAT
1) "keyspace"
2) "read"
3) "write"
4) "set"
5) "sortedset"
6) "list"
7) "hash"
8) "string"
9) "bitmap"
10) "hyperloglog"
11) "geo"
12) "stream"
13) "pubsub"
14) "admin"
15) "fast"
16) "slow"
17) "blocking"
18) "dangerous"
19) "connection"
20) "transaction"
21) "scripting"
  • keyspace: del, expire, flushdb, keys, ttl, scan ๋“ฑ
  • read: get, lrange, smembers, zrange, hget, xrange ๋“ฑ
  • write: set, lpush, sadd, zadd, hset, xadd ๋“ฑ
  • set: sadd, scard, srem, spop ๋“ฑ
  • sortedset: zadd, zcard, srem, zpopmin ๋“ฑ
  • list: lpush, llen, lrem, lpop ๋“ฑ
  • hash: hset, hlen, ldel, hget ๋“ฑ
  • string: set, get, incr ๋“ฑ
  • bitmap: setbit, bitop, getbit ๋“ฑ
  • hyperloglog: pfadd, pfmerge, pfcount, pfselftest
  • geo: geoadd, geodist, georadius ๋“ฑ
  • stream: xadd, xlen, xrange, xdel ๋“ฑ
  • pubsub: publish, subscribe, pubsub ๋“ฑ
  • admin: bgsave, config, debug, shutdown ๋“ฑ
    Admin ๋ช…๋ น์€ dangerous ๊ทธ๋ฃน์— ํฌํ•จ๋œ๋‹ค.
  • fast: get, lpush, hget ๋“ฑ
  • slow: lrem, mset, save ๋“ฑ
  • blocking: blpop, brpop, brpoplpush, bzpopmin, bzpopmax, xread, xreadgroup
  • dangerous: flushdb, keys, shutdown, info, client ๋“ฑ
  • connection: hello, client, auth, echo, ping, command
  • transaction: watch, multi, unwatch, discard, exec
  • scripting: evalsha, eval, script

๊ฐ ๋ช…๋ น์ด ์–ด๋А ๊ทธ๋ฃน์— ์†ํ•˜๋Š”์ง€๋Š” "command info ๋ช…๋ น"์„ ์‚ฌ์šฉํ•ด์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค๋ฉด, SET ๋ช…๋ น์€ write, string, slow์ด๊ณ , GET ๋ช…๋ น์€ read, string, fast์ด๋‹ค.

 

ํŒจ์Šค์›Œ๋“œ ์ƒ์„ฑ

ACL GENPASS [<bits>]
  • ๋””ํดํŠธ๋กœ 64๋ฐ”์ดํŠธ ๋ฌธ์ž์—ด๋กœ ํŒจ์Šค์›Œ๋“œ๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ SHA-256์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

ACL(Auth) ๋กœ๊ทธ

ACL LOG [<count> | RESET]

โœ… ๊ณต์‹๋ฌธ์„œ

https://redis.io/topics/acl

 

๋ชฉ์ฐจ

 

 

 

 

 

 

์ฐธ๊ณ 

http://redisgate.kr/redis/server/acl.php

https://sungbin.dev/post/Redis%20%ED%95%B4%ED%82%B9%EB%8B%B9%ED%95%9C%20%EC%9D%B4%EC%95%BC%EA%B8%B0

Pub/Sub - ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค

Pub/Sub์€ Publish/Subscribe์˜ ์ค„์ž„๋ง์ž…๋‹ˆ๋‹ค.

 

๋‹จ์–ด ์ž์ฒด์— ๊ตฌ๋…/๊ฒŒ์‹œ๋ผ๋Š” ๋œป์ด ์žˆ๋“ฏ์ด Redis์—์„œ Pub/Sub ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ฉด

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ฑ„๋„์„ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์Œ์œผ๋กœ์จ ์„œ๋กœ ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ตฌ์กฐ

ํด๋ผ์ด์–ธํŠธ๋Š” ํ•˜๋‚˜์˜ Topic์„ "Sub"ํ•˜๊ณ ,

ํ•ด๋‹น ํ† ํ”ฝ์„ "Sub"ํ•œ ๋‹ค๋ฅธ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น Topic์—์„œ "Pub"๋˜๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

 

MSDN blog

Topic์ด๋ผ๋Š” ๋งค๊ฐœ์ฒด๋ฅผ ํ†ตํ•ด์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋ฏ€๋กœ

์ˆ˜์‹ ์ž์™€ ๋ฐœ์‹ ์ž๊ฐ€ ์„œ๋กœ๋ฅผ ์•Œ์ง€ ๋ชปํ•˜๋”๋ผ๋„ ๋ฉ”์‹œ์ง€๋ฅผ ์†ก์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํŠน์ง•

๋ฉ”์‹œ์ง€๋Š” Redis์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „์†ก๋œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋˜๋ฉด ์ด๋ฅผ ๋ฐ”๋กœ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

 

์˜ˆ์‹œ

์ด๋ฅผ ํ†ตํ•ด Redis ์ง€์› ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์‹ค์‹œ๊ฐ„ ๋ฉ”์‹œ์ง• ๋ฐ ์•Œ๋ฆผ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์ฑ„ํŒ… ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ pub/sub๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•œ ์‚ฌ์šฉ์ž์—์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๋Š” ๊ฐ ๋Œ€ํ™”์— ๋Œ€ํ•œ ์ฑ„๋„์ด ์žˆ๊ณ 
  2. ๋Œ€ํ™”์— ์ฐธ์—ฌํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ํ•ด๋‹น ์ฑ„๋„์„ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํ•ด๋‹น ์ฑ„๋„์— ๋ฉ”์‹œ์ง€๋ฅผ ๊ฒŒ์‹œํ•˜๊ณ 
  4. ํ•ด๋‹น ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•ฉ๋‹ˆ๋‹ค.

 

๐Ÿ‘Ž ๋”ฐ๋ผ์„œ ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜์—ฌ ๊ด€๋ฆฌํ•ด์•ผ ๋˜๋Š” ๊ฒฝ์šฐ, Redis์˜ Pub/Sub์€ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ ์˜ˆ๋ฅผ ๋“ค์–ด PUSH ๋ฉ”์‹œ์ง€์ฒ˜๋Ÿผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ, ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๋ช…๋ น์–ด

Commands Syntax Description
subscribe channel [channel...] ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜์—ฌ, ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ๋ฐ›์Œ (๋™์‹œ์— ์—ฌ๋Ÿฌ๊ฐœ ๊ตฌ๋… ๊ฐ€๋Šฅ)
publish channel message ๋ฉ”์‹œ์ง€ ์ง€์ •ํ•œ ์ฑ„๋„๋กœ ์†ก์‹ 
pubsub subcommand [argument [argument ...]] ์„œ๋ฒ„์— ๋“ฑ๋ก๋œ ์ฑ„๋„์ด๋‚˜ ํŒจํ„ด์„ ์กฐํšŒ
psubscribe pattern [pattern ...] ์ฑ„๋„ ์ด๋ฆ„์„ ํŒจํ„ด์œผ๋กœ ๋“ฑ๋ก
unsubscribe [channel [channel ...]] subscribe๋กœ ๋“ฑ๋กํ•œ ์ฑ„๋„ ๊ตฌ๋… ํ•ด์ œ
punsubscribe [pattern [pattern ..]] psubscribe๋กœ ๋“ฑ๋กํ•œ ํŒจํ„ด ์ฑ„๋„ ๊ตฌ๋… ํ•ด์ œ

 

subscribe ๋ช…๋ น์–ด

ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ช…์‹œํ•œ ์ฑ„๋„์„ ๊ตฌ๋…ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฑ„๋„์„ ๋™์‹œ์— ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ๊ฐ’ : ๊ตฌ๋…ํ•œ ์ฑ„๋„๋ช…, integer๊ฐ’ ๋ฐ˜ํ™˜

> subscribe <์ฑ„๋„๋ช…>

> subscribe <์ฑ„๋„๋ช…1> <์ฑ„๋„๋ช…2> ... # ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ฑ„๋„์„ ๋“ฑ๋กํ•˜๋ฉด, ๊ฐ๊ฐ์˜ ์ฑ„๋„๋กœ ๋ฉ”์‹œ์ง€๊ฐ€ ๋ฐœํ–‰๋˜๋ฉด ๋ชจ๋‘ ์ˆ˜์‹ ํ•œ๋‹ค.

โœ”๏ธ redis์—์„œ channel์„ ์ƒ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋Š” ์—†๊ณ , subscribe๋กœ ์ฑ„๋„์„ ์ƒ์„ฑํ•˜๊ณ  ๊ตฌ๋…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

publish ๋ช…๋ น์–ด

์ด์ œ ch1์„ ๊ตฌ๋…ํ•˜๋Š” subscriber๊ฐ€ ์ƒ๊ฒผ์œผ๋ฏ€๋กœ,

publisher client์—์„œ publish ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๋ฉด

subscriber client์—์„œ ํ•ด๋‹น ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌ๋ฐ›๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

> publish <์ฑ„๋„> <๋‚ด์šฉ>
(integer) 2 # ์ฑ„๋„์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐœํ–‰ํ–ˆ๊ณ , 2๊ฐœ์˜ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „๋‹ฌ๋˜์—ˆ์Œ

publisher
subscriber

 

pubsub ๋ช…๋ น์–ด

administrator๊ฐ€ ํšจ์œจ์ ์œผ๋กœ subscriber๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

  • channels : ํ™œ์„ฑํ™” ๋œ ์ฑ„๋„
  • numsub : ํŠน์ • ์ฑ„๋„์„ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” subscriber์˜ ๊ฐœ์ˆ˜ ํ™•์ธ
    • pattern subscription์œผ๋กœ ๊ตฌ๋…ํ•˜๊ณ  ์žˆ๋Š” subscriber๋Š” count์— ํฌํ•จ๋˜์ง€ ์•Š์Œ
  • numpat : pattern subscription์˜ subscriber ๊ฐœ์ˆ˜ ํ™•์ธ
    • ํŠน์ • ์ฑ„๋„์˜ subscriber๊ฐ€ ์•„๋‹Œ, ์ „์ฒด subscriber ๊ฐœ์ˆ˜ return
# ํ™œ์„ฑํ™”๋œ ์ฑ„๋„์ด ์—†์„ ๋•Œ
> pubsub channels
(empty array)

# ์•„๋ž˜์˜ SUBSCRIBE ๋ช…๋ น์–ด๋กœ ์ฑ„๋„์„ ํ•œ ๊ฐœ ํ™œ์„ฑํ™” ์‹œ์ผฐ์„ ๋•Œ
> pubsub channels
1) "c1"

# ์ฑ„๋„์„ ๊ตฌ๋…์ค‘์ธ ํด๋ผ์ด์–ธํŠธ ์ˆ˜ ํ™•์ธ
> pubsub numsub ch1
1) "ch1"
2) (integer) 1

# ํŒจํ„ดํ˜•์œผ๋กœ ๋“ฑ๋ก๋œ ํด๋ผ์ด์–ธํŠธ ์ˆ˜ ํ™•์ธ
> pubsub numpat
(integer) 0

 

psubscribe ๋ช…๋ น์–ด

์ˆ˜์‹ ํ•  ์ฑ„๋„ ์ด๋ฆ„์˜ ํŒจํ„ด์„ ๋“ฑ๋กํ•˜๋Š” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

 

ํŒจํ„ด์€ ์•„๋ž˜์™€ ๊ฐ™์€ glob-style์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

  • '?' : ํ•œ ๊ธ€์ž ๋Œ€์น˜
  • '*' : ๊ณต๋ฐฑ์ด๋‚˜ ์—ฌ๋Ÿฌ ๊ธ€์ž ๋Œ€์น˜
# ํŒจํ„ด์„ ๋“ฑ๋กํ•˜์—ฌ ์ˆ˜์‹ ์‹œ์ž‘
> psubscribe c*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "c*"
3) (integer) 1

# ํŒจํ„ด ์ฑ„๋„์„ ๋“ฑ๋ก๋œ ์ฑ„๋„์—๋Š” ํฌํ•จ๋˜์ง€ ์•Š์Œ
127.0.0.1:6379> pubsub channels
1) "c1"

# ํŒจํ„ด ์กฐํšŒ : 1๊ฐœ ํ™•์ธ
127.0.0.1:6379> pubsub numpat
(integer) 1

# ๋“ฑ๋กํ•˜์ง€ ์•Š์•˜๋˜ ์ฑ„๋„ ch2๋กœ ๋ฉ”์‹œ์ง€ ๋ณด๋ƒ„
> publish ch2 "test 2"
(integer) 1

# ํŒจํ„ด์œผ๋กœ ๊ตฌ๋… ์‹ ์ฒญํ•œ ์ฑ„๋„์— ๋ฉ”์‹œ์ง€๊ฐ€ ์ถ”๊ฐ€๋จ
> psubscribe c*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "c*"
3) (integer) 1
1) "pmessage"
2) "c*"
3) "c2"
4) "test 2"

 

unsubscribe / punsubscribe ๋ช…๋ น์–ด

  • ๊ธฐ๋ณธ : redis-cli์—์„œ ctrl+c๋กœ ๊ตฌ๋… ์ข…๋ฃŒ
  • ๋ณ„๋„ ํด๋ผ์ด์–ธํŠธ : unsubscribe ๋ช…๋ น์–ด๋กœ ์ˆ˜์‹  ์ค‘๋‹จ
  • ํŒจํ„ด ์ฑ„๋„ : punsubscribe ๋ช…๋ น์–ด๋กœ ์ˆ˜์‹  ์ค‘๋‹จ
  • ์ฑ„๋„๋ช… ์ž…๋ ฅํ•˜์ง€ ์•Š์œผ๋ฉด : ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์— ๋“ฑ๋ก๋œ ๋ชจ๋“  ์ฑ„๋„ ์‚ญ์ œ
> unsubscribe ch1*
1) "unsubscribe"
2) "ch*"
3) (integer) 1

> punsubscribe ch1*
1) "punsubscribe"
2) "ch*"
3) (integer) 1

 

 

 

 

์ฐธ๊ณ 

https://inpa.tistory.com/entry/REDIS-%F0%9F%93%9A-PUBSUB-%EA%B8%B0%EB%8A%A5-%EC%86%8C%EA%B0%9C-%EC%B1%84%ED%8C%85-%EA%B5%AC%EB%8F%85-%EC%95%8C%EB%A6%BC

https://velog.io/@tilsong/Redis%EC%9D%98-%EC%A3%BC%EC%9A%94-%EA%B8%B0%EB%8A%A5-2-PubSub

+ Recent posts