
하단에 실제 코드에 대한 이야기도 있습니다
학교 프로젝트 수업에서 게임을 진행하게 되었다. 가장 많이 사용해본
Spring을 활용해서 온라인 게임을 구현할 방법이 뭐가 있을까 찾아보다가, Websocket을 활용해 통신을 스프링에서도 지원하는 것을 알게 되었다. 또한 Stomp를 활용하면 좀 더 체계적으로 다양한 기능을 구현할 수 있는 것 같았다. 실시간 FPS게임이 아닌 턴제 게임은 Websocket으로도 충분하다고 생각했다.
STOMP란?
Simple Text Oriented Messaging Protocol - 직역하면 단순 텍스트 기반 메시지 프로토콜
메시지를 주고받을 때 규칙을 정해서 추가적인 기능들을 구현한 것이다. 웹소켓을 하나만 사용해서 모든 기능 (채팅, 게임, 귓속말 메시지 등을 하나의 웹소켓에서 사용)을 구현하려면 복잡한 구조를 직접 작성해야 할 것이다. 이를 구조화한 STOMP를 활용하면 보다 쉽게 구현이 가능하다.
STOMP 기본 흐름
STOMP는 다음과 같은 과정을 거친다

위 과정을 구현하면서, 라이브러리에서 어떻게 구현했는지 공부해보았다. Spring과 호환 라이브러리 기반으로 공부한 뒤 다이어그램에도 설명을 해놔서, 이해하는 데 도움이 될 것이라 생각한다. 구조는 Spring대신 다른 프레임워크를 사용해도 비슷할 것 같다.
구독 과정

클라이언트가 웹소켓으로 연결한 이후, 특정 접두사(엔드포인트)들에 구독을 요청한다. 성공적으로 구독에 성공하면, 이후 해당 엔드포인트로 서버가 BroadCast를 할 경우 클라이언트에서 인지할 수 있다.
게임 진행 정보 전달 과정

(대체로)/app이라는 접두사 이후, /room1.move와 같이 특정 엔드포인트를 지정하면 Controller에 존재하는 메서드에 내용을 전달.
클라이언트 전체 알람 전달 과정

클라이언트에서 특정 경로를 구독한 사람들에게 서버에서 BroadCast를 진행함.
클라이언트 간 개별 메세지 전달 과정

개별 클라이언트들이 귓속말을 받는 통로(본인 통로)를 열어둬야 함. 이후 수신자가 대상의 ID를 payload에 담아 서버로 넘기면, 서버에서 처리 후 발신자 귓속말 통로 엔드포인트로 BroadCast를 진행.
Spring에서의 STOMP
현재는 다음과 같은 WebsocketConfig 클래스를 만들어서 웹소켓 엔드포인트를 정의해주고 있다.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// 클라이언트가 구독할 수 있는 주제 접두사 설정
config.enableSimpleBroker("/topic", "/queue");
// 클라이언트가 메시지를 보낼 목적지 접두사 설정
config.setApplicationDestinationPrefixes("/app");
// 특정 사용자에게 메시지를 보내기 위한 접두사 설정
config.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// WebSocket 연결 엔드포인트 등록
registry.addEndpoint("/ws")
.setAllowedOrigins("*"); // SockJS 지원 추가
}
}
enableSimpleBroker : 클라이언트가 서버에서 브로드캐스트해주는 내용 을 듣기위해 구독할 수 있는 경로를 의미한다.
예 : 어떤 사용자가 전체 채팅을 친 경우, 서버에서는 해당 전체 채팅을 볼 수 있는 "모든" 사용자에게 브로드캐스트 해야 한다.
setApplicationDestinationPerfixes : 클라이언트에서 서버로 메세지를 보낼 목적지 접두사를 지정한다.
예 : 서버에 ready했다는 것을 알릴 때.
'Backend > Spring' 카테고리의 다른 글
스프링 Security (0) | 2025.04.12 |
---|---|
[Spring] HTTP 통신구조 기초 이해 (0) | 2025.03.14 |
[Spring]oAuth2를 이용한 카카오 로그인 (0) | 2025.03.10 |
테스트 커버리지(구문, 조건, 결정) (1) | 2024.10.04 |
JWT를 활용한 서버 토큰 (1) | 2024.08.26 |

