메이쁘

[WEB CS] JSP 처리 과정(= WAS를 통한 웹 페이지 출력 과정) 본문

Technology/Web - Spring

[WEB CS] JSP 처리 과정(= WAS를 통한 웹 페이지 출력 과정)

메이쁘 2020. 7. 18. 20:16

안녕하세요.

 

이 포스팅을 보기 전에

 

웹 서버 및 WAS에 대한 포스팅을 보고 오시는 것도 추천드립니다!!

 

[WEB CS] 웹 서버와 WAS(Web Application Server) 의 의미, 차이점, 웹 동작 원리를 알아보자!

안녕하세요. 최근에 회사에서 WEB 서버 개발 파트를 맡게 되서 기초 cs지식부터 다시 공부하고 있습니다. 이에 따라, 공부한 것을 정리하는 겸 해서 포스팅을 하게 되었습니다!! 웹 하면 말이 나오

maivve.tistory.com

 

제가 작성했어요..ㅎㅎ

 

 

 

WAS는 동적 데이터를 처리하기 위해 사용하는 서버로, 웹 서버와 웹 컨테이너가 합쳐진 구조입니다.

 

클라이언트는 이 WAS에 웹 페이지를 요청하면, WAS가 이를 받아 정적인 데이터 처리는 웹 서버가 하고, 동적 데이터 처리는 웹 컨테이너가 해서 다시 클라이언트에게 웹 페이지를 전달하죠.

 

 

여기까지 작성한 내용이 위 링크 포스팅 입니다.

 

 

그럼,

 

정확히 웹 컨테이너는 무슨 일을 하는지, 

 

JSP 파일이 어떻게 웹 페이지로 바뀌는 것인지

 

그 과정과 원리를 파악할 시간입니다.

 

 

 

 

 

JSP 처리


단순히 WAS 에서 JSP 확장자 파일을 바로 웹 페이지로 출력할 수 있는 것이 아닙니다.

 

웹 페이지로 출력하기 위해서는 HTML로 이루어진 파일이 있어야 합니다.

 

 

그럼, JSP는 HTML 형식 뿐 아니라 Java 코드까지 사용할 수 있는데, Java 코드를 어떻게 HTML 형식으로 변환해서 

 

웹 페이지로 출력할까요?

 

 

 

이에 대한 답변은 아래 그림과 같습니다.

 

 

JSP 처리 과정

 

 

 

정리하자면,

 

 

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 결과를 만듭니다. 

 

 

 

 

이상입니다.

 

감사합니다!

Comments