[java] JAX-RS를 사용한 실시간 대화 시스템 구현

개요

이 글에서는 Java의 JAX-RS 프레임워크를 사용하여 실시간 대화 시스템을 구현하는 방법에 대해 알아보겠습니다. JAX-RS는 Java 언어로 RESTful 웹 서비스를 만들기 위한 표준 스펙이며, 실시간 대화 시스템을 구현하는 데 매우 유용합니다.

필요한 도구

프로젝트 설정

  1. IDE에서 새로운 Java 프로젝트를 만듭니다.
  2. JAX-RS 구현체를 프로젝트에 추가합니다. 여기서는 Jersey를 사용하도록 하겠습니다. Maven이나 Gradle을 사용하여 의존성을 추가할 수 있습니다.

    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.31</version>
    </dependency>
    
  3. JAX-RS 리소스 클래스를 생성합니다. 이 클래스는 RESTful API 엔드포인트를 정의하는 역할을 합니다.

    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    @Path("/chat")
    public class ChatResource {
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String joinChat() {
            return "Welcome to the chat room!";
        }
    }
    

웹 서버 설정

  1. 웹 서버에 JAX-RS 구현체를 등록해야 합니다. 예를 들어, Apache Tomcat을 사용한다면 web.xml 파일에 다음과 같이 설정합니다.

    <servlet>
        <servlet-name>Jersey Servlet</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.example.chat</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>Jersey Servlet</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
    
  2. 웹 서버를 실행하고 http://localhost:8080/api/chat에 접속해보면 “Welcome to the chat room!” 메시지를 확인할 수 있습니다.

실시간 기능 추가

실제 실시간 대화 시스템을 구현하기 위해서는 실시간 통신 기능이 필요합니다. 여기서는 WebSocket을 사용하여 실시간으로 메시지를 전달하는 예제를 살펴보겠습니다.

  1. WebSocket에 대한 의존성을 프로젝트에 추가합니다.

    <dependency>
        <groupId>javax.websocket</groupId>
        <artifactId>javax.websocket-api</artifactId>
        <version>1.1</version>
    </dependency>
    
  2. JAX-RS 리소스 클래스에 WebSocket 핸들러를 추가합니다.

    import javax.websocket.OnMessage;
    import javax.websocket.Session;
    import javax.websocket.server.ServerEndpoint;
    
    @ServerEndpoint("/chatroom")
    public class ChatRoomEndpoint {
    
        @OnMessage
        public void onMessage(String message, Session session) {
            // 전달받은 메시지를 처리하는 로직 구현
            System.out.println("Received message: " + message);
        }
    }
    
  3. 웹 소켓 통신을 위한 웹 서버 설정을 추가합니다.

    <servlet>
        <servlet-name>WebSocket Servlet</servlet-name>
        <servlet-class>org.glassfish.tyrus.servlet.TyrusServlet</servlet-class>
        <init-param>
            <param-name>javax.websocket.server.ServerEndpointConfig</param-name>
            <param-value>com.example.chat.ChatRoomEndpoint</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>WebSocket Servlet</servlet-name>
        <url-pattern>/ws/*</url-pattern>
    </servlet-mapping>
    
  4. 웹 서버를 실행하고 WebSocket 클라이언트를 사용하여 ws://localhost:8080/ws/chatroom에 접속하여 메시지를 전송해보면 콘솔에 메시지가 출력되는 것을 확인할 수 있습니다.

결론

이렇게 JAX-RS와 WebSocket을 사용하여 실시간 대화 시스템을 구현할 수 있습니다. JAX-RS를 통해 RESTful API를 구현하고 WebSocket을 통해 실시간 통신을 추가하는 것은 매우 간편하며, Java 개발자들에게 좋은 선택지가 될 수 있습니다.

참고 자료