-
๊ธฐ์กด ์์ด๋์ด ๋์ถ ํ์์์ ์์ฑํ AI๋ฅผ ํ์ฉํ๋ ์๋๋ ๊ทธ ์์ฒด๋ก ํ์ ์ ์ด์์ผ๋, AI์๊ฒ ์ง๋ฌธ์ ๋์ง๋ฉฐ ๋ฐ์ํ๋ ํ๋ฆ์ ๋จ์ ๊ณผ ์ฐธ์ฌ์์ ์ง์ค๋ ฅ ์ ํ ๋ฌธ์ ๋ ์ค์ํ ๋์ ๊ณผ์ ๋ก ๋จ์ ์์์ต๋๋ค. ์ด๋ AI๊ฐ ํ์ ๋์ค ๋จ์ ๋๊ตฌ๋ก ์ฌ์ฉ๋ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ์ด๋ฉฐ, ์ฐธ์ฌ์๋ค์ด AI์ ์ญํ ์ ์ ๋๋ก ํ์ฉํ์ง ๋ชปํ ๊ฒฝ์ฐ ๋์ฑ ๋๋๋ฌ์ก์ต๋๋ค.
-
๋ํ, ํ์์ ์ฒ์ ์ฐธ์ฌํ๋ ์ฌ๋๋ค, ํนํ ๋ฏ์ ํ๊ฒฝ์ด๋ ์๋ก์ด ์ฌ๋๋ค๊ณผ ํจ๊ปํ ๋ ๊ธด์ฅ๊ฐ์ผ๋ก ์ธํด ์์ ์ ์๊ฒฌ์ ์์ ๋กญ๊ฒ ํํํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ๋ฐ์ํ์ต๋๋ค. ์ด๋ ํ์์ ํจ์จ์ฑ์ ์ ํ์ํค๊ณ , ์ฐฝ์์ ์ธ ์์ด๋์ด ๋์ถ์ ๊ธฐํ๋ฅผ ๋์น๋ ๊ฒฐ๊ณผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค.
-
์ด๋ฌํ ๋ฌธ์ ๋ค์ ํด๊ฒฐํ๊ธฐ ์ํด AI๋ฅผ ํ์์ ์ง์ ์ฐธ์ฌ์ํค๊ณ , ์ค์๊ฐ์ผ๋ก ์์ด๋์ด๋ฅผ ์ ๊ณตํ๋ฉฐ ๋ ผ์๋ฅผ ์ด์งํ๋ ์ญํ ์ ๋งก๊ธฐ๋ ๋ฐฉ์์ ๋์ ํ๊ณ ์ ํฉ๋๋ค. AI๊ฐ ํ์ ์ผ์์ผ๋ก์ ์ค์๊ฐ ํ์ ์ ๊ฐํํจ์ผ๋ก์จ, ํ์์ ์ง์ค๋์ ํจ์จ์ฑ์ ๋์ด๊ณ , ์ฐธ์ฌ์๋ค์ด ์์ ๋กญ๊ณ ํธ์ํ๊ฒ ์์ด๋์ด๋ฅผ ๊ณต์ ํ ์ ์๋ ํ๊ฒฝ์ ์กฐ์ฑํ๊ณ ์ ํฉ๋๋ค.
-
์ฐฝ์์ ์ธ ์์ด๋์ด ๋์ถ: ๋ผ์ด๋ ๋ก๋น ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ๋ชจ๋ ์ฐธ์ฌ์๊ฐ ๊ณจ๊ณ ๋ฃจ ์๊ฒฌ์ ๊ณต์ ํ ์ ์๋๋ก ์ฅ๋ คํ๋ฉฐ, ์ด๋ฅผ ํตํด ๋ ์ฐฝ์์ ์ด๊ณ ๋ค์ํ ์์ด๋์ด๋ฅผ ๋์ถํฉ๋๋ค.
-
AI์ ์ธ๊ฐ์ ํ์ ๊ฐํ: AI๊ฐ ํ์์ ์ผ์์ผ๋ก์ ์ค์๊ฐ์ผ๋ก ์์ด๋์ด๋ฅผ ์ ๊ณตํ๊ณ , ๋ ผ์์ ๋ฐฉํฅ์ ์ ์ํ๋ฉฐ, ์ด๋ฅผ ํตํด ์ธ๊ฐ ์ฐธ์ฌ์๋ค๊ณผ์ ํ์ ์ ๊ทน๋ํํฉ๋๋ค.
-
ํจ์จ์ ์ธ ํ์ ์ด์: AI์ ๋ผ์ด๋ ๋ก๋น ๊ธฐ๋ฒ์ ๊ฒฐํฉ์ผ๋ก ํ์๊ฐ ์ค๋จ ์์ด ํจ์จ์ ์ผ๋ก ์งํ๋ ์ ์๋๋ก ํฉ๋๋ค. ๋ํ, ์ด๋ฌํ ๋ฐฉ์์ ์ฐธ์ฌ์์ ์ง์ค๋ ฅ์ ์ ์งํ๋ฉฐ ๋ณด๋ค ๋ง์ ์ฐฝ์์ ์์ด๋์ด๋ฅผ ์ด๋์ด๋ด๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค.
| ํ๋ก ํธ์๋ | ํ๋ก ํธ์๋ | ๋ฐฑ์๋ | ๋ฐฑ์๋ | ๋ฐฑ์๋ & ์ธํ๋ผ | ๋ฐฑ์๋ & AI |
| ๊น์์ | ์ฐจ๋ฏผํ | ๊นํธ์ค | ๊ฐ๋์ | ์ ๊ฒฝ์ | ๋ฐ๋ณ์ค |
- ์ฐธ๊ฐ์๋ค์ ๊ฐ๋ช ์ ์ฌ์ฉํ์ฌ ์ต๋ช ์ผ๋ก ์ํตํ๋ฉฐ, ์์ด๋์ด์ ์ง๊ณผ ์์ ๋์ด๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. ์ด๋ฅผ ํตํด ๋ฏผ๊ฐํ ์ฃผ์ ๋ ๊ฐ์ธ์ ์ฐ๋ ค๋ก ์ธํด ์ ์ํ๊ธฐ ์ด๋ ค์ด ์๊ฒฌ๋ ์์ ๋กญ๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
- ๋ผ์ด๋ ๋ก๋น ๋ฐฉ๋ฒ์ ์ด์ฉํ ํ์ ์งํ ๋ชจ๋ ์ฐธ๊ฐ์๋ ์ ํด์ง ์์์ ๋ฐ๋ผ ๋ฐ์ธ ๊ธฐํ๋ฅผ ๊ฐ์ง๋ฉฐ, ์์ ์ ์์๊ฐ ๋๋ฉด ๋ฐ๋์ ์์ด๋์ด๋ฅผ ์ ์ํด์ผ ํฉ๋๋ค.
- ์์คํ ์ด ๋ฐ์ธ ์์๋ฅผ ์๋์ผ๋ก ๊ด๋ฆฌํ์ฌ, ๋ชจ๋ ์ฐธ๊ฐ์๊ฐ ํ ๋ฒ ์ด์ ๋ฐ์ธํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๋ชจ๋ ์ฐธ๊ฐ์๊ฐ ์ค์๊ฐ์ผ๋ก ์์ด๋์ด๋ฅผ ์๊ฐ์ ์ผ๋ก ๊ณต์ ํ๊ณ ํจ๊ป ์์ ํ ์ ์๋ ๊ณต์ฉ ์์ ๋ณด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์ฐธ๊ฐ์๋ค์ ๋ค๋ฅธ ์ฌ๋์ ์๊ฒฌ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ๊ณ , ๋ณด๋์ ์ง์ ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ์์ด ํ์ ์ ํจ์จ์ฑ์ ๊ทน๋ํํ ์ ์์ต๋๋ค.
- ํ์๊ฐ ์ข ๋ฃ๋๋ฉด ์ฆ์ ํ์ ์์ฝ๋ณธ์ ํ์ธํ ์ ์์ด, ํ์ ๋ด์ฉ์ ๋น ๋ฅด๊ฒ ํ์ ํ๊ณ ํ์ ์์ ์ ํ์ฉํ ์ ์์ต๋๋ค.
- webRTC ๊ธฐ์ ์ ์ด์ฉํด ์ค์๊ฐ์ผ๋ก ์ํํ ํ์ ํ์๋ฅผ ์งํํ๋ฉฐ, ์๊ฒฉ์ง์์๋ ํจ์จ์ ์ธ ์ํต์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ชจ๋ ํ์ ๊ธฐ๋ก์ ์๋์ผ๋ก ์ ์ฅ๋์ด, ํ์์ ์ธ์ ๋ ์ง ๊ณผ๊ฑฐ ํ์ ๋ด์ฉ์ ์ฐธ์กฐํ ์ ์์ต๋๋ค.
-
ํจ์จ์ ์ธ ๋ธ๋ ์ธ์คํ ๋ฐ: AI์ ์ค์๊ฐ ์ฐธ์ฌ๋ก ํ์ ํ๋ฆ์ด ์ค๋จ๋์ง ์๊ณ ์ง์๋๋ฉฐ, ๋ค์ํ ์์ด๋์ด๊ฐ ๋์์์ด ๋์ถ๋ฉ๋๋ค. AI๋ ํ์ํ ์๊ฐ์ ์ ์ ํ ์์ด๋์ด๋ฅผ ์ ๊ณตํจ์ผ๋ก์จ ํ์์ ์งํ์ ์ด์งํฉ๋๋ค.
-
์ฐฝ์๋ ฅ ์ฆ๋: AI๊ฐ ์ ๊ณตํ๋ ๋ค์ํ ๊ด์ ๊ณผ ์ธ๊ฐ์ ์ฐฝ์๋ ฅ์ด ๊ฒฐํฉ๋์ด ํ ์ ์ฒด์ ์ฐฝ์๋ ฅ์ด ํฅ์๋ฉ๋๋ค. AI๋ ์๋ก์ด ์๊ฐ์์์ ์์ด๋์ด๋ฅผ ์ ๊ณตํ๋ฉฐ, ์ด๋ ์ธ๊ฐ ์ฐธ์ฌ์์ ์ฌ๊ณ ๋ฅผ ์๊ทนํ์ฌ ๋ ๋ ์ฐฝ์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํ๊ฒ ํฉ๋๋ค.
-
์ง์ค๋ ฅ ์ ์ง: AI๊ฐ ํ์๋ฅผ ์งํํ๋ฉด์ ์ฃผ์ ๋ ผ์ ์ ์์ฝํ๊ฑฐ๋, ๋ ผ์๊ฐ ํ์ํ ์ฃผ์ ๋ฅผ ์ ์ํจ์ผ๋ก์จ ์ฐธ์ฌ์๋ค์ ์ง์ค๋ ฅ์ ์ ์งํฉ๋๋ค. ์ด๋ฅผ ํตํด ํ์์ ์ง์ ๋์ด๊ณ , ๋ณด๋ค ๋ง์ ์๊ฒฌ์ด ํจ์จ์ ์ผ๋ก ๊ณต์ ๋ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค.
-
์์ ๋กญ๊ณ ํธ์ํ ์ฐธ์ฌ ํ๊ฒฝ ์กฐ์ฑ: ์ต๋ช ์ฑ์ด ๋ณด์ฅ๋๋ ํ๊ฒฝ์์ AI๊ฐ ํ์์ ์ผ์์ผ๋ก ์ฐธ์ฌํจ์ผ๋ก์จ, ์ฐธ์ฌ์๋ค์ด ์ฌ๋ฆฌ์ ๋ถ๋ด ์์ด ์์ ๋กญ๊ฒ ์๊ฒฌ์ ํํํ ์ ์์ต๋๋ค. ์ด๋ ํนํ ์๋ก์ด ์ฐธ์ฌ์๋ ๋ฏ์ ํ๊ฒฝ์์ ์ค์ํ ์ญํ ์ ํฉ๋๋ค.
ํ๋ก์ ํธ์ ํต์ฌ ๊ธฐ๋ฅ์ธ ์ค์๊ฐ ์๋ฐฉํฅ ํต์ ์ ๊ตฌํํ๊ธฐ ์ํด WebSocket์ ๊ธฐ๋ฐ์ผ๋ก, STOMP ํ๋กํ ์ฝ๊ณผ RabbitMQ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ์กฐํฉํ์ฌ ์์ ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ๋ฉ์์ง ์์คํ ์ ๊ตฌ์ถํ์ต๋๋ค.
WebSocket: ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์ค์๊ฐ ์๋ฐฉํฅ ์ฐ๊ฒฐ ํต๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.STOMP: WebSocket ์์์ ๋์ํ๋ ๊ฐ๋จํ ํ ์คํธ ๊ธฐ๋ฐ ๋ฉ์์ง ํ๋กํ ์ฝ๋ก, ๋ฉ์์ง์ ๋ฐํ(Pub)-๊ตฌ๋ (Sub) ๋ชจ๋ธ์ ์ฝ๊ฒ ๊ตฌํํ ์ ์๋๋ก ๋์ต๋๋ค.RabbitMQ: ์ธ๋ถ ๋ฉ์์ง ๋ธ๋ก์ปค(Message Broker)๋ก์, ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ด๊ณ ๋ฉ์์ง๋ฅผ ์์ ์ ์ผ๋ก ์ฒ๋ฆฌ ๋ฐ ์ ํํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
๋ฉ์์ง ์์คํ ์ 4๊ฐ์ ์ฃผ์ ๊ตฌ์ฑ ์์๊ฐ ์ ๊ธฐ์ ์ผ๋ก ์ํธ์์ฉํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
- Client (Web Browser): ์ฌ์ฉ์๊ฐ ์ ์ํ๋ UI. WebSocket/STOMP ํด๋ผ์ด์ธํธ๋ฅผ ํตํด ์๋ฒ์ ํต์ ํฉ๋๋ค.
- Spring Boot Server: ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ๋ฐฑ์๋ ์๋ฒ. STOMP ๋ฉ์์ง๋ฅผ ์์ ํ์ฌ ์ฒ๋ฆฌํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ RabbitMQ๋ก ์ ๋ฌํฉ๋๋ค.
- RabbitMQ: ๋ฉ์์ง ํ. Spring Boot ์๋ฒ๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ํด๋น ๋ฉ์์ง๋ฅผ ๊ตฌ๋ ํ๊ณ ์๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ ์ํ๊ณ ์์ ์ ์ผ๋ก ์ ํ(Broadcast)ํฉ๋๋ค.
- Redis: ์ค์๊ฐ ์ํ ๊ด๋ฆฌ ์ ์ฅ์. ํ์ ์ฐธ๊ฐ์ ์์, ํ์ฌ ์งํ ์ํ ๋ฑ ๋น ๋ฅด๊ฒ ๋ณํ๋ ๋ฐ์ดํฐ๋ Redis์ ์ ์ฅํ์ฌ ์ฑ๋ฅ์ ํ๋ณดํ์ต๋๋ค.
์ฌ์ฉ์๊ฐ ๋ฉ์์ง(ํฌ์คํธ์ ์ ์ถ ๋ฑ)๋ฅผ ๋ณด๋ด๊ณ ๋ค๋ฅธ ์ฌ์ฉ์๋ค์๊ฒ ๊ณต์ ๋๊ธฐ๊น์ง์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๊ฐ์ฅ ๋จผ์ ํด๋ผ์ด์ธํธ๊ฐ WebSocket ์ฐ๊ฒฐ์ ๋งบ์ ์ ์๋ ์๋ํฌ์ธํธ(_**/ws**_)๋ฅผ ์ด์ด์ค๋๋ค. ์ดํ ๋ฉ์์ง ๋ธ๋ก์ปค ์ค์ ์ ํตํด ํด๋ผ์ด์ธํธ์ ์๋ฒ, ๊ทธ๋ฆฌ๊ณ ์ธ๋ถ ๋ธ๋ก์ปค(RabbitMQ) ๊ฐ์ ํต์ ๊ท์น์ ์ ์ํฉ๋๋ค.
๐ก ํต์ฌ ์ค์ (WebSocketConfig.java)
setApplicationDestinationPrefixes("/app"): ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ๋ก ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ๋(Publish) ์ฌ์ฉํ๋ ๊ฒฝ๋ก์ ์ ๋์ฌ์ ๋๋ค./app์ผ๋ก ์์ํ๋ ๋ฉ์์ง๋ ์๋ฒ์@MessageMapping๋ฉ์๋๋ก ๋ผ์ฐํ ๋ฉ๋๋ค.enableStompBrokerRelay: Spring์ ๋ด์ฅ ๋ธ๋ก์ปค ๋์ ์ธ๋ถ RabbitMQ๋ฅผ STOMP ๋ธ๋ก์ปค๋ก ์ฌ์ฉํ๋๋ก ์ค์ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์์ง ์ฒ๋ฆฌ์ ์ฑ ์์ RabbitMQ์ ์์ํ์ฌ ์๋ฒ์ ๋ถ๋ด์ ์ค์ด๊ณ ํ์ฅ์ฑ์ ํ๋ณดํฉ๋๋ค.
Java
// WebSocketConfig.java
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// ...
config.setApplicationDestinationPrefixes("/app")
.enableStompBrokerRelay("/topic", "/queue", "/exchange", "/amq/queue")
.setRelayHost("rabbitmq")
.setRelayPort(61613)
// ...
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*");
}
}ํด๋ผ์ด์ธํธ๊ฐ /app ์ ๋์ฌ๋ฅผ ๋ถ์ฌ ๋ฉ์์ง๋ฅผ ๋ฐํํ๋ฉด, @MessageMapping ์ด๋
ธํ
์ด์
์ด ํด๋น ๊ฒฝ๋ก๋ฅผ ๊ฐ์งํ์ฌ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค.
MessageController๋ ๋ฉ์์ง๋ฅผ ๋ฐ์ ํ, ์ค์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐ ์ํ ๋ณ๊ฒฝ ๋ก์ง์ด ๋ด๊ธด MessageService๋ฅผ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ ์ถ๋ ํฌ์คํธ์ ๋ด์ฉ์ Redis์ ์ ์ฅํ๊ณ ๋ค์ ๋ฐํ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฑ์ ์์
์ ์ฒ๋ฆฌํฉ๋๋ค.
// MessageController.java
@Controller
public class MessageController {
private final RabbitTemplate rabbitTemplate;
private final MessageService messageService;
///...
// ... ์์ฑ์ ...
@MessageMapping("step1.submit.{roomId}")
public void submitPost(RequestGroupPost groupPost, @DestinationVariable String roomId, StompHeaderAccessor accessor) {
// 1. JWT ํ ํฐ์ ํตํด ์ฌ์ฉ์ ์ธ์ฆ
String token=accessor.getFirstNativeHeader("Authorization");
String nickname=jwtUtilForRoom.getNickname(token);
//...
// 2. MessageService๋ฅผ ํธ์ถํ์ฌ ๋น์ฆ๋์ค ๋ก์ง ์ํ (Redis์ ๋ฐ์ดํฐ ์ ์ฅ ๋ฑ)
messageService.sendPost(Integer.parseInt(roomId), groupPost, nickname);
///...
// 3. ์๋ต ๋ฉ์์ง ์์ฑ
ResponseGroupPost aiResponseGroupPost=makeResponseGroupPost(aiGroupPost,Integer.parseInt(roomId),nextUser);
// 4. ์ฒ๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ RabbitMQ๋ก ์ ์กํ์ฌ ๋ชจ๋ ๊ตฌ๋
์์๊ฒ ์ ํ
rabbitTemplate.convertAndSend("amq.topic","room." + roomId, aiResponseGroupPost);
}
}๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ๊ฐ ์๋ฃ๋๋ฉด, RabbitTemplate์ ์ฌ์ฉํ์ฌ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ RabbitMQ๋ก ์ ์กํฉ๋๋ค. ์ด๋ ๋ฉ์์ง๋ amq.topic ์ด๋ผ๋ ๊ธฐ๋ณธ Topic Exchange๋ก ๋ณด๋ด์ง๋ฉฐ, room.{roomId} ํํ์ ๋ผ์ฐํ
ํค๋ฅผ ๊ฐ์ง๋๋ค.
RabbitMQ๋ ์ด ๋ผ์ฐํ
ํค์ ์ผ์นํ๋ ํจํด(์: /topic/room/123)์ ๊ตฌ๋
(Subscribe)ํ๊ณ ์๋ ๋ชจ๋ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฉ์์ง๋ฅผ ์ ํํฉ๋๋ค. ์ด ๊ณผ์ ์ RabbitMQ๊ฐ ์ ๋ดํ๋ฏ๋ก ์๋ฒ๋ ๋ค์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์ง์คํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ธ RabbitMQ ๋ฐฑ์๋ ์์คํ
์์๋ Exchange, Queue, Binding์ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ฝ๋๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. ํ์ง๋ง ๋ณธ ํ๋ก์ ํธ์ฒ๋ผ ๋ค์์ ์ฑํ
๋ฐฉ์ด ๋์ ์ผ๋ก ์์ฑ๋๊ณ ์ฌ์ฉ์๊ฐ ์์๋ก ์
์ฅ/ํด์ฅํ๋ ํ๊ฒฝ์์๋ ์ด๋ฌํ ์ ์ ์ค์ ์ด ๋นํจ์จ์ ์
๋๋ค.
์ ๋ ์ด ๋ฌธ์ ๋ฅผ STOMP ํ๋กํ ์ฝ์ ํน์ฑ๊ณผ RabbitMQ์ STOMP ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ์ฌ ํด๊ฒฐํ์ต๋๋ค.
- ์๋ํ๋ ํ/๋ฐ์ธ๋ฉ: ํด๋ผ์ด์ธํธ๊ฐ ํน์ ์ฃผ์ (์:
/topic/room/123)๋ฅผ ๊ตฌ๋ ํ๋ฉด, RabbitMQ์ STOMP ํ๋ฌ๊ทธ์ธ์ ํด๋น ํด๋ผ์ด์ธํธ๋ง์ ์ํ ์์ ํ(Temporary Queue)๋ฅผ ์๋์ผ๋ก ์์ฑํ๊ณ , ์ฃผ์ ์ ๋ง๊ฒ Exchange์ ์๋์ผ๋ก ๋ฐ์ธ๋ฉํฉ๋๋ค. - ์๋ ์ ๋ฆฌ: ํด๋ผ์ด์ธํธ์ ์ฐ๊ฒฐ์ด ๋์ด์ง๋ฉด, ์์ฑ๋์๋ ์์ ํ์ ๋ฐ์ธ๋ฉ์ ์๋์ผ๋ก ์ญ์ ๋ฉ๋๋ค.
โจ ์ด ์ ๊ทผ ๋ฐฉ์์ ํตํด, ์๋์ผ๋ก ํ๋ฅผ ๊ด๋ฆฌํ ํ์ ์์ด ๋์ ์ธ Pub/Sub ํ๊ฒฝ์ ํจ์จ์ ์ผ๋ก ๊ตฌ์ถํ ์ ์์์ต๋๋ค. ์ด๋ ์ฝ๋์ ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๊ณ ์์คํ ์ ์ ์ง๋ณด์์ฑ์ ํฌ๊ฒ ํฅ์์ํค๋ ํจ๊ณผ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค.
WebSocket, STOMP, RabbitMQ๋ฅผ ํตํฉํ์ฌ ์ค์๊ฐ ๋ฉ์์ง ์์คํ ์ ์ฑ๊ณต์ ์ผ๋ก ๊ตฌ์ถํจ์ผ๋ก์จ, ์์ ์ ์ผ๋ก ๋์ํ๊ณ ์ํ ํ์ฅ์ด ์ฉ์ดํ ์ํคํ ์ฒ๋ฅผ ๊ตฌํํ ์ ์์์ต๋๋ค. ํนํ ์ธ๋ถ ๋ฉ์์ง ๋ธ๋ก์ปค๋ฅผ ๋์ ํ์ฌ ์๋ฒ์ ์ญํ ์ ๋ช ํํ ๋ถ๋ฆฌํ๊ณ , STOMP ํ๋กํ ์ฝ์ ์ฅ์ ์ ํ์ฉํด ๋์ ์ธ Pub/Sub ํ๊ฒฝ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ๊ฒฝํ์ ๋ถ์ฐ ์์คํ ์ ๋ํ ๊น์ ์ดํด๋ฅผ ์ป๋ ๊ณ๊ธฐ๊ฐ ๋์์ต๋๋ค.









