260417_복습

정한결·2026년 4월 20일
post-thumbnail

JSP/Servlet 기반 MVC 모델 2

오늘의 학습은 Java 웹 개발의 역사와 현대적 프레임워크(Spring Boot 등)의 모태가 되는 MVC 모델 2 구조를 직접 구현해 보는 과정이었다.

1. 서블릿(Servlet) vs JSP: 누구를 어디에 쓸 것인가?

웹 페이지를 만들 때 Java 코드와 HTML은 떼려야 뗄 수 없는 관계이다. 하지만 각각 특화된 영역이 다르다.

구분ServletJSP (Java Server Pages)
특징Java 코드 안에 HTML 작성HTML 코드 안에 Java 작성
역할비즈니스 로직 처리 (Controller)화면 출력 (View)
장점로직 처리에 강함, 구조 분리 용이HTML 작성이 쉬워 화면 구성에 적합
단점PrintWriter 사용 → 가독성 매우 나쁨로직이 많아지면 스파게티 코드 발생

2. 모델 2 (MVC 패턴)의 도입

서블릿과 JSP의 장점만을 취하기 위해 역할을 분리한 것이 바로 모델 2 방식이다.

Controller (Servlet): 클라이언트의 요청을 받고, 필요한 데이터를 준비하여 JSP에 전달한다.
Model (Java Bean/Article): 실제 데이터와 비즈니스 로직을 담당합니다.
View (JSP): 전달받은 데이터를 화면에 예쁘게 뿌려주는 역할만 합니다.

3. 프레임워크의 핵심: DispatchServlet과 라우팅

모든 서블릿을 일일이 만드는 비효율을 줄이기 위해 DispatchServlet을 도입했다.

Front Controller 패턴: 모든 요청(URL)을 하나의 서블릿(DispatchServlet)이 먼저 받습니다.
라우팅: 들어온 URL 경로에 따라 적절한 로직을 실행하고 JSP 경로를 매칭해준다.

4. JSP 고도화: EL문법과 JSTL

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>

5. Rq 클래스와 파사드 패턴 (Facade)

HttpServletRequestHttpServletResponse 객체는 다루기가 매우 까다롭다.

  • 이를 Rq(Request) 클래스로 감싸서(Wrapping), 개발자가 rq.getIntParam("dan", 0)과 같이 직관적인 메서드로 데이터를 꺼낼 수 있게 만들었다.
  • 이는 복잡한 내부 로직을 감추고 단순한 인터페이스를 제공하는 파사드 패턴의 응용이다.

6. HTML 폼(Form): URL 생성기

학습 중 인상 깊었던 개념 중 하나는 "폼은 URL 생성기다"라는 점이다.

  • <form action="/jsp/gugudan" method="GET">
  • 사용자가 입력한 값들을 ?dan=9&limit=3과 같은 쿼리 스트링(Query String) 형태로 자동 변환하여 서버에 요청을 보낸다.

🚀 중요 정리

오늘의 핵심은 "분리"였다. 로직은 Java가, 화면은 JSP가, 데이터 전달은 객체가 담당하게 함으로써 유지보수가 쉬운 구조를 설계했다. 이 개념은 훗날 Spring MVC 구조를 이해하는 핵심 열쇠가 될 것이다.

0개의 댓글