본문 바로가기
JAVA/Java - Spring

[Java-Spring] WebSoket을 이용한 알람기능 구현

1. Pom.xml 추가

 

	<!-- websocket -->
	<dependency>
	    <groupId>org.springframework</groupId>
	    <artifactId>spring-websocket</artifactId>
	    <version>5.2.1.RELEASE</version>
	</dependency>
	<dependency>
	    <groupId>javax.websocket</groupId>
	    <artifactId>javax.websocket-api</artifactId>
	    <version>1.1</version>
	    <scope>provided</scope>
	</dependency>

 

 

2. Web.xml 설정

 

	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
			/WEB-INF/spring/servlet-context.xml
			/WEB-INF/spring/aop-context.xml			
			</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
		<async-supported>true</async-supported>
	</servlet>

 

Web.xml에서는 비동기를 위한 로직인 <async-supported>true</async-supported>를 추가합니다. 비동기식으로 처리하는 이유는 2개 이상의 클라이언트가 동시에 데이터를 주고받을 경우 에러가 나지 않도록 하기 위함입니다. 만약 동기식으로 처리한다면 1:1 통신에서는 상관이 없지만 다수의 클라이언트를 대상으로 하면 에러가 발생합니다.

 

 

3. Servlet-context.xml 설정

 

    <!-- WebSocket -->
    <beans:bean id="webSocketHandler" class="com.vote.common.websocket.WebSocketHandler" />
    
    <websocket:handlers>
    	<websocket:mapping handler="replyEchochoHandler" path="/replyEcho"/>
    	<websocket:handshake-interceptors>
    		<beans:bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor"/>
    	</websocket:handshake-interceptors>
    </websocket:handlers>

Servlet-context.xml 설정입니다.

 

    <beans:bean id="webSocketHandler" class="com.vote.common.websocket.WebSocketHandler" />

이 부분은 아래에서 직접 webSocket을 조작하는 자바클래스파일을 직접 만들거기 때문에 class의 경로는 생성할 자바클래스파일의 경로를 적으면 됩니다. 자바파일은 아래에서 만들겠습니다.

 

    <websocket:handlers>
    	<websocket:mapping handler="replyEchochoHandler" path="/replyEcho"/>
    	<websocket:handshake-interceptors>
    		<beans:bean class="org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor"/>
    	</websocket:handshake-interceptors>
    </websocket:handlers>

이 부분은 핸드쉐이크를 하는 인터셉터를 추가하는 부분입니다. 보통의 경우에는 필요가 없지만 여기서는 사용자의 Session을 가져와서 사용해야 하기 때문에 추가를 했습니다. 만약 웹소켓 사용시 Session에 대한정보가 필요없다면 빼주셔도 괜찮습니다. 

 

	<dependency>
	    <groupId>javax.websocket</groupId>
	    <artifactId>javax.websocket-api</artifactId>
	    <version>1.1</version>
	    <scope>provided</scope>
	</dependency>

만약 한대쉐이크 핸들러가 필요없다면 pom.xml에서 이 부분도 제외해주셔도 괜찮습니다.

댓글