하단에 실제 코드에 대한 이야기도 있습니다
학교 프로젝트 수업에서 게임을 진행하게 되었다. 가장 많이 사용해본
Spring을 활용해서 온라인 게임을 구현할 방법이 뭐가 있을까 찾아보다가, Websocket을 활용해 통신을 스프링에서도 지원하는 것을 알게 되었다. 또한 Stomp를 활용하면 좀 더 체계적으로 다양한 기능을 구현할 수 있는 것 같았다. 실시간 FPS게임이 아닌 턴제 게임은 Websocket으로도 충분하다고 생각했다.
STOMP란?
Simple Text Oriented Messaging Protocol - 직역하면 단순 텍스트 기반 메시지 프로토콜
메시지를 주고받을 때 규칙을 정해서 추가적인 기능들을 구현한 것이다. 웹소켓을 하나만 사용해서 모든 기능 (채팅, 게임, 귓속말 메시지 등을 하나의 웹소켓에서 사용)을 구현하려면 복잡한 구조를 직접 작성해야 할 것이다. 이를 구조화한 STOMP를 활용하면 보다 쉽게 구현이 가능하다.
STOMP 기본 흐름
STOMP는 다음과 같은 과정을 거친다

위 과정을 구현하면서, 라이브러리에서 어떻게 구현했는지 공부해보았다. Spring과 호환 라이브러리 기반으로 공부한 뒤 다이어그램에도 설명을 해놔서, 이해하는 데 도움이 될 것이라 생각한다. 구조는 Spring대신 다른 프레임워크를 사용해도 비슷할 것 같다.
구독 과정

클라이언트가 웹소켓으로 연결한 이후, 특정 접두사(엔드포인트)들에 구독을 요청한다. 성공적으로 구독에 성공하면, 이후 해당 엔드포인트로 서버가 BroadCast를 할 경우 클라이언트에서 인지할 수 있다.
게임 진행 정보 전달 과정

(대체로)/app이라는 접두사 이후, /room1.move와 같이 특정 엔드포인트를 지정하면 Controller에 존재하는 메서드에 내용을 전달.
클라이언트 전체 알람 전달 과정

클라이언트에서 특정 경로를 구독한 사람들에게 서버에서 BroadCast를 진행함.
클라이언트 간 개별 메세지 전달 과정

개별 클라이언트들이 귓속말을 받는 통로(본인 통로)를 열어둬야 함. 이후 수신자가 대상의 ID를 payload에 담아 서버로 넘기면, 서버에서 처리 후 발신자 귓속말 통로 엔드포인트로 BroadCast를 진행.
Spring에서의 STOMP
현재는 다음과 같은 WebsocketConfig 클래스를 만들어서 웹소켓 엔드포인트를 정의해주고 있다.
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
// 클라이언트가 구독할 수 있는 주제 접두사 설정
config.enableSimpleBroker("/topic", "/queue");
// 클라이언트가 메시지를 보낼 목적지 접두사 설정
config.setApplicationDestinationPrefixes("/app");
// 특정 사용자에게 메시지를 보내기 위한 접두사 설정
config.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
// WebSocket 연결 엔드포인트 등록
registry.addEndpoint("/ws")
.setAllowedOrigins("*"); // SockJS 지원 추가
}
}
enableSimpleBroker : 클라이언트가 서버에서 브로드캐스트해주는 내용 을 듣기위해 구독할 수 있는 경로를 의미한다.
예 : 어떤 사용자가 전체 채팅을 친 경우, 서버에서는 해당 전체 채팅을 볼 수 있는 "모든" 사용자에게 브로드캐스트 해야 한다.
setApplicationDestinationPerfixes : 클라이언트에서 서버로 메세지를 보낼 목적지 접두사를 지정한다.
예 : 서버에 ready했다는 것을 알릴 때.
'Backend > Spring' 카테고리의 다른 글
스프링 Security (0) | 2025.04.12 |
---|---|
[Spring] HTTP 통신구조 기초 이해 (0) | 2025.03.14 |
[Spring]oAuth2를 이용한 카카오 로그인 (0) | 2025.03.10 |
테스트 커버리지(구문, 조건, 결정) (1) | 2024.10.04 |
JWT를 활용한 서버 토큰 (1) | 2024.08.26 |