JAX-RS는 Java에서 RESTful 웹 서비스를 개발하기 위한 API입니다. JAX-RS를 사용하여 클라이언트 측에서 서비스를 호출할 때, 동기 혹은 비동기 방식으로 호출할 수 있습니다. 이 블로그 포스트에서는 JAX-RS 클라이언트에서의 동기와 비동기 호출에 대해 알아보겠습니다.
동기 호출
동기 호출은 클라이언트가 요청을 보내고 서버로부터 응답을 기다리는 방식입니다. 클라이언트는 요청을 보낸 후 서버로부터의 응답을 받을 때까지 대기합니다. 다음은 JAX-RS 클라이언트에서 동기 호출을 수행하는 예제 코드입니다.
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class SyncClientExample {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://example.com/api/resource");
Response response = target.request(MediaType.APPLICATION_JSON).get();
String responseBody = response.readEntity(String.class);
System.out.println(responseBody);
}
}
위의 예제 코드에서는 Client
인스턴스를 생성한 후, WebTarget
을 사용하여 요청을 생성합니다. request(MediaType.APPLICATION_JSON).get()
은 GET 요청을 보내는 동기 호출을 수행하고, 응답은 Response
객체로 받아옵니다. 마지막으로 response.readEntity(String.class)
를 호출하여 응답 본문을 문자열로 변환합니다.
비동기 호출
비동기 호출은 클라이언트가 요청을 보낸 후 서버로부터의 응답을 기다리지 않고 다른 작업을 수행할 수 있는 방식입니다. 클라이언트는 요청을 보낸 후 응답을 기다리지 않고 다음 작업을 처리할 수 있습니다. 다음은 JAX-RS 클라이언트에서 비동기 호출을 수행하는 예제 코드입니다.
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.InvocationCallback;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
public class AsyncClientExample {
public static void main(String[] args) {
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://example.com/api/resource");
target.request(MediaType.APPLICATION_JSON).async().get(new InvocationCallback<Response>() {
@Override
public void completed(Response response) {
String responseBody = response.readEntity(String.class);
System.out.println(responseBody);
}
@Override
public void failed(Throwable throwable) {
throwable.printStackTrace();
}
});
// 다른 작업 수행
// ...
}
}
위의 예제 코드에서는 async().get()
을 호출하여 비동기 호출을 수행합니다. 응답은 InvocationCallback
을 통해 처리됩니다. completed()
메서드는 응답을 받았을 때 호출되며, failed()
메서드는 예외가 발생했을 때 호출됩니다.
결론
JAX-RS 클라이언트에서는 동기와 비동기 호출을 선택적으로 사용할 수 있습니다. 동기 호출은 응답이 도착할 때까지 클라이언트가 대기해야 하지만, 비동기 호출은 응답을 받지 않고도 다른 작업을 수행할 수 있습니다. 프로젝트의 요구사항에 맞게 적절한 방식을 선택하여 사용하면 됩니다.