[java] Guice와 JAX-RS의 통합

Guice와 JAX-RS는 모두 Java 기반의 프레임워크이며, 서로 다른 기능을 제공합니다. Guice는 의존성 주입(Dependency Injection)을 쉽게 구현할 수 있는 프레임워크이고, JAX-RS는 RESTful 웹 서비스를 개발하기 위한 API입니다. 이 두 가지 프레임워크를 통합하여 사용하면 의존성 주입을 통해 JAX-RS 리소스 클래스를 관리할 수 있습니다.

Guice와 JAX-RS의 통합 방법

  1. Guice의 ServletModule을 사용하여 JAX-RS와 Guice의 통합을 설정합니다.
public class MyServletModule extends ServletModule {
    @Override
    protected void configureServlets() {
        bind(MyResource.class); // JAX-RS 리소스 클래스 바인딩

        bind(GuiceFilter.class);
        filter("/*").through(GuiceFilter.class);

        bind(GuiceContainer.class);
        serve("/*").with(GuiceContainer.class);
    }
}
  1. Guice와 JAX-RS를 함께 사용할 수 있는 Application 클래스를 작성합니다.
public class MyApp extends ResourceConfig {
    public MyApp() {
        register(new MyBinder()); // Guice 모듈 등록
        packages("com.myapp"); // JAX-RS 리소스 패키지 등록
    }
}
  1. web.xml 파일에 Guice와 JAX-RS의 설정을 추가합니다.
<web-app>
    <filter>
        <filter-name>GuiceFilter</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>GuiceFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <servlet>
        <servlet-name>MyApp</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.myapp.MyApp</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>MyApp</servlet-name>
        <url-pattern>/api/*</url-pattern>
    </servlet-mapping>
</web-app>
  1. Guice와 JAX-RS를 함께 사용하는 예시 리소스 클래스를 작성합니다.
@Path("/users")
public class UserResource {
    private final UserRepository userRepository;
    
    @Inject
    public UserResource(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public List<User> getUsers() {
        return userRepository.getAllUsers();
    }
}

Guice와 JAX-RS의 통합 장점

결론

Guice와 JAX-RS를 함께 사용하면 의존성 주입과 RESTful 웹 서비스 개발을 보다 효과적으로 할 수 있습니다. 통합 설정을 통해 코드의 유지 보수성을 향상시키고, Guice의 다양한 기능을 활용하여 애플리케이션을 유연하게 만들 수 있습니다.

참고 자료