๊ฐ์
์น์์ผ๋ง์ ์ด์ฉํด ์ค์๊ฐ ์ฑํ ์๋น์ค๋ฅผ ๊ตฌํํ๋ ค ํ์ ๋, ์ฌ๋ฌ ์ ์ฝ์ด ์์์ ๋๊ผ๋ค. ์น์์ผ ์์ฒด์๋ ๋ฉ์์ง ์ ์ก ๊ท์น์ด ์ ํด์ ธ ์์ง ์์ ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ์ํด์ผ ํ๋ ๋ถํธํจ์ด ์๊ณ , PUB/SUB ๊ฐ๋ ์ด ์์ด ํน์ ์ฌ์ฉ์๋ ๊ทธ๋ฃน์ ๋์์ผ๋ก ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ ์ง์ ๊ตฌํํด์ผ ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด STOMP๋ฅผ ๋์ ํ์ง๋ง, ์ด๊ธฐ ์ค์ ๊ณผ์ ์์ ๋ฐ์ํ ์ฌ๋ฌ ์ํ์ฐฉ์ค์ ๊ฐ๋ ๋ถ์กฑ์ผ๋ก ์ธํด ์์์น ๋ชปํ ๋ฌธ์ ๋ค์ ๊ฒฝํํ๋ค.
์ด์ STOMP์ ๊ฐ๋ ๊ณผ ๋์ ๋ฐฉ์์ ๊น์ด ์๊ฒ ํ์ตํ์ฌ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์น์์ผ๋ง์ผ๋ก ์ค์๊ฐ ํต์ ์ ๊ตฌํํ ์ ์๋ ์ด์
์น์์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ ์๋ฐฉํฅ ํต์ ์ ์ง์ํ๋ ์ ์์ค ํ๋กํ ์ฝ์ด๋ค.
ํ์ง๋ง ๋จ์ํ ๋ฐ์ดํฐ ์ ์ก ์ฑ๋์ผ ๋ฟ, ๋ฉ์์ง ๋ผ์ฐํ , ๊ทธ๋ฃน ๊ด๋ฆฌ(PUB/SUB), ๋ฉ์์ง ๊ตฌ์กฐ ์ ์ ๋ฑ์ ๊ธฐ๋ฅ์ด ๋ถ์กฑํ๋ค.
์น์์ผ์ด ๊ฐ์ง ํ๊ณ
๏น ๋ฉ์์ง ๋ผ์ฐํ , Routing: ํน์ ์ฌ์ฉ์๋ฅผ ๊ตฌ๋ถํ๊ฑฐ๋, ํน์ ๊ทธ๋ฃน(์ฑ๋)์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ๊ธฐ๋ฅ์ด ์๋ค.
๏น ๋ฉ์์ง ํฌ๋งท ์ ์ ๋ถ์กฑ: ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, ์ ์กํ ๋ฐ์ดํฐ์ ํฌ๋งท์ ์ ์ํ๋ ํ์ค์ด ์๋ค.
๏น ๊ตฌ๋ (Publish-Subscribe) ๋ชจ๋ธ ๋ฏธ์ง์: PUB/SUB ๋ชจ๋ธ์ ์ง์ ๊ตฌํํด์ผ ํ๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด STOMP, Simple Text Oriented Messaging Protocol์ด ๋ฑ์ฅํ๋ค.
STOMP๋?
STOMP๋ ์น์์ผ ์์์ ๋์ํ๋ ๋ฉ์์ง ํ๋กํ ์ฝ๋ก, ๋ฉ์์ง ๋ผ์ฐํ ๋ฐ PUB/SUB ๊ธฐ๋ฅ์ ์ง์ํ๋ ๊ณ ์์ค ๋ฉ์์ง ํ๋กํ ์ฝ์ด๋ค.
์ฆ, ์น์์ผ์ ๋จ์ํ ๋ฐ์ดํฐ ํต๋ก์ด๋ฉฐ, STOMP๋ ๊ทธ ์์์ ๋ฉ์์ง๋ฅผ ์ด๋ป๊ฒ ์ฃผ๊ณ ๋ฐ์์ง ์ ์ํ๋ ํ๋กํ ์ฝ์ด๋ค.
STOMP๊ฐ ์ ๊ณตํ๋ ์ฃผ์ ๊ธฐ๋ฅ
1. ๋ฉ์์ง์ ๋ชฉ์ ์ง(destination) ์ง์
๏น ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ฑ๋(”/topic/chat”)์ ๊ตฌ๋ ํ๋ฉด, ์๋ฒ๊ฐ ํด๋น ๊ฒฝ๋ก๋ก ์ ์ก๋ ๋ฉ์์ง๋ฅผ ๋ธ๋ก๋์บ์คํธ ํ ์ ์๋ค.
2. Pub/Sub ๋ชจ๋ธ ์ง์
๏น STOMP๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ๊ฐ์ ์ฑ๋์ ๊ตฌ๋ ํ๊ณ , ์๋ฒ๊ฐ ํด๋น ์ฑ๋๋ก ๋ฉ์์ง๋ฅผ ๋ธ๋ก๋์บ์คํธํ ์ ์๋ค.
3. ๋ฉ์์ง ํค๋ ์ง์
๏น HTTP ํค๋์ฒ๋ผ, STOMP ๋ฉ์์ง์๋ ์ถ๊ฐ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ ํค๋๋ฅผ ํฌํจํ ์ ์๋ค.
4. ACK(ํ์ธ ์๋ต) ์ง์
๏น ๋ฉ์์ง๋ฅผ ๋ณด๋ธ ํ, ์์ ํ์ธ(Acknowledgment, ACK)์ ๋ฐ์ ์ ์๋ค.
STOMP์ ๋์ ๊ตฌ์กฐ (PUB/SUB ๋ชจ๋ธ)
์๋ ๊ทธ๋ฆผ์ฒ๋ผ, ๋ฐํ์(Publisher)๊ฐ ๋ฉ์์ง๋ฅผ ๋ธ๋ก์ปค(Broker)์ ์ ์กํ๋ฉด, ์ด๋ฅผ ๊ตฌ๋ ์(Subscriber)๋ค์ด๋ฐ์๋ณผ ์ ์๋ค.
์ฆ, ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ง์ ์์ฒญํ๋ ๋ฐฉ์์ด ์๋๋ผ, ํน์ ์ฑ๋(Topic)์ ๊ตฌ๋ ํ์ฌ ๋ฉ์์ง๋ฅผ ๋ฐ๋ ๋ฐฉ์์ด๋ค.
๏น Publisher(๋ฐํ์)๊ฐ ํน์ ์ฃผ์ (Topic)๋ก ๋ฉ์์ง๋ฅผ ์ ์กํ๋ค.
๏น Broker(์ค์ ๋ฉ์์ง ๊ด๋ฆฌ์)๋ ์ด ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ์๋ค์๊ฒ ์ ๋ฌํ๋ค.
๏น Subscriber(๊ตฌ๋ ์)๋ ํด๋น ํ ํฝ์ ๊ตฌ๋ ํ๊ณ ์๋ค๋ฉด, ํด๋น ๋ฉ์์ง๋ฅผ ์๋์ผ๋ก ์์ ํ๋ค.
์ด์ฒ๋ผ, STOMP๋ ์น์์ผ์ ํ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ๋ชฉ์ ์ง(ํ ํฝ)๋ก ๋ถ๋ฐฐํ๋ ์ญํ ์ ์ํํ๋ค.
STOMP ๋ฉ์์ง ํ๋ ์ ๊ตฌ์กฐ
STOMP๋ ํ ์คํธ ๊ธฐ๋ฐ ํ๋กํ ์ฝ๋ก, ํ๋ ์์ด๋ผ๋ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ์ก์์ ํ๋ค.
[ STOMP ๋ฉ์์ง ๊ธฐ๋ณธ ๊ตฌ์กฐ ]
๏น COMMAND: ํด๋น ํ๋ ์์ด ์ํํ ๋์ (CONNECT, SEND, SUBSCRIBE ๋ฑ)
๏น Header: ์ถ๊ฐ์ ์ธ ๋ฉํ๋ฐ์ดํฐ(๋ชฉ์ ์ง, ๋ฉ์์ง ID ๋ฑ)
๏น Body: ๋ฉ์์ง์ ์ค์ ๋ด์ฉ
๏น ^@(NULL ๋ฌธ์): STOMP ํ๋ ์์ ๋์ ์๋ฏธ
STOMP์ ํธ๋์ ฐ์ดํฌ ๊ณผ์
์น์์ผ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, STOMP๋ ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ์ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ๊ณผ์ (ํธ๋์ ฐ์ดํฌ)์ด ํ์ํ๋ค.
์ด ๊ณผ์ ์์ ์ฃผ์ํ STOMP ํ๋ ์์ ๋ค์๊ณผ ๊ฐ๋ค.
1. ํด๋ผ์ด์ธํธ ์ฐ๊ฒฐ ์์ฒญ, CONNECT
๏น ํด๋ผ์ด์ธํธ๊ฐ STOMP ์๋ฒ์ ์ฐ๊ฒฐ์ ์์ฒญํ ๋ ์ฌ์ฉ๋๋ค.
๏น ์น์์ผ์ Upgrade: websocket ์์ฒญ๊ณผ ์ ์ฌํ ์ญํ ์ ํ๋ค.
2. ์๋ฒ์ ์ฐ๊ฒฐ ์น์ธ, CONNECTED
๏น ์๋ฒ๊ฐ ์ฐ๊ฒฐ์ ์น์ธํ๋ฉด CONNECTED ํ๋ ์์ ๋ฐํํ๋ค.
๏น ์น์์ผ์ 101 Switching Protocols ์๋ต๊ณผ ์ ์ฌํ ์ญํ ์ ํ๋ค.
3. ํน์ ์ฃผ์ ๊ตฌ๋ ์์ฒญ, SUBSCRIBE
๏น ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ฑ๋(Topic)์ ๊ตฌ๋ ํ ๋ ์ฌ์ฉ๋๋ค.
๏น ํด๋ผ์ด์ธํธ๋ “/topic/chat”์ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ ์๋ค.
4. ๋ฉ์์ง ์ ์ก, SEND
๏น ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ฑ๋๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋ ์ฌ์ฉ๋๋ค.
๏น ์๋ฒ๋ ํด๋น ์ฑ๋์ ๊ตฌ๋ ํ ๋ชจ๋ ํด๋ผ์ด์ธํธ์๊ฒ ํด๋น ๋ฉ์์ง๋ฅผ ์ ์กํ๋ค.
5. ๋ฉ์์ง ์์ , MESSAGE
๏น ์๋ฒ๊ฐ ๊ตฌ๋ ์ค์ธ ํด๋ผ์ด์ธํธ๋ค์๊ฒ ๋ฉ์์ง๋ฅผ ์ ์กํ ๋ ์ฌ์ฉ๋๋ค.
๏น ๊ตฌ๋ ํ ํด๋ผ์ด์ธํธ๋ ์๋์ผ๋ก ํด๋น ๋ฉ์์ง๋ฅผ ์์ ํ๋ค.
6. ๊ตฌ๋ ํด์ , UNSUBSCRIBE
๏น ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ๋ ์ ์ทจ์ํ ๋ ์ฌ์ฉ๋๋ค.
๏น ๊ตฌ๋ ์ ์ค๋จํ๊ณ ๋ฉ์์ง๋ฅผ ๋ ์ด์ ๋ฐ์ง ์๋๋ก ์ค์ ํ๋ค.
7. ์ฐ๊ฒฐ ์ข ๋ฃ, DISCONNECT
๏น ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ์ ์ข ๋ฃํ ๋ ์ฌ์ฉ๋๋ค.
๏น ์น์์ผ์ socket.close( ) ์ ๊ฐ์ ์ญํ ์ ํ๋ค.
STOMP์ ์น์์ผ์ ๊ด๊ณ
STOMP๋ ์น์์ผ์ ๊ธฐ๋ฐ์ผ๋ก ๋์ํ๋ ์์ ํ๋กํ ์ฝ๋ก, ์น์์ผ์ด ํต์ ์ ์ํ ์ ์์ค ์ฐ๊ฒฐ์ ์ ๊ณตํ๋ฉด, STOMP๋ ์ด๋ฅผ ํ์ฉํ์ฌ ๋ฉ์์ง์ ๊ด๋ฆฌํ๋ ์ญํ ์ ์ํํ๋ค. ์ฆ, ์น์์ผ ์์ด STOMP๋ ๋จ๋ ์ผ๋ก ๋์ํ ์ ์๋ค.
์๋ ๊ทธ๋ฆผ์ STOMP๊ฐ ์น์์ผ ์์์ ์ด๋ป๊ฒ ๋์ํ๋์ง ์๊ฐ์ ์ผ๋ก ํํํ ๊ฒ์ด๋ค.
๏น TCP/IP Network Layer: ๋คํธ์ํฌ ํต์ ์ ๋ด๋นํ๋ค.
๏น WebSocket Communication: ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ ์ค์๊ฐ ์ฐ๊ฒฐ์ ๊ด๋ฆฌํ๋ค.
๏น STOMP Messaging Layer: ๋ฉ์์ง ๋ผ์ฐํ , PUB/SUB, ACKC ๋ฑ์ ๊ด๋ฆฌํ๋ค.
๏น Web Application: UI๊ฐ ๋ฉ์์ง๋ฅผ ์ก์์ ํ๋ ์ต์์ ๊ณ์ธต์ด๋ค.
STOMP๋ ์น์์ผ์ด ์ ๊ณตํ์ง ์๋ ๋ฉ์์ง ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ฌ, ๋ณด๋ค ํจ์จ์ ์ด๊ณ ์ฒด๊ณ์ ์ธ ์ค์๊ฐ ๋ฉ์์ง์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
์น์์ผ์ ํตํด ํด๋ผ์ด์ธํธ-์๋ฒ ๊ฐ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๊ณ , STOMP๊ฐ ์ด๋ฅผ ํ์ฉํ์ฌ ๋ฉ์์ง๋ฅผ ๋ชฉ์ ์ง์ ๋ฐ๋ผ ๋ผ์ฐํ ํ๊ณ , PUB/SUB์ ์ง์ํ๋ฉฐ, ๋ฉ์์ง ํ์ธ(ACK) ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
๋ฐ๋ผ์ ์น์์ผ๋ง์ผ๋ก ๊ตฌํ์ด ์ด๋ ค์ด ์ค์๊ฐ ์ฑํ , ์๋ฆผ ์์คํ , ์ฃผ์ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ ๊ฐ์ ์๋น์ค์์ STOMP๋ ํ์์ ์ธ ์ญํ ์ ํ๋ค.
'TECH STACK REVIEW > ๐ฌ WEB SOCKET' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์น์์ผ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ๋์ ์๋ฆฌ (0) | 2024.11.23 |
---|