[java] JAX-RS를 사용한 데이터베이스 연동

JAX-RS는 Java 언어를 기반으로 하는 RESTful 웹 서비스를 구현하기 위한 API입니다. 이를 사용하여 데이터베이스와의 연동을 수행할 수 있습니다. 이 블로그 포스트에서는 JAX-RS를 사용하여 데이터베이스와의 연동을 구현하는 방법에 대해 알아보겠습니다.

1. Maven 의존성 설정

먼저 Maven을 사용하여 프로젝트의 의존성을 설정해야 합니다. 아래의 의존성을 pom.xml 파일에 추가합니다.

<dependencies>
    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.glassfish.jersey.media</groupId>
        <artifactId>jersey-media-json-binding</artifactId>
        <version>2.0</version>
    </dependency>
    <!-- Data source library -->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc8</artifactId>
        <version>19.8.0.0</version>
    </dependency>
</dependencies>

위의 의존성에는 Jersey 컨테이너와 JSON 바인딩을 위한 라이브러리 뿐만 아니라, 데이터소스를 사용하기 위한 ojdbc 라이브러리도 포함되어 있습니다. 이를 통해 데이터베이스와의 연동을 수행할 수 있습니다.

2. 데이터베이스 연결 설정

다음으로는 데이터베이스 연결 설정을 수행해야 합니다. JDBC 드라이버를 사용하여 데이터베이스에 연결하고, 데이터베이스 작업을 수행할 수 있는 DataSource 객체를 생성합니다. 아래의 코드는 Oracle 데이터베이스에 연결하는 예제입니다.

import oracle.jdbc.pool.OracleDataSource;

public class DatabaseConnection {

    private static final String URL = "jdbc:oracle:thin:@localhost:1521:xe";
    private static final String USERNAME = "username";
    private static final String PASSWORD = "password";

    public static OracleDataSource createDataSource() {
        OracleDataSource dataSource = null;

        try {
            dataSource = new OracleDataSource();
            dataSource.setURL(URL);
            dataSource.setUser(USERNAME);
            dataSource.setPassword(PASSWORD);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return dataSource;
    }
}

위의 코드에서 URL, USERNAME, PASSWORD는 사용자의 데이터베이스에 맞게 설정해야 합니다. 이 코드를 통해 데이터베이스 연결에 필요한 DataSource 객체를 생성할 수 있습니다.

3. JAX-RS 리소스 클래스 작성

이제 JAX-RS 리소스 클래스를 작성하여 데이터베이스와의 연동을 수행할 수 있습니다. 아래의 코드는 /users 엔드포인트로부터 사용자 정보를 가져오는 예제입니다.

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

@Path("/users")
public class UserResource {

    private UserDAO userDAO;

    public UserResource() {
        OracleDataSource dataSource = DatabaseConnection.createDataSource();
        userDAO = new UserDAO(dataSource);
    }

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<User> getUsers() {
        return userDAO.getAllUsers();
    }
}

위의 코드에서 @Path 애노테이션은 해당 클래스가 /users 경로에 매핑되어 있는 리소스 클래스임을 나타냅니다. @GET 애노테이션은 GET 요청을 처리하는 메서드임을 나타내며, @Produces 애노테이션은 해당 메서드가 JSON 형식의 응답을 생성함을 나타냅니다.

위의 예제에서는 UserDAO 클래스를 사용하여 데이터베이스 작업을 수행합니다. UserDAO 클래스는 DataSource 객체를 인자로 전달받아 데이터베이스와의 상호작용을 수행하는 클래스입니다.

4. 서블릿 설정

마지막으로, 서블릿 설정을 통해 JAX-RS 리소스를 사용할 수 있도록 해야 합니다. 아래의 코드는 web.xml 파일에 서블릿 매핑을 추가하는 예제입니다.

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>com.example.MyApplication</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>

위의 설정은 /api 경로로 들어오는 요청을 JAX-RS 리소스로 매핑하도록 합니다. javax.ws.rs.Application 매개변수에는 커스텀 Application 클래스를 지정할 수 있습니다.

마치며

이제 JAX-RS를 사용하여 데이터베이스와의 연동을 구현하는 방법에 대해 알아보았습니다. JAX-RS는 간편하게 RESTful 웹 서비스를 개발할 수 있도록 도와주는 강력한 API입니다. 데이터베이스와의 연동을 통해 다양한 비즈니스 로직을 수행할 수 있으며, 이를 통해 우리는 보다 효율적이고 유연한 웹 애플리케이션을 개발할 수 있습니다.

참고 자료: