Spring WebSocket

ims·2020년 10월 24일
0

BlueDot

목록 보기
14/28

Socket이란?

https://blog.naver.com/myca11/221389847130

websocket 기원 설명

https://www.youtube.com/watch?v=Wqada0L9xlg&ab_channel=Tucker%EC%9D%98GoLang%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D

시도 블로그

안먹음..

https://ratseno.tistory.com/71

이것도 안됨..

https://hwiveloper.dev/2019/01/10/spring-boot-stomp-websocket/

maven to gradle

maven으로 진행된 프로젝트도 gradle 의존성을 찾아서 주입함으로서 진행할 수 있다.

http , ajax 설명

https://medium.com/@chullino/http%EC%97%90%EC%84%9C%EB%B6%80%ED%84%B0-websocket%EA%B9%8C%EC%A7%80-94df91988788

websocket 원리

https://seolhun.github.io/contents/network-socket-web-socket%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-%EC%96%B4%EB%96%BB%EA%B2%8C-%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94%EA%B0%80

참조 블로그

https://daddyprogrammer.org/post/4077/spring-websocket-chatting/

Websocket의 경우 별개의 프로토콜이므로 http가 아닌 ws로 시작하는 주소 체계를 갖는다.

클라이언트들은 서버에 접속하면 개별의 Websocket session을 가지게 된다.
채팅방에 입장시 클라이언트들의 websocket session정보를 채팅방에
맵핑시켜서 보관하고 있으면 서버에 전달된 메세지를 특정 방의 websocket session으로
보낼 수 있으므로 개별의 채팅창을 구현할 수 있다.

구현 블로그

https://salepark.tistory.com/62?category=945958

spring - html 설정방법

https://kingname.tistory.com/110

redirect 방법

return "redirect:http://www.naver.com";

Websocket 유투브 강의

https://www.youtube.com/watch?v=_696SMBLqRA&t=79s&ab_channel=CodeForgeYT

.gradle

plugins {
    id 'org.springframework.boot' version '2.3.4.RELEASE'
    id 'io.spring.dependency-management' version '1.0.10.RELEASE'
    id 'java'
}

group = 'com.practice'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

test {
    useJUnitPlatform()
}

먼저 websocket을 implemenation 해준다

WebSocketConfiguration.java

---- 1 ----

  1. WebSocket을 사용하기 위해 annotation으로 @Configuration, @EnableWebSocket을 붙여준다.

  2. WebSocketConfigurer를 상속받는다.

---- 2 ----

  1. registerWebSocketHandlers를 override 한다. registery.addHandler를 통해 handler를 추가한다.

핸들러란?

한 스레드는 그 내부의 연산만 가능하며 다른 스레드의 UI를 건드릴 수 없습니다.
그런데 만약 스레드들이 서로 영향을 줄 수 없다면 스레드의 존재 이유가 없을 것입니다.
이를 해결하기 위해서 서로 다른 스레드 간의 참조를 위해서 스레드 간에 통신할
수 있는 장치를 만들었는데 그것이 핸들러[Handler]입니다.
핸들러는 스레드 간에 메시지 객체나 러너블 객체를 통해 통신할 수 있는 장치이며,하나
의 핸들러는 하나의 스레드와 관련을 맺습니다. 핸들러는 자신이 생성된 스레드에 짝이
되며 다른 스레드와 통신을 수행하게 됩니다.

https://csjung.tistory.com/43

  1. endpoint를 추가하고 CORS 정책 때문에 프론트가 접근할 수 있게 모든 origin에 대해서 허용해준다.

---- 3 ----

  1. 2번의 register에 handler를 돌려주기 위해 handler를 가져온다.
  2. 이 때 WebSocketHandler를 상속받은 것이 TextWebSocketHandler 이기 때문에 WebSocketHandler를 돌려주어도 괜찮은 것.

ChatWebSocketHandler.java

---- 1 ----

  1. TextWebSocketHandler를 상속받고, 위 3개의 method에 대해서 overriding을 한다.

---- 2 ----

  1. WebSocketSession들을 담을 List를 선언한다.

---- 3 ----

  1. add, remove session 해주고, session을 담아 메세지를 보낸다.
profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/

0개의 댓글