본문 바로가기
교재 실습/자바 웹 개발 워크북

35. 뷰 컴포넌트와 JSP (1)

by Jint 2022. 2. 1.

MVC 아키텍처에서 뷰 컴포넌트를 만들 때 보통 JSP를 사용한다. 뷰 컴포넌트의 역할은 웹 브라우저가 출력할 화면을 만드는 일이다. JSP가 어떤 기술이기에 뷰 컴포넌트를 만들 때 사용하는지 알아본다.

 

이전 예제에서는 웹 브라우저에 보낼 화면을 만들고자 출력 메서드를 호출하였다.

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html><head><title>회원 등록</title></head>");
		out.println("<body><h1>회원 등록</h1>");
		out.println("<form action='add' method='post'>");
		out.println("이름: <input type='text' name='name'><br>");
		out.println("이메일: <input type='text' name='email'><br>");
		out.println("암호: <input type='password' name='password'><br>");
		out.println("<input type='submit' value='추가'>");
		out.println("<input type='reset' value='취소'>");
		out.println("</form>");
		out.println("</body></html>");
	}

이렇게 HTML을 출력하려고 out.println()을 호출한다. 출력하는 문자열에 태그 속성이 포함되어 있는데 인용부호('')로 인해 코드가 더 복잡해 보인다. 예제는 화면이 단순해서 출력문이 간단한 편이지만 실무에서는 훨씬 더 복잡하고 많은 내용을 출력하게 되므로 더욱 복잡해질 것이다. 이런 부분을 해소하고자 나온 기술이 JSP이다.

 

JSP 기술의 가장 중요한 목적은 컨텐츠를 출력하는 코딩을 단순화 하는 것이다.

그림 1 (JSP의 실행)

그림 1의 과정을 통해 JSP 구동 원리를 살펴본다.

1. 개발자는 서버에 JSP 파일을 작성한다. 클라이언트가 JSP를 실행해 달라고 요청하면, 서블릿 컨테이너는 JSP 파일에 대응하는 자바 서블릿을 찾아서 실행한다.

2. 만약 JSP에 대응하는 서블릿이 없거나 JSP 파일이 변경되었다면, JSP 엔진을 통해 JSP 파일을 해석하여 서블릿 자바 소스를 생성한다.

3. 서블릿 자바 소스는 자바 컴파일러를 통해 서블릿 클래스 파일로 컴파일된다. JSP 파일을 바꿀 때마다 이 과정을 반복한다.

4. JSP로부터 생성된 서블릿은 서블릿 구동 방식에 따라 실행된다. 즉 서블릿의 service()가 호출되고, 출력 메서드를 통해 서블릿이 생성한 HTML 화면을 웹 브라우저로 보낸다.

JSP를 사용하면 개발자는 자바로 출력문을 작성할 필요가 없다. JSP 엔진이 자바 출력문을 만들기 때문에 웹 브라우저로 출력할 HTML을 작성하기가 매우 쉬워졌다. 이런 이유로 뷰 컴포넌트를 만들 때 JSP를 사용한다. 즉 JSP는 서블릿 자바 파일을 만들기 위한 템플릿으로 사용된다.

 

간단한 JSP 파일을 만들고 실제 자바 파일로 변환되는 과정을 확인해본다. web05 프로젝트의 webapp 폴더에 Hello.jsp 파일을 생성한다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html >
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<p>안녕하세요</p>
</body>
</html>

이후 web05 웹 프로젝트를 톰캣 서버에 배치한 뒤 서버를 시작한다. 웹 브라우저 주소창에 http://localhost:9999/web05/Hello.jsp 를 입력하여 JSP 실행을 요청한다(그림 2).

그림 2 (JSP 실행 화면)

JSP를 실행할 때 비로소 JSP 엔진은 서블릿을 만든다. 따라서 서블릿 소스를 확인하고 싶다면 먼저 JSP를 실행한다.

 

Hello.jsp에 대하여 JSP 엔진이 만든 자바 서블릿 파일을 확인하기 위해 실습 프로젝트가 있는 워크스페이스 폴더 내부에 있는 아래의 경로로 간다.

C:\javaide\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\web05\org\apache\jsp

tmp0이 없다면 tmp1, tmp2를 확인하면 되는데 이클립스에 설정된 톰캣 서버의 인스턴스를 지우고 새로 생성하거나, 같은 버전의 톰캣 서버 인스턴스를 여러 개 만들 경우 tmp1, tmp2 등의 이름으로 폴더가 만들어진다. 이클립스는 톰캣 서버의 인스턴스마다 tmp0과 같은 임시 폴더를 만들어 웹 애플리케이션 배치를 관리한다.

tmp0의 work 폴더에는 JSP 파일로부터 자동 생성된 서블릿 소스 파일과 컴파일된 클래스 파일이 들어있다. work의 하위 폴더로 계속 내려가다 보면 Hello.jsp에 대응하는 서블릿 파일을 만날 수 있다.

그림 3 (JSP 파일로부터 자동 생성된 서블릿 소스 파일과 클래스)

 

PHP나 파이썬(Python)은 인터프리터 방식으로 소스를 바로 읽어 실행하지만, JSP 파일은 그 자체로 실행되지 않고 자바 서블릿 클래스로 만들어진 다음 실행된다. 따라서 실행속도는 PHP나 파이썬과 같은 스크립트 기반 서버 애플리케이션보다 JSP가 더 빠르다.

 

★ 여기서 JSP가 직접 실행되는 것이 아닌 JSP로부터 만들어진 서블릿이 실행된다는 사실을 명심하자.

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr

'교재 실습 > 자바 웹 개발 워크북' 카테고리의 다른 글

37. JSP의 주요 구성 요소 (1)  (0) 2022.02.03
36. 뷰 컴포넌트와 JSP (2)  (0) 2022.02.02
34. MVC 이해하기  (0) 2022.01.31
33. 필터 사용하기 (2)  (0) 2022.01.30
32. 필터 사용하기 (1)  (0) 2022.01.29

댓글