본문 바로가기

TIL

[2022-1-23]프론트 컨트롤러 구현 및 리팩토링

프론트 컨트롤러

기존에는 컨트롤러들이 각각 하나의 URI마다 하나의 서블릿 객체가 매핑되도록 구현하였다. 이렇게 구현하다보니 다음과 같은 문제점들이 발생했다.

 

1. 각각의 컨트롤러들이 HttpServlet를 상속받아 컨트롤러를 서블릿 의존적으로 구현하게 된다.

2. 서블릿에 의존하기 때문에 컨트롤러들에 같은 코드가 공통적으로 사용된다.

 

이에 대해 프론트 컨트롤러 클래스를 구현하여 문제를 해결할 수 있다. 

 

프론트 컨트롤러는 HttpServlet을 상속받은 컨트롤러로, 모든 클라이언트의 요청을 '혼자' 받는다. 그리고 클라이언트의 요청에 따라 서블릿을 상속받지않고 구현된 컨트롤러를 호출한다. 이와같이 구현하므로써 각각의 컨트롤러들은 서블릿 요청에 따라 비지니스로직을 수행하고, 모델에 데이터를 담아 뷰를 호출하는 MVC 패턴에만 집중할 수 있게 되었다. 

 

예제코드가 많지 않아서 지금은 잘 체감되지 않지만 컨트롤러가 수십개라면 기존 코드보다 훨씬 개발자에게 이해하기 쉬울것이다.

 

이렇게 프론트 컨트롤러 구현의 방향성은 아래와 같이 정리 했다.

첫째, 공통적으로 발생하는 중복 코드를 하나의 서블릿 객체에서 처리하고,

둘째, 이러한 공통 코드와 서비스 로직이 하나의 메소드 안에 구현되어있던 것을 분리한다.

 

컨트롤러의 서블릿, ModelView 클래스 등에 대한 의존성을 최대한 낮추고 이 부분들에 대해서는 프론트 컨트롤러가 담당하게 되는 것이다.  

 

이런한 프론트 컨트롤러를 개발자가 편리하게 사용할 수 있도록 제공하는 것이 바로 Spring Web MVC Framework 이다.

 

느낀점

스프링 없이 서블릿과 jsp, 순수 자바로 프론트 컨트롤러를 구현하면서 느낀 것이, 기본편 강의에서 했던 @Configuraion 클래스를 구현하는 것과 비슷한 느낌을 받았다. 중복되고, 의존관계를 복잡하게하는 설정들을 하나의 파일안에 넣어서 결국 그 것을 프레임워크가 관리하게 하는 것이다. 이러한 기능들은 결국 객체지향의 장점을 극대화 하는 방향으로 이루어 진다. 얼마나 Spring이 객체지향에 진심인지 알게되는 것 같다.