keembloo

웹소켓 spring에서 사용하기 기본 정리 본문

Spring

웹소켓 spring에서 사용하기 기본 정리

keembloo 2023. 11. 14. 11:16
728x90

1. 라이브러리 설치하기

 

https://start.spring.io/

 

WebSocket 검색하여 gradle - dependencies에 추가해준다.

 

 

  implementation 'org.springframework.boot:spring-boot-starter-websocket'

 

 

 


 

2. 서버 소켓 연결 매핑 주소 만들기

 

config 폴더에 클래스 만든다.

웹소켓관련 config(커스텀설정)하는 방법이다.

 

스프링은 restAPI를(post,put,get,delete) 자동으로 지원한다.

restAPI는 프로토콜 주소 http 를 사용하지만 

웹소켓은 웹소켓 프로토콜 ws 를 사용한다.

 

때문에 웹소켓을 사용하려면 config에서 매핑을 잡아줘야한다. 

 

@Component  // 스프링 컨테이너에 빈등록
public class WebSocketConfig implements WebSocketConfigurer {

    @Autowired private ChattingController chattingController;

    @Override   // 여기에 사용할 서버소켓들의 매핑주소와 접근제한 설정
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        registry.addHandler(chattingController , "/chat");
    }
}

 

registerWebSocketHandlers : 서버소켓 매핑 주소와 접근제한 주소 제공

 

 


 

3. 서버 소켓 클래스 만들기

 

추가적으로 서버 소켓 클래스/객체를 만들어야한다.

컨트롤러 폴더에 클래스 만든다.

TextWebSocketHandler 상속 받는다.

오버라이딩한다.

 

@Component  // 스프링 컨테이너에 빈등록
public class ChattingController extends TextWebSocketHandler {
    // 1.클라이언트 소켓과 연동 성공했을때
    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("session = " + session);
    }

    // 2. 클라이언트소켓과 연동 오류가 발생했을때
    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        System.out.println("session = " + session + ", exception = " + exception);
    }

    // 3. 클라이언트소켓과 연동이 끊겼을때
    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("session = " + session + ", status = " + status);
    }

    // 4. 클라이언트소켓으로부터 메세지를 받았을때
    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("session = " + session + ", message = " + message);
    }
}

 

afterConnectionEstablished : 클라이언트소켓으로부터 접속성공 했을때 이후 메소드
handleTransportError : 클라이언트소켓과 연동 오류가 발생했을때 이후 메소드
afterConnectionClosed : 클라이언트소켓과 연동이 끊겼을때 이후 메소드
handleTextMessage : 클라이언트소켓으로부터 메세지를 받았을때 이후 메소드

 

 


 

4. 클라이언트 소켓 생성하기

 

js 클라이언트 측 소켓을 생성한다.

 

    // 1. 클라이언트 소켓 만들기 ( 생성과 동시에 서버소켓과 연결 )
    let 클라이언트소켓 = new WebSocket("ws://서버주소/서버소켓매핑주소") // 주소일치하면 연동완료
    // 연동 된 후 코드
    console.log(클라이언트소켓);
    // 1. 서버소켓과 연동 성공했을때 이후 메소드
    클라이언트소켓.onopen = (e)=>{console.log(e); }
    // 2. 서버소켓과 세션 오류가 발생했을때 이후 메소드
    클라이언트소켓.onerror = (e)=>{console.log(e); }
    // 3. 서버소켓과 연동이 끊겼을때 이후 메소드
    클라이언트소켓.onclose = (e)=>{console.log(e); }
    // 4. 서버소켓으로부터 메세지를 받았을때 이후 메소드
    클라이언트소켓.onmessage = (e)=>{console.log(e); }

    // 2. 클라이언트소켓 메세지 전송
    const msgSend = (e) =>{ 클라이언트소켓.send("안녕"); }

 

생성과 동시에 서버 소켓과 연결이 된다.

연결 된 메소드를 통해 추후 코드를 작성할 수 있다.

 

onopen : 연동 성공했을때 이후 메소드
onerror : 오류 발생했을때 이후 메소드
onclose : 연동 끊겼을때 이후 메소드
onmessage : 메세지를 받았을때 이후 메소드

 

 

클라이언트 소켓이 서버소켓으로부터 메세지를 보낼 때는

send 함수를 사용하여 보낼 수 있다.

 

이는 모두 라이브러리 내장 함수들이다.

 

728x90