목차
- 서블릿의 문제점
- MVC 패턴
- Thymeleaf
- SSR, CSR
초기의 웹 애플리케이션은 Servlet 하나가 모든 역할을 담당했다.
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;
@WebServlet("/movies/recommendation")
public class MovieRecommendationServlet extends HttpServlet {
private final List<String> recommendedMovies = List.of(
"쇼생크 탈출",
"대부",
"다크 나이트",
"인생은 아름다워"
);
// 1. Map을 JSON으로 바꾸기 위해 필요한 ObjectMapper를 생성합니다.
private final ObjectMapper objectMapper = new ObjectMapper();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
// 2. 랜덤으로 영화 하나를 선택합니다.
int randomIndex = (int) (Math.random() * recommendedMovies.size());
String randomMovie = recommendedMovies.get(randomIndex);
Map<String, String> movieMap = Map.of("title", randomMovie);
// 3. 응답 속성을 설정합니다.
response.setContentType("application/json; charset=UTF-8");
// 4. ObjectMapper를 사용해 JSON 문자열로 변환합니다.
String json = objectMapper.writeValueAsString(movieMap);
// 5. 생성된 JSON을 클라이언트에게 응답으로 보냅니다.
response.getWriter().print(json);
}
}
위와 같이 코드를 작성하면, 굉장히 간단한 코드임에도 불구하고 복잡한 코드가 된다.
이러한 문제를 해결하기 위해 등장한 것이 MVC(Model-View-Controller)패턴 이다.
MVC는 애플리케이션의 역할을 Model, View, Controller 3부분으로 분리한다.
이로 인해, 역할을 분리함으로서 코드가 훨씬 깔끔해지고, 유지보수와 테스트가 용이해지는 장점을 가진다.

컨트롤러에서는 사용자의 HTTP 요청을 받아서 처리한다. URL매핑을 통하여 어떤 요청이 들어왔느냐에 따라 어떤 메서드를 실행할지를 결정하고, 그 비즈니스 로직을 Model에 담아서 View에게 넘겨준다
데이터 처리와 비즈니스 로직을 담당한다. 회원 조회, 회원 저장, 주문 생성등의 기능이 이에 속한다.
사용자에게 보여줄 UI를 생성한다. View는 데이터를 출력하는 역할만 담당하고 비즈니스 로직은 포함하지 않는것이 원칙이다.
Thymeleaf는 서버에서 HTML을 생성하게 하는 템플릿 엔진이다.
정적이던 HTML을 Thymeleaf를 사용하여 동적으로 만들어 줄 수 있다.
response.getWriter().write("<h1>Hello</h1>");
기존의 Servlet 방식에서는 Java 코드 내부에서 HTML을 작성해야 했지만,
<h1 th:text="${member.name}"></h1>
Thymeleaf를 사용하면 위와 같이 HTML 파일을 별도로 관리할 수 있다.
이를 활용하여 서버는 데이터를 HTML에 주입하고 완성된 페이지를 전달한다.
SSR(Server Side Rendering)
서버가 완성된 HTML을 생성하여 브라우저에 전달한다.
위에서 작성했던 Thymeleaf가 이에 해당한다.
CSR(Client Side Rendering)
초기에 최소한의 HTML과 JavaScript를 전달해놓고, 브라우저가 실제 화면 생성을 수행하는 방식이다.