[TIL] WebSocket_항해99 Day 51

woonie·2022년 3월 2일
0

TIL

목록 보기
44/64
post-custom-banner

최종프로젝트에서 구현 예정인 기술은 Websocket방식인 실시간 채팅이다.
배운적도,구현해본 경험도 없기에 기초 개념부터 배워야했다.
참고 자료들로 조금씩 구현해봤다.

Springboot Websocket서버 구축

  • build.gradle에 라이브러리 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
}

websocket Handler

  • socket통신은 서버와 클라이언트가 1:N으로 관계를 맺는다.
    한 서버에 여러 클라이언트가 접속할 수 있고 서버에는 여러 클라이언트가 발송한 메세지를 받아 처리해줄 Handler가 필요하다.

@Component
public class WebSockChatHandler extends TextWebSocketHandler {

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String payload = message.getPayload();
        TextMessage textMessage = new TextMessage("Welcome chatting sever");
        session.sendMessage(textMessage);
    }
}

Websocket Config

  • handler를 이용하여 Websocket을 활성화 하기 위한 Config가 필요하다.
    websocket에 접속하기 위한 endpoint는 /ws/chat으로 설정 하고 CORS도 추가 설정 해준다.
@RequiredArgsConstructor
@Configuration
@EnableWebSocket
public class WebSockConfig implements WebSocketConfigurer {
    private final WebSocketHandler webSocketHandler;

    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(webSocketHandler, "/ws/chat").setAllowedOrigins("*");
    }
}

여기까지 구현하면 websocket통신이 완료되었다. 하지만 ws://localhost:8080/ws/chat에 연결된 클라이언트만 메세지 통신이 가능하다. 채팅방이 단 하나인 채팅 서버다.
여러개의 채팅방을 만들고 해당 채팅방의 모든 클라이언트들 간에 메세지를 주고 받으려면 고도화 작업이 필요하다.

클라이언트들은 서버에 접속하면 개별 Websocket Session을 갖는다.
해당 Session정보를 채팅방에 맵핑 시키고 서버에 전달된 메세지를 특정 채팅방의 wevsocket Session으로 보내도록 하여 개별 채팅방을 만든다.

profile
동료들과 함께하는 개발의 중요성에 관심이 많습니다. 언제나 호기심을 갖고 꾸준히 노력하는 개발자로서 성장하고 있습니다.
post-custom-banner

0개의 댓글