[java] Guice를 사용하여 Java 서블릿에서 메일 발송 처리하기

이번 포스트에서는 Guice를 사용하여 Java 서블릿에서 메일 발송 처리를 구현하는 방법에 대해 알아보겠습니다.

Guice란?

Guice는 Google에서 만든 경량의 의존성 주입 프레임워크입니다. Java에서 의존성 주입을 통해 객체를 생성하고 관리하는 것을 더욱 간편하게 도와줍니다.

의존성 주입 설정하기

먼저, Guice를 프로젝트에 추가해야 합니다. Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다:

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

의존성을 추가한 후, Guice를 사용하여 의존성 주입 설정을 해보겠습니다. EmailService 클래스는 실제로 메일을 발송하는 로직을 구현하는 클래스입니다.

public class EmailService {
    public void sendMail(String address, String subject, String body) {
        // 메일 발송 로직 구현
    }
}

이제 GuiceModule 클래스를 생성하여 의존성 주입 설정을 합니다. 이 클래스는 ServletModule을 상속받아 구현합니다.

public class GuiceModule extends ServletModule {
    @Override
    protected void configureServlets() {
        bind(EmailService.class).to(EmailServiceImpl.class);
        serve("/sendMail").with(EmailServlet.class);
    }
}

EmailService 클래스를 EmailServiceImpl 클래스와 연결시킵니다. serve("/sendMail") 메소드를 사용하여 /sendMail 경로로 들어오는 요청을 EmailServlet 클래스로 처리하도록 설정합니다.

Servlet 코드 구현하기

이제 EmailServlet 클래스를 생성하여 실제 요청 처리를 구현합니다.

public class EmailServlet extends HttpServlet {
    @Inject
    private EmailService emailService;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String address = request.getParameter("address");
        String subject = request.getParameter("subject");
        String body = request.getParameter("body");

        emailService.sendMail(address, subject, body);

        response.getWriter().println("메일이 발송되었습니다.");
    }
}

EmailService 클래스를 @Inject 어노테이션을 사용하여 의존성 주입합니다. doPost 메소드에서 요청 파라미터를 받아와 EmailServicesendMail 메소드를 호출하여 메일을 발송합니다.

Guice를 활용하여 서블릿 등록하기

마지막으로, Guice를 활용하여 서블릿을 등록하는 코드를 작성합니다. web.xml 파일 대신 ServletContainer 클래스를 생성하여 서블릿을 등록합니다.

public class ServletContainer extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new GuiceModule());
    }
}

GuiceServletContextListener 클래스를 상속받아 getInjector 메소드를 오버라이딩하고, GuiceModule 클래스를 생성하여 Injector를 반환하도록 설정합니다.

마무리

이제 Guice를 사용하여 Java 서블릿에서 메일 발송 처리를 구현하는 방법을 알아보았습니다. Guice를 활용하면 의존성 주입을 통해 코드의 결합도를 낮출 수 있으며, 유지보수와 테스트에도 도움이 됩니다.

더 자세한 내용은 Guice 공식 문서를 참고하시기 바랍니다.