@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
// 1) 응답의 타입을 알려줘야 브라우저가 올바르게 해석한다.
resp.setContentType("text/html; charset=UTF-8");
// 2) 응답 바디(HTML)를 직접 문자열로 만들어서 출력한다.
PrintWriter out = resp.getWriter();
out.println("<!doctype html>");
out.println("<html>");
out.println("<head><meta charset='UTF-8'><title>Hello</title></head>");
out.println("<body>");
// 동적 데이터 예시: 서버에서 만든 값을 HTML에 끼워 넣는다.
String name = req.getParameter("name");
if (name == null || name.isBlank()) name = "guest";
out.println("<h1>Hello, " + name + "</h1>");
out.println("</body>");
out.println("</html>");
}
}
서블릿은 request를 읽고 response를 만들어 보내는 기술이다.
그래서 “화면을 보여주는 기능”도 서블릿만으로 구현할 수 있다.
실제로는 response.getWriter()로 HTML을 출력하면 브라우저는 화면을 그린다.
위 예제처럼 서블릿이 HTML 문자열을 직접 찍어내도 동작 자체는 문제 없다.
그런데 여기서 바로 실전 문제가 발생한다.
서블릿만으로 화면을 만들 때 생기는 문제
1) HTML이 “문자열”로 흩어진다
서블릿 코드 안에서 <html>, <div>, <h1> 같은 태그가 전부 문자열이다.
조금만 화면이 커져도 out.println(...)이 끝없이 늘어난다.
즉 화면 구조가 커질수록 “자바 코드”와 “HTML 문자열”이 뒤섞여 읽기 어려워진다.
2) 동적 데이터를 섞는 순간 더 지옥이 된다
위 코드에서
out.println("<h1>Hello, " + name + "</h1>");
이런 식으로 문자열을 이어 붙이면서 동적 값을 출력하게 된다.
화면이 복잡해지면 이런 문자열 결합이 곳곳에 생기고
결국 화면 수정이 “자바 코드 수정”으로 바뀐다.
즉 “화면 개발”을 하려면 자바 문법까지 같이 만져야 하는 형태가 된다.
3) 유지보수와 협업이 매우 불리하다
서블릿만으로 화면을 만들면
- 화면을 바꾸려면 자바 코드를 수정해야 한다
- HTML/CSS 중심의 작업이 어렵다
- 디자이너/퍼블리셔와 역할 분리가 힘들다
즉 화면과 로직이 강하게 엉겨 버린다.
JSP는 “HTML 중심으로 화면을 만들기 위한 기술”이다
JSP(JavaServer Pages)는 목적이 명확하다.
화면(HTML)을 만드는 데 특화된 서버 사이드 기술이다
JSP는 HTML을 기본으로 작성하고,
필요한 순간에만 서버 데이터를 끼워 넣는 구조를 제공한다.
즉, 서블릿처럼 HTML을 “자바 문자열로 만들지 않아도” 된다.
JSP의 핵심 아이디어: HTML을 그대로 두고, 서버 값만 끼운다
서블릿 방식은 이런 느낌이었다.
- 자바 코드로 HTML 문자열을 만들어서 출력한다
JSP 방식은 이런 느낌이다.
- HTML을 거의 그대로 두고
- 필요한 값만 출력 표현으로 끼운다
이 차이 하나만으로도 코드의 가독성과 유지보수성이 크게 달라진다.
“JSP는 자바 코드가 아닌데 왜 실행되나?”
JSP 파일은 .jsp 확장자를 가지지만,
결국 실행될 때는 내부적으로 서블릿 코드로 변환되어 컴파일되고 실행된다.
즉 구조는 이렇게 이해하면 된다.
- 개발자는 JSP를 HTML 중심으로 작성한다
- 컨테이너(톰캣)는 JSP를 서블릿 코드로 변환한다
- 변환된 서블릿이 컴파일되어 실행된다
- 결과 HTML이 response로 브라우저에 전달된다
결론적으로 JSP는 “서블릿과 같은 목적을 가지지만, 화면 생성에 특화된 표현 방식”이다.
정리
- 서블릿만으로도 화면을 만들 수는 있다(Writer로 HTML 출력)
- 하지만 HTML이 문자열로 흩어지고, 동적 데이터 결합이 많아져 유지보수가 어렵다
- JSP는 HTML을 중심으로 화면을 만들고 필요한 값만 끼워 넣기 위해 등장했다
- JSP는 실행 시점에 서블릿으로 변환되어 컴파일/실행된다
'Web > Web Basics' 카테고리의 다른 글
| [서블릿과 JSP] 6. 서블릿이 만든 데이터를 JSP가 읽는 방식 (0) | 2026.03.29 |
|---|---|
| [서블릿과 JSP] 5. request.getParameter()를 JSP에서 쓰는 방법 (0) | 2026.03.29 |
| [서블릿과 JSP] 3. HttpServletRequest/HttpServletResponse (0) | 2026.03.29 |
| [서블릿과 JSP] 2. 서블릿 라이프사이클 (0) | 2026.03.29 |
| [서블릿과 JSP] 1. 서블릿이란? (0) | 2026.03.29 |