오늘의 학습은 Java 웹 개발의 역사와 현대적 프레임워크(Spring Boot 등)의 모태가 되는 MVC 모델 2 구조를 직접 구현해 보는 과정이었다.
웹 페이지를 만들 때 Java 코드와 HTML은 떼려야 뗄 수 없는 관계이다. 하지만 각각 특화된 영역이 다르다.
| 구분 | Servlet | JSP (Java Server Pages) |
|---|---|---|
| 특징 | Java 코드 안에 HTML 작성 | HTML 코드 안에 Java 작성 |
| 역할 | 비즈니스 로직 처리 (Controller) | 화면 출력 (View) |
| 장점 | 로직 처리에 강함, 구조 분리 용이 | HTML 작성이 쉬워 화면 구성에 적합 |
| 단점 | PrintWriter 사용 → 가독성 매우 나쁨 | 로직이 많아지면 스파게티 코드 발생 |
서블릿과 JSP의 장점만을 취하기 위해 역할을 분리한 것이 바로 모델 2 방식이다.
Controller (Servlet): 클라이언트의 요청을 받고, 필요한 데이터를 준비하여 JSP에 전달한다.
Model (Java Bean/Article): 실제 데이터와 비즈니스 로직을 담당합니다.
View (JSP): 전달받은 데이터를 화면에 예쁘게 뿌려주는 역할만 합니다.
모든 서블릿을 일일이 만드는 비효율을 줄이기 위해 DispatchServlet을 도입했다.
Front Controller 패턴: 모든 요청(URL)을 하나의 서블릿(DispatchServlet)이 먼저 받습니다.
라우팅: 들어온 URL 경로에 따라 적절한 로직을 실행하고 JSP 경로를 매칭해준다.
JSP 내부에서 자바 코드(<% %>)를 최대한 걷어내기 위해 사용하는 기술이다.
✅ EL (Expression Language)변수명 구문을 사용하여 객체의 값에 아주 쉽게 접근한다.
request.getAttribute() 같은 복잡한 메서드 호출을 대신한다.
✅ JSTL (JSP Standard Tag Library)JSP에서 조건문(if), 반복문(foreach)을 HTML 태그처럼 사용할 수 있게 해준다.
스크립틀릿(<% %>)을 제거하여 JSP의 가독성을 극대화한다.
Java
<c:forEach var="article" items="${articles}">
<tr>
<td>${article.id}</td>
<td>${article.title}</td>
</tr>
</c:forEach>
HttpServletRequest와 HttpServletResponse 객체는 다루기가 매우 까다롭다.
학습 중 인상 깊었던 개념 중 하나는 "폼은 URL 생성기다"라는 점이다.
오늘의 핵심은 "분리"였다. 로직은 Java가, 화면은 JSP가, 데이터 전달은 객체가 담당하게 함으로써 유지보수가 쉬운 구조를 설계했다. 이 개념은 훗날 Spring MVC 구조를 이해하는 핵심 열쇠가 될 것이다.