패스트캠퍼스 챌린지

패스트캠퍼스 환급 챌린지 45일차 : 9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online 강의 후기

ssoonearth 2025. 5. 15. 10:39

본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

https://abit.ly/lisbva

 

실습 화면

 

 

 

패스트캠퍼스의 '9개 도메인 프로젝트로 끝내는 백엔드 웹 개발 (Java/Spring) 초격차 패키지 Online' 강의 수강 45일차!
오늘은 Websocket을 활용한 실시간 메시징 도메인 서버의 STOMP을 사용한 간단한 채팅 서비스 구현 작업을 진행하였다.

 

@Configuration
@EnableWebSocketMessageBroker // STOMP 기능 활성화
public class StompConfiguration implements WebSocketMessageBrokerConfigurer {

    // 클라이언트가 서버에 연결할 수 있도록 엔드포인트 지정
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/stomp/chats");
    }

    // 메세지 브로커로서의 역할을 하기 위해서 클라이언트에서 메세지를 발행하고, 클라이언트는 브로커로부터 전달되는 메세지를 받기 위해 구독을 해야 한다.
    // 그 경로들을 지정해주는 기능
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // 메세지 발행 경로 (클라이언트 -> 서버로 메세지 보낼 때 사용할 prefix)
        registry.setApplicationDestinationPrefixes("/pub");

        // 메세지 구독 신청 경로 (서버 -> 클라이언트로 메세지 보낼 때 사용할 prefix)
        registry.enableSimpleBroker("/sub");
    }

}

STOMP 사용을 위한 설정 파일을 생성하였다.

WebSocketMessageBrokerConfigurer 인터페이스를 구현하여 스톰프 기능을 설정할 수 있다.

registerStompEndpoits(), configureMessageBroker()를 오버라이드하여 구현하였다.

 

 

@Slf4j
@Controller
public class StompChatController {

    @MessageMapping("/chats") // 어떤 경로로 발행된 메세지를 라우팅할 것인지 지정 (설정 파일에서 설정한 prefix(/pub)는 생략)
    @SendTo("/sub/chats") // 해당 경로를 구독하고 있는 모든 클라이언트에 메세지 전달
    public String handleMessage(@Payload String message) {
        log.info("{} Received", message);

        return message;
    }

}

이후, 메세지 요청을 받는 컨트롤러를 생성했다.

@MessageMapping 어노테이션을 통해 /pub/chats 경로로 발행된 메세지를 받아와 처리하고, 구독 중인 클라이언트들에게 메세지를 전달한다.

 

 

어플리케이션을 실행하여 메세지를 보내면, 위 컨트롤러에서 작성한 포맷대로 log가 출력되는 것을 확인할 수 있다.

 

 

 

map 등의 자료구조에 직접 세션을 저장하고, 반복문을 수행하면서 메세지를 전송해야 했던 웹소켓과 달리 stomp는 경로 지정과 컨트롤러 구현만으로 메세지 전달이 가능해서 훨씬 빠르고 편리하게 개발을 할 수 있었다.