상세 컨텐츠

본문 제목

진행상황 - 웹소켓 구현 완료

SO_FIT

by myeongjaechoi 2024. 5. 21. 22:10

본문

웹소켓을 구현하긴 했다.

문제는 진짜 구현하기만 했다..

HttpHandshakeInterceptor

현재 나는 HttpSession을 통하여 로그인한 사용자의 정보를 받고 있다. 하지만, HttpSession과 WebSocketSession은 다르기 때문에, HttpSession의 정보를 WebSocketSession으로 바꿔줘야한다. 위 코드가 이 과정을 위한 코드이다.

WebSocketConfig

웹소켓을 Bean에 등록하는 것을 보여준다.

WebSocketHandler

위 코드에서 afterConnetionEstablished는 아까 HttpHandshakeInterceptor에서 HttpSession으로 변환해주는 역할을 한다.

따라서 httpSession이 존재하면, Logged-in member 문장을 반환한다.

handleTextMessage

handleTextMessage는 어떤 메세지를 보낼 것인지를 나타낸다.

서버 연결이 끊기거나, 닫혔을 때의 메시지를 보내준다.

여기서 문제!

잘 하는 친구들에게 물어보니, HttpSession을 사용했을 때와, Token을 사용했을 때의 WebSocketSeesion은 아예 다르다고 한다..

얼른 로그인이 구현되면 Token으로 고쳐야 될텐데 걱정이다.

아 그리고, 여태 html을 사용해서 백엔드가 잘 작동되는지를 확인했었는데, 이제 postman을 사용하여 post을 사용한다.

확실히 html을 안 만들고 백엔드에만 집중할 수 있어서 좋은 것 같다.

이 과정에서도 굉장히 오래 걸렸다.

우선 @RestController와 @Controller의 차이다. 나는 @Controller로 모두 사용했었는데,postman에서 자꾸 오류가 발생했었다.

왜냐하면 @Controller는 HTTP 요청을 처리하고, HTML을 반환하기 위해 사용되는 것이고, @RestController는 JSON,XML 또는 기타 데이터 형식을 반환하는 RESTful 웹 서비스의 컨트롤러를 작성할 때 사용되는 차이점이 있었다. 

어쩐지 계속 return 경로를 html로 하라고 오류가 발생하더니.. 절대 안 까먹을 것 같다.

또한,PostMapping에서 DTO를 사용할 때, @RequestBody를 사용해야 된다는 것을 알았다. 왜냐하면 @RequestBody가 HTTP 요청의 본문을 자바 객체로 변환해주는 역할을 하기 때문이다. 주로 POST 또는 PUT 요청에서 요청 본분에 포함된 데이터를 자바 객체로 매핑할 때 사용된다고 한다.

아직 갈 길이 멀다. 하지만 계속 성장하고 있다.

관련글 더보기