- Today
- Yesterday
- Total
메이쁘
[WEB CS] JSP 처리 과정(= WAS를 통한 웹 페이지 출력 과정) 본문
안녕하세요.
이 포스팅을 보기 전에
웹 서버 및 WAS에 대한 포스팅을 보고 오시는 것도 추천드립니다!!
제가 작성했어요..ㅎㅎ
WAS는 동적 데이터를 처리하기 위해 사용하는 서버로, 웹 서버와 웹 컨테이너가 합쳐진 구조입니다.
클라이언트는 이 WAS에 웹 페이지를 요청하면, WAS가 이를 받아 정적인 데이터 처리는 웹 서버가 하고, 동적 데이터 처리는 웹 컨테이너가 해서 다시 클라이언트에게 웹 페이지를 전달하죠.
여기까지 작성한 내용이 위 링크 포스팅 입니다.
그럼,
정확히 웹 컨테이너는 무슨 일을 하는지,
JSP 파일이 어떻게 웹 페이지로 바뀌는 것인지
그 과정과 원리를 파악할 시간입니다.
JSP 처리
단순히 WAS 에서 JSP 확장자 파일을 바로 웹 페이지로 출력할 수 있는 것이 아닙니다.
웹 페이지로 출력하기 위해서는 HTML로 이루어진 파일이 있어야 합니다.
그럼, JSP는 HTML 형식 뿐 아니라 Java 코드까지 사용할 수 있는데, Java 코드를 어떻게 HTML 형식으로 변환해서
웹 페이지로 출력할까요?
이에 대한 답변은 아래 그림과 같습니다.
정리하자면,
1. WAS에서 JSP 관련해서 서블릿 클래스가 존재하는지 여부를 확인합니다.
2 - 1. 존재하지 않으면, 1) ~ 3) 과정을 수행하여 해당 JSP의 서블릿 클래스를 확보합니다.
2 - 2. 존재하면, 바로 서블릿 클래스를 가져와서 실행하고, 처리 결과를 응답받습니다.
??
이해가 잘 안되고, 궁금한 것들이 스멀스멀 올라옵니다.
하나씩 짚어봅시다.
Q. 그래서 JSP는 어떻게 웹 페이지로 출력하죠?
A. .jsp -> .java -> .class 로 변환 및 컴파일 후 웹 컨테이너에서 메모리 적재, 실행.
그 결과를 HTML로 웹 서버에 전달합니다.
Q. 그럼 .class 는 먼가요?
A. 말이 길어지는데, 요점만 말하면 JVM(자바 가상 머신)이 읽을 수 있는 자바 언어로 컴파일된 파일입니다. 이 파일이 메모리에 적재되면 JVM이 읽고 처리할 수 있죠. DB에서 데이터를 가져오거나 비즈니스 로직을 처리하여 그 결과를 웹 서버에 전달합니다.
*** JAVA 뿐 아니라 대부분의 언어를 class로 컴파일하는 과정이 존재합니다. 이에 대해서는 다른 포스팅에서 다뤄보겠습니다.
Q. 좋아. 그렇다고 칩시다. 그럼 서블릿이 도대체 뭐죠?
A. Servlet : Java 코드 안에 HTML 태그가 삽입된 파일로 웹을 만들기 위한 기술
JSP의 JAVA 코드를 처리할 때 사용됩니다.
직접 서블릿 클래스 파일을 만들 수도 있습니다. 하지만, 서블릿을 보완하기 위해 나온 것이 JSP이기 때문인 것과, WAS를 사용하면 알아서 처리해주기 때문에 굳이 서블릿을 만들지 않습니다.
대략 코드가 이렇게 생겼습니다.
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=euc-kr");
PrintWriter out=response.getWriter();
out.println("<html>"+"<body>"+"<h1>서블릿 예제. </h1> "+"</body>"+"</html>");
}
이 서블릿에 대해 좀 더 자세히 얘기하자면,
서블릿은 Java 언어로 HTML을 표현하기 위해 JSP보다 먼저 만들어졌습니다.
서블릿 자바 파일을 .class로 컴파일한 후 만들어진 클래스 파일을 통해 HTML 결과를 얻을 수 있습니다.
하지만, 여기서 서블릿은 한 가지 큰 치명적인 단점이 있었습니다.
바로, 코드 한 줄만 변경되어도 다시 처음부터 컴파일을 한 후에 얻은 클래스 파일을 알맞은 폴더 위치에 복사하는 작업을 하게 됩니다.
만약, alert 또는 div 내 text 한 문장만 바뀌어도 직접 서블릿을 컴파일한 후 복사하는 작업을 일일히 진행해야 한다면..
엄청나게 번거롭겠죠?
그래서 이러한 단점을 보완하고자(+ MVC 패턴으로 웹을 만들기 위해) JSP를 만들어냈습니다.
JSP는 HTML과 JAVA가 같이 존재할 수 있는데,
JAVA 코드 부분은 Controller, HTML 부분은 View 로 나눌 수 있습니다.
*** 사실, Web Container는 JSP Container(= Servlet Container) 인데, 흔히 Web Container 라고 부릅니다.
그럼 정리해봅시다.
정리
- 웹 브라우저(클라이언트) 가 jsp를 요청할 경우
*** 위에서는 웹 페이지를 요청한다고 했는데, 같은 의미입니다. 주소에는 .jsp가 없지만, 실제 실행 파일은 jsp 인 경우가 대부분입니다.
1. WAS 내 웹 서버가 jsp 임을 확인하고 웹 컨테이너로 전달한다.
2. 웹 컨테이너에서는 서블릿 클래스에 이 jsp와 맞는 클래스 파일이 존재하는지 확인한다.
3. 없으면 jsp -> java(servlet) -> class 로 컴파일 진행한다.
4. 서블릿 컨테이너, JSP 컨테이너에서 해당 class 파일을 실행하여 비즈니스 로직, DB 연동 처리 후 나온 HTML 결과를 웹 서버에 전달한다.
5. 웹 서버에서는 전달을 확인하고 클라이언트에 뿌린다.
- Web Container(JSP Container = Servlet Container) 를 통해 jsp파일을 컴파일하는 과정에서 java코드를 실행하여 HTML 결과를 만듭니다.
이상입니다.
감사합니다!