브로드캐스트(broadcast)

ssongyi·2025년 6월 18일
0

Java/Spring TIL

목록 보기
21/22

하나의 발신자가 특정 메시지를 여러 수신자에게 동시에 전송하는 방식
일반적으로 네트워크나 메시징 시스템에서 “1:N” 통신 패턴을 구현할 때 사용되며,
WebSocket 기반 채팅 애플리케이션에서는 다음과 같은 방식으로 동작함

1. 브로드캐스트의 개념

  • Unicast(유니캐스트): 특정 한 대의 클라이언트(예: A → B)에만 메시지를 전송

  • Multicast(멀티캐스트): 미리 그룹에 가입된 일부 클라이언트들에게 메시지를 전송

  • Broadcast(브로드캐스트): 네트워크 상의 모든 클라이언트 또는 특정 토픽(주제)을 구독(subscribe)한 모든 클라이언트에게 메시지 전송

채팅에서는 “토픽(예: 채팅방)”을 구독한 모든 사용자가 새로운 메시지나 상태 변경 알림을 받도록 만드는 것이 브로드캐스트입니다.

2. Spring WebSocket + STOMP에서의 브로드캐스트

Spring Boot 환경에서 STOMP 프로토콜을 사용하면, SimpMessagingTemplate이나 @SendTo를 통해 브로드캐스트를 쉽게 구현할 수 있습니다.

2-1) SimpMessagingTemplate 사용 예시

@Controller
@RequiredArgsConstructor
public class ChatWebSocketController {
    private final SimpMessagingTemplate template;

    // 클라이언트가 /pub/chat/rooms/{roomId}/send 로 메시지를 보내면 이 메서드가 호출됨
    @MessageMapping("/chat/rooms/{roomId}/send")
    public void sendMessage(@DestinationVariable Long roomId, ChatMessageSendRequest request) {
        ChatMessageResponse response = chatMessageService.saveMessage(roomId, request);
        // /sub/chat/rooms/{roomId}/send 토픽을 구독한 모든 클라이언트에게 브로드캐스트
        template.convertAndSend("/sub/chat/rooms/" + roomId + "/send", response);
    }
}

2-2) @SendTo 어노테이션 사용 예시

@MessageMapping("/chat/rooms/{roomId}/join")
@SendTo("/sub/chat/rooms/{roomId}/members")
public List<ChatMember> broadcastMembers(@DestinationVariable Long roomId) {
    // 채팅방의 현재 활성 멤버 목록을 반환하면,
   // /sub/chat/rooms/{roomId}/members 토픽을 구독한 모든 클라이언트에게 자동으로 전송됨
    return chatMemberService.getActiveMembers(roomId);
}

3. 실제 동작 흐름

  1. 구독(subscribe)
    클라이언트(브라우저)는 STOMP 클라이언트를 통해 /sub/chat/rooms/{roomId}/… 같은 토픽을 구독

  2. 발행(publish)
    메시지를 보낼 때 클라이언트가 /pub/chat/rooms/{roomId}/send 같은 엔드포인트로 요청

  3. 브로드캐스트(broadcast)
    서버는 해당 토픽(/sub/chat/rooms/{roomId}/…)에 convertAndSend() 또는 @SendTo로 메시지를 발행

  4. 수신(receive)
    토픽을 구독한 모든 클라이언트가 실시간으로 메시지나 이벤트를 수신

4. 언제 브로드캐스트를 쓰나?

  • 채팅 메시지 전송 시 모든 방 참여자에게 동시에 알림

  • 채팅방 멤버 목록 변경(입장·퇴장) 시 실시간 갱신

  • 공지사항, 게임 점수판, 실시간 알림 등 “여러 사용자에게 동시 전달”이 필요할 때

이처럼 브로드캐스트는 “여러 사용자에게 동일한 정보를 실시간으로 전파”해야 하는 대부분의 실시간 기능에서 핵심적인 역할을 함

0개의 댓글