스프링 환경에서 채팅 기능을 구현할 수 있다. TCP/IP 프로토콜을 사용하여 서버와 통신하는 클라이언트 프로그램을 구현할 수 있는 Socket 통신을 이용할 것이다. 채팅 및 쪽지 관련 포스팅 예제 https://hdhdeveloper.tistory.com/38 [SpringFramework] WebSocket통신을 이용한 간단한 쪽지(메세지) 기능 구현 예제[1] 이번에는 저번에 Socket을 구현하여 1대1 및 다중 채팅 기능을 구현했다면, 이번에는 웹소켓을 이용해 다른 이에게 쪽지를 보내고, 확인할 수 있는 기능을 구현할 예정이다. 웹소캣은 http 프로토콜 hdhdeveloper.tistory.com https://hdhdeveloper.tistory.com/39 [SpringFramework] WebSocket통신을 이용한 간단한 쪽지(메세지) 기능 구현 예제[1] 이번에는 저번에 Socket을 구현하여 1대1 및 다중 채팅 기능을 구현했다면, 이번에는 웹소켓을 이용해 다른 이에게 쪽지를 보내고, 확인할 수 있는 기능을 구현할 예정이다. 웹소캣은 http 프로토콜 hdhdeveloper.tistory.com 채팅을 구현하기 위해서는 Socket 통신의 방법부터 보자 1. 클라이언트(요청자)가 호스트 이름 / IP 주소 및 포트 번호로 지정된 서버에 대한 연결 시작 -테스트 과정에서 IP를 확인하여 진행한다.
연결을 종료하지 않으면, 사용자가 직접 끊을 때까지, 채팅이 지속된다. 내가 테스트 했던 개발 환경이다. JDK 버젼 : 1.8 SPRING VERSION : 4.3.4 RELEASE 먼저 SpringFramework 에서 Socket을 사용할 수 있도록 pom.xml 설정파일에 dependency를 추가하자
해당 dependency를 추가해주면 자동으로 메이븐을 다운 받는다. 그 후, Socket 프로그래밍을 구현할 패키지를 하나 생성한다. 나의 패키지 구성이다. 첫번째로 진행할 것은 servlet-context.xml에 echo라는 요청이 들어왔을 때, EchoHandler.java 에서 해당 요청을 처리하겠다는 bean 객체 설정이 필요하다. servlet-context.xml 파일을 열어 다음과 같은 사항을 입력해주자. 가린 부분은 내 PC의 아이피 정보와 포트번호를 입력해주면 된다 IP정보로 접속했을 때의 요청도 처리하게끔 해주는 것이다 WebSocket 을 구성하기위해서 config 파일을 만들어서 WebSocket 구성을 해주면 된다 해당 WebSocketConfig.java 파일 소스코드이다
ClientLibraryUrl에 SockJs CDN을 입력해줌으로써, SockJS를 사용하도록 설정한다. 다음은 EchoHandler.java 파일이다.
afterConnectionEstablished 메소드는 해당 IP포트로 클라이언트가 접속했을 때 실행되는 메소드다 handleTextMessage메소드는 클라이언트가 메세지를 보냈을 때, 나타나는 메소드다 afterConnectionClosed메소드는 연결이 끊어지면 실행되는 메소드이다 제일 하단 searchUserName 메소드는 세션 객체에 저장해둔 user_name을 가져와서 사용하려고 만든 메소드이다 --echo-ws.jsp
<script src="../resources/js/sockjs.min.js"></script> 해당 javascript 파일은 아래 링크를 통해 다운로드 받을 수 있다. github.com/sockjs/sockjs-client sockjs/sockjs-client WebSocket emulation - Javascript client. Contribute to sockjs/sockjs-client development by creating an account on GitHub. github.com 아주 간단하게 Socket 통신 예제로 채팅 기능을 구현해봤다. 결과물은 이렇다. 상단에 보면 서로 다른 두개의 아이디로 접속해, 채팅을 하는 모습이다. 해당 기능을 테스트 하는 방법은 창을 두개로 띄워서 테스트를 진행해보면 될 것이다. 나는 echo-ws.jsp를 따로 페이지를 만들어 / 경로의 메인페이지에 include 하는 방식으로 구현했다. 메세지 옆 이름에는 아까 EchoHandler에서 session을 이용해 담아온 객체 user_name이 표기 된다. |