[java] JAX-RS 컨텐츠 네고시에이션

JAX-RS는 Java API for RESTful Web Services의 약자로, 웹 서비스를 개발하는 데 사용되는 Java API입니다. JAX-RS를 사용하면 RESTful 웹 서비스를 쉽게 구축할 수 있습니다. 이번 글에서는 JAX-RS에서 제공하는 컨텐츠 네고시에이션 기능에 대해 알아보겠습니다.

컨텐츠 네고시에이션은 클라이언트와 서버 간의 요청 및 응답에서 사용할 수 있는 가장 적합한 컨텐츠 유형을 결정하는 프로세스입니다. 이는 클라이언트와 서버가 서로 다른 컨텐츠 형식을 지원할 수 있을 때 유용합니다. 예를 들어, 클라이언트가 JSON 형식으로 데이터를 요청하고 서버가 XML 형식으로 응답할 경우, 컨텐츠 네고시에이션을 통해 JSON으로 요청할 수 있음에도 불구하고 XML로 응답하도록 설정할 수 있습니다.

JAX-RS는 다양한 컨텐츠 네고시에이션 전략을 제공합니다. 다음은 JAX-RS에서 제공하는 주요 컨텐츠 네고시에이션 전략입니다.

1. 미디어 타입

JAX-RS는 @Produces 어노테이션을 사용하여 서버에서 지원하는 미디어 타입을 선언할 수 있습니다. 클라이언트는 Accept 헤더를 통해 선호하는 미디어 타입을 전달하고, 서버는 해당하는 미디어 타입을 제공할 수 있을 때 선택합니다. 다음은 @Produces 어노테이션의 사용 예시입니다.

@GET
@Produces("application/json")
public Response getJSONData() {
    // JSON 데이터 반환
    return Response.ok().entity(data).build();
}

@GET
@Produces("application/xml")
public Response getXMLData() {
    // XML 데이터 반환
    return Response.ok().entity(data).build();
}

2. 퀄리티 파라미터

JAX-RS는 @Produces 어노테이션 내에 퀄리티 파라미터를 지정하여 미디어 타입의 우선순위를 변경할 수 있습니다. 클라이언트는 q 퀄리티 파라미터를 통해 선호도를 전달하고, 서버는 해당 퀄리티 파라미터를 고려하여 가장 적합한 미디어 타입을 선택합니다. 다음은 퀄리티 파라미터를 사용한 예시입니다.

@GET
@Produces({"application/json; q=0.8", "application/xml; q=0.5"})
public Response getData() {
    // JSON 데이터 반환
    return Response.ok().entity(data).build();
}

3. 동적 컨텐츠 네고시에이션

JAX-RS는 @Produces 어노테이션을 동적으로 설정하여 컨텐츠 네고시에이션을 지원할 수도 있습니다. 클라이언트의 요청에 따라 동적으로 미디어 타입을 선택하고, 해당하는 데이터를 반환할 수 있습니다. 다음은 동적 컨텐츠 네고시에이션을 위한 예시입니다.

@GET
@Produces("text/html")
public Response getHTMLData(@Context HttpHeaders headers) {
    List<MediaType> mediaTypes = headers.getAcceptableMediaTypes();
    // 클라이언트가 지원하는 미디어 타입 확인 및 선택
    // 선택된 데이터 반환
    return Response.ok().entity(data).build();
}

JAX-RS를 사용하면 컨텐츠 네고시에이션을 쉽게 구현할 수 있습니다. 클라이언트의 요청에 따라 가장 적합한 미디어 타입을 선택하여 데이터를 제공할 수 있습니다.

참고 자료