[java] Guice를 이용한 Java 서블릿에서 JSON 응답 처리하기

이 블로그 포스트에서는 Guice를 사용하여 Java 서블릿에서 JSON 응답을 처리하는 방법을 살펴보겠습니다.

개요

JSON은 현대적인 웹 애플리케이션에서 매우 널리 사용되는 데이터 교환 형식입니다. Java로 작성된 서블릿 애플리케이션에서 JSON 응답을 생성하려면 JSON 라이브러리를 사용해야 합니다. Guice는 의존성 주입(Dependency Injection) 프레임워크로, 서블릿에서 의존성 주입을 통해 JSON 응답을 처리하는 것이 간단하게 구현됩니다.

Guice 설정하기

먼저, 프로젝트에 Guice를 설정해야 합니다. Guice를 사용하기 위해서는 아래와 같이 의존성을 추가해야 합니다.

<dependency>
  <groupId>com.google.inject</groupId>
  <artifactId>guice</artifactId>
  <version>4.2.3</version>
</dependency>

JSON 라이브러리 추가하기

JSON 데이터를 처리하기 위해 JSON 라이브러리를 추가해야 합니다. 예를 들어, Gson 라이브러리를 사용하겠습니다. Gson도 Guice와 동일하게 의존성을 추가해야 합니다.

<dependency>
  <groupId>com.google.code.gson</groupId>
  <artifactId>gson</artifactId>
  <version>2.8.7</version>
</dependency>

Guice 모듈 작성하기

의존성 주입을 사용하기 위해 Guice 모듈을 작성해야 합니다. Guice 모듈은 JsonModule과 같은 클래스로 구현될 수 있습니다. 아래는 JsonModule의 예입니다.

public class JsonModule extends AbstractModule {
  @Override
  protected void configure() {
    bind(JsonSerializer.class).to(GsonJsonSerializer.class);
  }
}

위 예제에서는 JsonSerializer 인터페이스를 GsonJsonSerializer 클래스에 바인딩하고 있습니다. JsonSerializer 인터페이스는 JSON 데이터를 직렬화하는 데 사용됩니다. GsonJsonSerializer 클래스는 Gson 라이브러리를 사용하여 JSON 데이터를 직렬화합니다.

Guice 서블릿 구성하기

이제 Guice를 사용하여 서블릿을 구성해보겠습니다. 먼저, GuiceServletContextListener 클래스를 상속하는 컨텍스트 리스너 클래스를 작성해야 합니다. 이 클래스에서 Guice 모듈을 설정하고 Guice Servlet 모듈을 추가해야 합니다.

public class MyAppServletContextListener extends GuiceServletContextListener {
  @Override
  protected Injector getInjector() {
    return Guice.createInjector(new JsonModule(), new ServletModule() {
      @Override
      protected void configureServlets() {
        serve("/myendpoint").with(MyServlet.class);
      }
    });
  }
}

MyServlet은 실제로 JSON 응답을 생성하는 서블릿 클래스를 나타냅니다. 여기에서는 /myendpoint에 대한 요청을 MyServlet으로 매핑합니다.

JSON 응답 생성하기

마지막으로 MyServlet 클래스에서 JSON 응답을 생성하는 로직을 작성해야 합니다. 아래는 MyServlet의 예입니다.

public class MyServlet extends HttpServlet {
  private final JsonSerializer jsonSerializer;

  @Inject
  public MyServlet(JsonSerializer jsonSerializer) {
    this.jsonSerializer = jsonSerializer;
  }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setContentType("application/json");

    // 데이터 생성
    MyData myData = new MyData("Hello, Guice!");

    // JSON 직렬화
    String json = jsonSerializer.toJson(myData);

    // 응답 전송
    resp.getWriter().write(json);
  }
}

위 예제에서는 JsonSerializer를 의존성 주입받고, doGet 메서드에서 JSON 응답을 생성합니다. MyDataHello, Guice!라는 내용을 담고 있는 간단한 POJO 클래스입니다.

결론

이번 블로그 포스트에서는 Guice를 사용하여 Java 서블릿에서 JSON 응답을 처리하는 방법을 알아보았습니다. Guice를 사용하면 의존성 주입을 통해 JSON 라이브러리와 서블릿 클래스를 간단하게 연결할 수 있습니다.


참고 자료: