SPRING

Spring.스프링 프레임워크 - 채팅

calla1013 2025. 6. 7. 12:19

 

 

 

Spring WebSocket과 STOMP로 실시간 채팅 기능 구현하기 (완벽 가이드)

안녕하세요! 이번 시간에는 Spring Framework의 spring-websocket 모듈을 사용하여 실시간 양방향 통신을 지원하는 채팅 애플리케이션을 구축하는 방법을 알아보겠습니다.

1단계: 프로젝트 초기 설정

1.1. 의존성 추가 (pom.xml)

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

1.2. 데이터베이스 테이블 생성

-- 채팅방 테이블 생성
CREATE TABLE rooms (
    room_no   NUMBER PRIMARY KEY,
    room_name VARCHAR2(1000),
    mem_id    VARCHAR2(100),
    reg_date  DATE,
    del_yn    VARCHAR2(1)
);

CREATE SEQUENCE room_seq START WITH 1 INCREMENT BY 1;

-- 채팅 로그 테이블 생성
CREATE TABLE chatlog (
    chat_no   NUMBER PRIMARY KEY,
    mem_id    VARCHAR2(100),
    room_no   NUMBER,
    chat_msg  VARCHAR2(4000),
    send_date DATE
);

CREATE SEQUENCE chat_seq START WITH 1 INCREMENT BY 1;

1.3. 클라이언트 라이브러리 준비

WebSocket 통신을 위해 클라이언트 측에서 사용할 SockJS와 STOMP 라이브러리를 프로젝트의 js 폴더에 추가합니다.

  • sockjs.min.js: WebSocket을 지원하지 않는 브라우저에서도 유사한 기능을 제공하는 라이브러리입니다.
  • stomp.min.js: STOMP 프로토콜을 사용하기 위한 클라이언트 라이브러리입니다.

2단계: WebSocket 서버 설정 (WebSocketConfig.java)

@Configuration
@EnableWebSocketMessageBroker // WebSocket 메시지 브로커 활성화
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

    // STOMP 프로토콜을 사용하기 위한 엔드포인트 설정
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/endpoint").withSockJS(); // SockJS 사용
    }

    // 메시지 브로커 관련 설정
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // /subscribe 경로로 시작하는 destination에 메시지를 발행
        registry.enableSimpleBroker("/subscribe");
        // /app 경로로 시작하는 destination으로 향하는 메시지는 @MessageMapping 메서드로 라우팅
        registry.setApplicationDestinationPrefixes("/app");
    }
}

3단계: 채팅방 생성 및 목록 기능 구현

사용자가 채팅방을 만들고 목록을 볼 수 있는 기능을 구현합니다. (이 부분은 일반적인 Spring MVC CRUD와 유사하므로 주요 코드만 요약합니다.)

  • VO: RoomVO.java (방 번호, 방 제목, 방장 ID 등)
  • DAO/Mapper: IRoomDAO.java, room.xml (채팅방 목록 조회, 생성, 삭제 SQL)
  • Service: RoomService.java
  • Controller: RoomController.java (/chatListView 요청 시 채팅방 목록을 모델에 담아 chat/chatListView.jsp로 전달)
  • View: chatListView.jsp (JSTL <c:forEach>로 채팅방 목록을 출력하고, Bootstrap Modal을 이용해 채팅방 생성 폼 제공)

4단계: 실시간 메시지 처리

4.1. 백엔드 메시지 핸들러 (ChatLogController)

@Controller
public class ChatLogController {
    @Autowired ChatLogService chatService;
    @Autowired RoomService roomService;

    // 채팅 화면으로 이동
    @RequestMapping("/chatView")
    public String chat(Model model, int roomNo) {
        List chatList = chatService.getChatList(roomNo); // 이전 채팅 내역 조회
        RoomVO room = roomService.getRoom(roomNo); // 방 정보 조회
        model.addAttribute("room", room);
        model.addAttribute("chatList", chatList);
        return "chat/chatView";
    }

    // 메시
::contentReference[oaicite:0]{index=0}