[java] JAX-RS를 사용한 사물인터넷(IoT) 연동

사물인터넷(IoT)은 우리가 일상적으로 사용하는 모든 장치와 사물을 인터넷에 연결하여 상호작용하도록 만드는 기술입니다. 사물인터넷은 다양한 분야에서 활용되고 있는데, 예를 들면 스마트 홈, 스마트 시티, 산업 자동화 등이 있습니다.

JAX-RS는 자바에서 웹 서비스를 개발하기 위한 API로, 사물인터넷과 같은 분야에서 RESTful 웹 서비스를 구축하는데 많이 사용됩니다. JAX-RS는 자바 명세이며 여러 가지 구현체가 존재합니다. 대표적으로는 Jersey, Apache CXF, RESTEasy 등이 있습니다.

여기서는 JAX-RS를 사용하여 사물인터넷과 연동하는 예제를 살펴보겠습니다.

필요한 의존성 추가하기

JAX-RS를 사용하기 위해 프로젝트에 필요한 의존성을 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음과 같이 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>javax.ws.rs</groupId>
        <artifactId>javax.ws.rs-api</artifactId>
        <version>2.1</version>
    </dependency>
    <!-- JAX-RS 구현체 추가 -->
    <dependency>
        <groupId>org.glassfish.jersey.core</groupId>
        <artifactId>jersey-server</artifactId>
        <version>2.34</version>
    </dependency>
</dependencies>

JAX-RS 리소스 클래스 작성하기

JAX-RS에서는 @Path 어노테이션을 사용하여 리소스를 식별합니다. 다음은 간단한 예제 코드입니다.

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

@Path("/sensors")
public class SensorResource {

    @GET
    @Path("/temperature")
    @Produces("application/json")
    public Response getTemperature() {
        // 센서에서 온도 데이터를 가져와서 JSON 형식으로 반환하는 로직
        double temperature = SensorService.getTemperature();
        String json = "{\"temperature\": " + temperature + "}";
        return Response.ok(json).build();
    }
}

위의 코드에서 @Path 어노테이션은 해당 리소스를 어떤 경로에 매핑할지 정의합니다. @GET 어노테이션은 해당 메서드가 HTTP GET 요청을 처리한다는 것을 나타냅니다. @Produces 어노테이션은 응답으로 보낼 데이터의 형식을 지정합니다. 이 예제에서는 JSON 형식으로 응답을 보내기 위해 "application/json"으로 설정했습니다.

JAX-RS 애플리케이션 설정하기

JAX-RS 애플리케이션을 구동하기 위해 설정 파일을 작성해야 합니다. 다음은 web.xml 파일을 사용하는 경우의 예제입니다.

<web-app>
    <servlet>
        <servlet-name>jersey-serlvet</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</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>jersey-serlvet</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
</web-app>

위의 설정에서 init-paramjersey.config.server.provider.packages 파라미터에는 JAX-RS 리소스 클래스가 위치한 패키지를 지정해야 합니다. url-pattern은 애플리케이션의 루트 경로를 정의합니다.

테스트하기

설정이 완료되면 JAX-RS 애플리케이션이 실행되어야 합니다. 이를 위해 애플리케이션을 빌드한 후 서버에서 실행하거나, IDE에서 내장된 서버를 사용하여 애플리케이션을 실행할 수 있습니다.

서버가 실행되면 http://localhost:8080/api/sensors/temperature에 GET 요청을 보내어 온도 데이터를 가져올 수 있습니다.

위의 예제는 JAX-RS를 사용하여 사물인터넷과 연동하는 간단한 예제를 보여줍니다. JAX-RS는 웹 서비스 개발에 많이 사용되는 표준 API이며, 사물인터넷과 같은 분야에서도 유용하게 활용될 수 있습니다.

참고 자료