์จ๋ผ์ธ ๊ฐ์
>PHP - ์ต์๊ธ
๐ PHP ์ต์๊ธ - 2์ฃผ์ฐจ: ๋ฉ์์ง ํ (Message Queue) ํ์ฉ - 02 ๋น๋๊ธฐ ์ฒ๋ฆฌ, ์์ ํ (Queue)
์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
- ๋ผ์ด์ ์ค: free
- ์ด์์ฒด์ :
- ํ์ผ ํฌ๊ธฐ: 0
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
- ๋ค์ด๋ก๋ ์: 1
- ์กฐํ์: 61
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
- ๋ฑ๋ก์ผ: 2025-10-06 11:48:23
- ์ค๋ช
์๋ ํ์ธ์. ์ด๋ฒ ์๊ฐ์๋ #PHP ๊ฐ๋ฐ์์ ์ค์ํ ๊ฐ๋ ์ค ํ๋์ธ **๋ฉ์์ง ํ(Message Queue)**๋ฅผ ํ์ฉํ #๋น๋๊ธฐ ์ฒ๋ฆฌ์ #์์ ํ(Queue)์ ๋ํด ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.
๋ฉ์์ง ํ๋ ์์คํ ๊ตฌ์ฑ ์์ ๊ฐ์ #๋์จํ ๊ฒฐํฉ(Decoupling)์ ๊ฐ๋ฅํ๊ฒ ํ๊ณ , ์์คํ ์ #์์ ์ฑ๊ณผ #ํ์ฅ์ฑ์ ๋์ด๋ ๋ฐ ํต์ฌ์ ์ธ ์ญํ ์ ํฉ๋๋ค.
๋ฉ์์ง ํ์ ๋น๋๊ธฐ ์ฒ๋ฆฌ์ ํ์์ฑ
์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์์ ์์ฒญ์ ์ฒ๋ฆฌํ ๋, #์ด๋ฉ์ผ ๋ฐ์ก, #๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, #์ด๋ฏธ์ง/์์ ๋ณํ๊ณผ ๊ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ด ์์ต๋๋ค. ์ด๋ฌํ ์์ ์ ์ฌ์ฉ์ ์์ฒญ ์ค๋ ๋ ๋ด์์ ๋๊ธฐ์ (Synchronous)์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์๋ต ์ง์ฐ: ์ฌ์ฉ์๋ ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ฏ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋ฉ๋๋ค.
์๋ฒ ๋ถํ ์ฆ๊ฐ: ๊ธด ์์ ์ด ์๋ฒ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ์ฌ ๋ค๋ฅธ ์์ฒญ ์ฒ๋ฆฌ์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ํฉ๋๋ค.
ํ์์์ ๋ฐ์ ๊ฐ๋ฅ์ฑ: ์์ ์๊ฐ์ด ๊ธธ์ด์ง๋ฉด ์น ์๋ฒ์ #ํ์์์ ์ค์ ์ ์ํด ์์ฒญ์ด ์ค๋จ๋ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋น๋๊ธฐ์ (Asynchronous) ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ฉฐ, #๋ฉ์์ง ํ๋ ์ด ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ๋ ๊ฐ์ฅ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋์ ๋๋ค.
์์ ํ(Work Queue)์ ๊ฐ๋ ๊ณผ ์๋ ์๋ฆฌ
#์์ ํ ๋๋ #ํ์คํฌ ํ(Task Queue)๋ #๋ฉ์์ง ํ์ ํ ํํ๋ก, ์ฃผ๋ก ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ #๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.
๐ก ์๋ ์๋ฆฌ
์์ฐ์ (Producer): ์น ์๋ฒ์ ๊ฐ์ด ์์ ์ ์์ฒญํ๋ ์ฃผ์ฒด์ ๋๋ค. ์ด๋ค์ ์ํํ ์์ ์ ๋ํ ์ ๋ณด(๋ฉ์์ง/์์ )๋ฅผ ์์ฑํ์ฌ #ํ(Queue)์ Enqueue(๋ฃ๊ธฐ) ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, "์ฌ์ฉ์ A์๊ฒ ํ์ ์ด๋ฉ์ผ ๋ณด๋ด๊ธฐ"๋ผ๋ ์์ ์ ํ์ ๋ฃ์ต๋๋ค.
ํ (Queue): #FIFO(First-In, First-Out) ์์น์ ๋ฐ๋ผ ๋ฉ์์ง๊ฐ ์์๋ก ์ ์ฅ๋๋ ๊ณต๊ฐ์ ๋๋ค.
์๋น์ / ์์ปค (Consumer / Worker): #ํ์์ ๋ฉ์์ง๋ฅผ Dequeue(๊บผ๋ด๊ธฐ) ํ์ฌ ์ค์ ์์ ์ ์ํํ๋ ๋ณ๋์ ๋ ๋ฆฝ์ ์ธ ํ๋ก์ธ์ค์ ๋๋ค. #์์ปค ํ๋ก์ธ์ค๋ ์น ์๋ฒ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํ๋๋ฉฐ, ํ์ ์๋ก์ด ์์ ์ด ๋ค์ด์ค๋ฉด ์ด๋ฅผ ๊ฐ์ ธ๊ฐ ์ฒ๋ฆฌํฉ๋๋ค.
์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์์ฒญ์ ํ์ ์์ ์ ๋ฃ๋ ์ฆ์ ์๋ต์ ๋ฐ์ ์ ์์ด ์ฌ์ฉ์ ๊ฒฝํ์ ํด์น์ง ์๊ณ , ์ค์ ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ #์์ปค์ ์ํด ๋น๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋ฉ๋๋ค.
PHP์์ ๋ฉ์์ง ํ ํ์ฉ
#PHP๋ ๋ณธ์ง์ ์ผ๋ก #๋๊ธฐ์ ์ธ์ด์ด์ง๋ง, #Laravel์ #Queue ์์คํ ์ด๋ #Symfony Messenger ์ปดํฌ๋ํธ, ๋๋ #RabbitMQ, #Redis, #Beanstalkd, #Apache Kafka, #AWS SQS ๊ฐ์ ์ ์ฉ #๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ํ์ฉํ์ฌ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค.
๐ ๏ธ ์ฃผ์ ํ์ฉ ์๋๋ฆฌ์ค
๋๊ท๋ชจ ์ด๋ฉ์ผ/์๋ฆผ ๋ฐ์ก: ์์ฒ ๋ช ์ ์ฌ์ฉ์์๊ฒ #๋ด์ค๋ ํฐ๋ #๋ง์ผํ ์ด๋ฉ์ผ์ ํ ๋ฒ์ ๋ณด๋ผ ๋ ํ์ ์์ ์ ๋ฃ์ด #๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค.
์ธ๋ถ ์๋น์ค ์ฐ๋: #๊ฒฐ์ ์์คํ ์ด๋ #SMS ๋ฐ์ก ๋ฑ ์ธ๋ถ #API ํธ์ถ ์, ์๋ต ์ง์ฐ์ ๋ฐฉ์งํ๊ธฐ ์ํด ํ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ์ผ ์ฒ๋ฆฌ: #ํ์ผ ์ ๋ก๋ ํ #์ด๋ฏธ์ง ๋ฆฌ์ฌ์ด์ง, #๋์์ ์ธ์ฝ๋ฉ ๊ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ํ์ฒ๋ฆฌ ์์ ์ ํ์ ๋งก๊น๋๋ค.
๋ฐ์ดํฐ ๋๊ธฐํ: ์๋ก ๋ค๋ฅธ ์์คํ ๊ฐ์ ๋๋์ #๋ฐ์ดํฐ๋ฅผ ์ผ๊ด์ฑ ์๊ฒ #๋น๋๊ธฐ์ ์ผ๋ก ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉํฉ๋๋ค.
โ๏ธ PHP ์์ปค ํ๋ก์ธ์ค
#PHP๋ก ์์ฑ๋ #์์ปค ํ๋ก์ธ์ค๋ ๋ณดํต #CLI(Command Line Interface) ํ๊ฒฝ์์ ๋ฌดํ ๋ฃจํ ํํ๋ก ์คํ๋๋ฉฐ, ์ง์ ๋ ํ๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, #Laravel์์๋ php artisan queue:work ๋ช
๋ น์ด๋ฅผ ํตํด ์์ปค๋ฅผ ์คํํ๊ณ , ์ด #์์ปค๋ค์ด #ํ์ ๋ค์ด์จ ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.
๋ฉ์์ง ํ ๋์ ์ ์ด์ (์ฅ์ )
์ด์ | ์ค๋ช |
|---|---|
๋น๋๊ธฐ์ฑ | ์ฌ์ฉ์ ์์ฒญ์ ์ฆ์ ์๋ตํ๊ณ , ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ ์ ๋์ค์ ์ฒ๋ฆฌํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํต๋๋ค. |
๋์จํ ๊ฒฐํฉ | ์์ฐ์์ ์๋น์๊ฐ ์๋ก์ ์กด์ฌ๋ฅผ ๋ชฐ๋ผ๋ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ํตํด ํต์ ํ๋ฏ๋ก ์์คํ ๊ฐ์ ์ข ์์ฑ์ด ๋ฎ์์ง๋๋ค. |
๋ถํ ๋ถ์ฐ | ๊ฐ์์ค๋ฌ์ด ํธ๋ํฝ ์ฆ๊ฐ(ํผํฌ ๋ก๋) ์, ๋ฉ์์ง๋ฅผ ํ์ ์ ์ฅํ์ฌ ์์คํ ์ด ๊ฐ๋นํ ์ ์๋ ์๋๋ก ์์ ์ ๋ถ์ฐ ์ฒ๋ฆฌํฉ๋๋ค. |
ํ๋ ฅ์ฑ/์์ ์ฑ | ์๋น์(์์ปค)์ ์ฅ์ ๊ฐ ๋ฐ์ํด๋ ๋ฉ์์ง๋ ํ์ ์์ ํ๊ฒ ๋จ์์๋ค๊ฐ, ์์ปค๊ฐ ๋ณต๊ตฌ๋๋ฉด ์์ ์ ์ฌ๊ฐํ ์ ์์ต๋๋ค. |
ํ์ฅ์ฑ | ์ฒ๋ฆฌ๋์ด ๋ถ์กฑํ๋ฉด ์์ปค ํ๋ก์ธ์ค์ ๊ฐ์๋ง ๋๋ ค ์ฝ๊ฒ ์์คํ ์ ํ์ฅํ ์ ์์ต๋๋ค. |
๋ฉ์์ง ํ๋ฅผ ํ์ฉํ๋ ๊ฒ์ ํ๋์ #๊ณ ๊ฐ์ฉ์ฑ, #๋๊ท๋ชจ ๋ถ์ฐ ์์คํ ์ ๊ตฌ์ถํ๋ ๋ฐ ์์ด ํ์์ ์ธ ๊ธฐ์ ์ ๋๋ค.
๊นจ๋ํ IP๋ง ๋ชจ์๋์ ๊ณณ, VPN PC, ๋ชจ๋ฐ์ผ ์ง์์ผ๋ก ์ด๋ค ๊ธฐ๊ธฐ์์๋ OK!