[서블릿과 JSP] 4. JSP는 왜 필요한가

2026. 3. 29. 16:00·Web/Web Basics
@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
'Web/Web Basics' 카테고리의 다른 글
  • [서블릿과 JSP] 6. 서블릿이 만든 데이터를 JSP가 읽는 방식
  • [서블릿과 JSP] 5. request.getParameter()를 JSP에서 쓰는 방법
  • [서블릿과 JSP] 3. HttpServletRequest/HttpServletResponse
  • [서블릿과 JSP] 2. 서블릿 라이프사이클
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    aws
    java
    개발서적
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
[서블릿과 JSP] 4. JSP는 왜 필요한가
상단으로

티스토리툴바