[java] JAX-RS와 자동화된 테스트 방법

JAX-RS는 Java에서 RESTful 웹 서비스를 개발하기 위한 스펙이다. JAX-RS를 사용하면 쉽게 RESTful API를 만들고 관리할 수 있다. 이 글에서는 JAX-RS를 사용하여 개발된 RESTful 웹 서비스의 자동화된 테스트 방법에 대해 알아보겠다.

1. JAX-RS와 RESTful 웹 서비스

JAX-RS는 Java에서 RESTful 웹 서비스를 개발하기 위한 스펙이다. JAX-RS는 주로 어노테이션을 사용하여 RESTful API의 엔드포인트와 HTTP 메소드를 매핑한다. 예를 들어, @GET, @POST, @PUT, @DELETE 등의 어노테이션을 사용하여 각각의 HTTP 메소드를 매핑할 수 있다.

@Path("/users")
public class UserController {
  
  @GET
  @Produces(MediaType.APPLICATION_JSON)
  public List<User> getUsers() {
    // TODO: Database에서 사용자 목록을 가져와 반환하는 로직 구현
  }
  
  @POST
  @Consumes(MediaType.APPLICATION_JSON)
  @Produces(MediaType.APPLICATION_JSON)
  public User createUser(User user) {
    // TODO: 사용자 정보를 받아와 DB에 저장하고 생성된 사용자 정보를 반환하는 로직 구현
  }
}

위의 예제는 /users 엔드포인트에 대한 GET과 POST 메소드를 매핑하는 JAX-RS 컨트롤러의 예이다.

2. JAX-RS를 위한 자동화된 테스트 방법

개발한 RESTful 웹 서비스를 테스트하기 위해서는 자동화된 테스트 도구를 사용하는 것이 효과적이다. JAX-RS를 위한 자동화된 테스트를 구현하기 위해 다음의 단계를 따를 수 있다.

2.1. 테스트 의존성 추가

먼저, 테스트를 위한 의존성을 pom.xml 파일에 추가해야 한다. JAX-RS를 테스트하기 위해 javax.ws.rs 라이브러리와 Apache HttpClient, JSON 라이브러리 등을 사용할 수 있다.

<dependency>
  <groupId>javax.ws.rs</groupId>
  <artifactId>javax.ws.rs-api</artifactId>
  <version>2.1</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.5.13</version>
  <scope>test</scope>
</dependency>

<!-- JSON 라이브러리 추가 -->

2.2. 테스트 구현

테스트를 작성하기 위해 JUnit 프레임워크를 사용할 수 있다. JAX-RS를 테스트하기 위해는 Apache HttpClient를 사용하여 HTTP 요청을 보내고, 응답을 검증하는 로직을 작성해야 한다.

public class UserControllerTest {
  
  private static final String BASE_URL = "http://localhost:8080/api";
  
  @Test
  public void testGetUsers() throws IOException {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    
    HttpGet httpGet = new HttpGet(BASE_URL + "/users");
    
    CloseableHttpResponse response = httpClient.execute(httpGet);
    
    assertThat(response.getStatusLine().getStatusCode()).isEqualTo(200);
    
    // TODO: 응답 본문을 파싱하여 사용자 목록 검증
    
    httpClient.close();
  }
  
  @Test
  public void testCreateUser() throws IOException {
    CloseableHttpClient httpClient = HttpClients.createDefault();
    
    HttpPost httpPost = new HttpPost(BASE_URL + "/users");
    
    // TODO: 요청 본문에 사용자 정보 추가
    
    CloseableHttpResponse response = httpClient.execute(httpPost);
    
    assertThat(response.getStatusLine().getStatusCode()).isEqualTo(201);
    
    // TODO: 응답 본문을 파싱하여 생성된 사용자 정보 검증
    
    httpClient.close();
  }
}

위의 예제는 /api/users 엔드포인트에 대한 GET 및 POST 요청을 테스트하는 JUnit 테스트 클래스의 예시이다.

3. 결론

JAX-RS를 사용하여 개발된 RESTful 웹 서비스의 자동화된 테스트는 Apache HttpClient를 사용하여 HTTP 요청을 보내고 응답을 검증하는 방식으로 구현할 수 있다. 자동화된 테스트를 통해 개발한 API의 기능 및 성능을 검증하고, 변경사항에 따른 호환성 문제를 사전에 발견할 수 있다.

참고 자료