1) /chat/list 와 /chat/{id}/detail
package com.gn.mvc.controller;
import java.util.List;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.gn.mvc.entity.ChatRoom;
import com.gn.mvc.service.ChatRoomService;
import lombok.RequiredArgsConstructor;
@Controller
@RequestMapping("/chat")
@RequiredArgsConstructor
public class ChatController {
private final ChatRoomService chatRoomService;
@GetMapping("/list")
public String selectChatRoomAll(Model model) {
List<ChatRoom> resultList = chatRoomService.selectChatRoomAll();
model.addAttribute("chatRoomList", resultList);
return "chat/list";
}
@GetMapping("/{id}/detail")
public String selectChatRoomOne(@PathVariable("id") Long id, Model model) {
ChatRoom chatRoom = chatRoomService.selectChatRoomOne(id);
model.addAttribute("chatRoom", chatRoom);
return "chat/detail";
}
}
프론트 - 중간 - 백엔드
세 곳에서 웹소켓 다루는 것이 필요하다.
백엔드! BasicWebSocketHandler 메소드 3종 설명!
1) afterConnectionEstablished - 새로운 WebSocket이 연결(open)된 순간 동작하는 메소드
2) handleTextMessage - 클라이언트 -> 서버. 클라이언트가 서버에게 메세지를 보내는(send) 순간
3) afterConnectionClosed - // WebSocket 연결 끊겼을 때
@Component bean으로 등록하는 방법 중 하나 - 나중에 찾아보기!
@NoArgsConstructor
두가지 어노테이션 - 중간다리와 연결을 위해 쓴다. 바깥쪽에서 가져다 쓸 수 있게!
프론트! home.html
백엔드와 연결하는 url 써주기 - ws://localhost:8080/ws/basic
프로토콜 중에
http는 요청이 있을 때 반응하는 통신방식
ws는 계속 뚫려있는 터널
여기는 중간다리! WebSocketConfig
@Configuration - 환경설정 파일이다.
@EnableWebSocket - 웹 소켓에 대한
두가지 어노테이션 필요
@RequiredArgsConstructor BasicWebSocketHandler 가져다 쓰기 위해 필요
클라이언트가 요청한 연결 - basicWebSocketHandler를 연결하기 위해 중간다리에서 registerWebSocketHandlers 메소드 쓴다.
setAllowedOrigins 통신을 하고 있는 도메인을 뜻함.
Jackson 라이브러리에서 제공하는 Java객체와 JSON간의 변환 담당하는 클래스
객체->JSON로, JSON->객체로 손쉽게 변환 가능(파싱!)
웹소켓에서 데이터를 객체 형태로 주고 받을 때 많이 사용
JSON -> Java 객체(DTO)
ObjectMapper objectMapper = new ObjectMapper();
ChatMessageDto chatMessage = objectMapper.readValue(json이름, ChatMessageDto.class);
Java -> JSON
ChatMessageDto chatMessage = new ChatMessageDto("1","2","가나다");
String json = objectMapper.writeValueAsString(chatMessage);
html -> websocketconfig에서 url 받아서 handler에서 할거다~ 알게됨