본문 바로가기
FrameWork & Runtime/JSP&Servlet

[JSP] 웹 서버 vs WAS & 서블릿 생성-매핑

by jaeaemin 2022. 2. 21.

 

[1] 웹 서버 프로그램 

 

프론트앤드 개발단에서는 Get Request를 통해서 웹 서버에 요청한다. 

웹 서버는 만들어진 페이지가 아닌 동적으로 변경이 되는 페이지를 브라우저를 통해서 사용자에게 보여주게 된다.

 

즉 웹 서버에 동적인 문서를 요청한다면 코드를 실행하여 웹 브라우저에 전달해야하는데 

먼저 어떤 요청에 동적인 실행을 할 수 있는 Server App들[servlet]이 있어야하고 이를 실행시키는 환경 "웹 서버" , 그리고 이러한 Server App들을 찾아서 올바르게 실행시켜주는 "WAS"(web application Server) 가 필요하다.

 

 

[2] Web Server VS WAS [Web Application Server]

 

1. Static Pages 와 Dynamic Pages 

 

Static Pages Dynamic Pages
Web Server에서 파일 경로 이름을 받고, 경로와 일치하는 file contents를 반환한다.

- 항상 동일한 페이지를 반환함 ( image, html, css ... )
인자의 내용에 맞게 동적인 contents를 반환한다.
즉, 웹 서버에서 실행되는 프로그램을 통해 만들어진 결과물 
  ==> Servlet : WAS 위에서 돌아가는 java program

- 개발자는 servlet에 doGet()을 구현하여 반환한다

 

Servlet : 웹 서버 응용 프로그램 

클라이언트에서 웹 서버로 Get 요청을 보내주면 "자바 서버 어플리케이션"중에 알맞은 어플리케이션을 구동하게 된다.

서버 어플리케이션의 조각이라는 뜻으로 이해하면 편할 것 같다.

"클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램" 

(클라이언트의 HTTP 요청에 대해 특정 기능을 수행, HTML문서를 생성등의 응답을 하는 인터넷 서버 프로그램

 

 

 

 

2. Web Server와 WAS(Web Application Server]

 

 

 

      Web Server 란

개념
Web 서버가 설치되어 있는 컴퓨터 또는 브라우저를 통해 HTTP 요청을 받아 정적 컨텐츠를 제공하는 프로그램 
기능
HTTP 프로토콜을 기반으로 하여 클라이언트(웹 브라우저 또는 웹 크롤러)의 요청을 서비스한다.
(서비스1) 정적인 컨텐츠를 WAS를 거치지 않고 반환한다.
(서비스2) 동적인 컨텐츠 제공을 위해 요청을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달한다.
                     - 클라이언트(브라우저) == [요청] ==> WAS 
                     - WAS ==[요청에 대한 응답] ====> 클라이언트(브라우저)
(EX) Apache Server, Nginx, IIS ... 

 

 

     WAS(Web Application Server) 란

개념
DB조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server
웹 컨테이너(web container) 또는 서블릿 컨테이너(Servlet Container) 라고도 불린다.
   - Container란 Jsp, Servlet을 실행시킬 수 있는 SW
   - WAS는 Jsp, Servlet 구동 환경을 제공함
기능
(서비스1) 프로그램 실행 환경 & DB 접속 기능 제공
(서비스2) 여러개의 트랜잭션 관리 기능
(서비스3) 업무를 처리하는 비지니스 로직 수행
(EX) Tomcat, JBoss, Jeus ...
정리하면 WAS는 Web Server + Web Containter라고 할 수 있는데
Web Server의 기능을 구조적으로 분리하여 처리한다. 여기서 기능은 트랜잭션, 보안, 메시징, DB서버 등

 

 

 

 

[3] Web Server와 Was의 분리 목적

1. WebServer

클라이언트가 웹 서버에 정적 컨텐츠를 요청하면 WAS까지 가지않고 Web Server단에서 처리하여 서버 부담을 줄일 수 있음

 

2. Web Application Server

WAS를 통해서 요청에 맞는 데이터를 DB에서 가져와서 비지니스 로직에 맞춰 결과를 반환하므로 자원을 효율적으로 사용하는 것이 가능

 

3. Web Server 와 WAS의 분리 이점 

  • 기능을 분리하여 서버 부하를 방지한다.
    • 정적페이지는 Web Server , 동적 페이지는 WAS가 처리한다 ! 
  • 물리적으로 분리하여 보안 강화
  • 여러대의 WAS 연결 가능 
    • Load Balancing을 위해 Web Server를 사용
    • 특히 대용량 웹 어플리케이션의 경우 ( 여러 개의 서버 ) Web Server와 WAS를 분리해 무중단 장애 대응 가능
    • Web Server에서 오류 발생 WAS를 재시작하여 사용자들은 오류를 체감하지 못함 
  • 여러 웹 어플리케이션 서비스가 가능
  • 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성 확대

 

 

[4] Web Service Architecture 

- Clinet > web server> WAS > DB 구조

 

[1]Web Server는 웹 브라우저 클라이언트로부터 HTTP 요청을 받는다.
[2]Web Server는 클라이언트의 요청(Request)을 WAS에 보낸다.
[3]WAS는 관련된 Servlet을 메모리에 올린다.
[4]WAS는 web.xml을 참조하여 해당 Servlet에 대한 Thread를 생성한다. (Thread Pool 이용)
[5]HttpServletRequest와 HttpServletResponse 객체를 생성하여 Servlet에 전달한다.
     [5-1] Thread는 Servlet의 service() 메서드를 호출한다.
     [5-2] service() 메서드는 요청에 맞게 doGet() 또는 doPost() 메서드를 호출한다.
[6] protected doGet(HttpServletRequest request, HttpServletResponse response)
[7] doGet() 또는 doPost() 메서드는 인자에 맞게 생성된 적절한 동적 페이지를 Response 객체에 담아 WAS에 전달한다.
[8] WAS는 Response 객체를 HttpResponse 형태로 바꾸어 Web Server에 전달한다.
[9] 생성된 Thread를 종료하고, HttpServletRequest와 HttpServletResponse 객체를 제거한다.

 

+
(웹서버 구조 종류)

Client -> Web Server -> DB
Client -> WAS -> DB
Client -> Web Server -> WAS -> DB

 

 

 

 

 Servlet 생성

 

import javax.servlet.*;
import javax.servlet.http.*
import java.io.*;

public class first extends HttpServlet
{
	public void service(HttpServletRequest request,
    		            HttpServletResponse response) 
                              throws IOEXception, ServletException {
		System.out.println("hello Servlet");
    }
}



만들어진 서블릿 클래스들은 Load되서 사용하게 되는데

위의 코드에서는 HttpServlet이라는 인터페이스를 상속받아서 제한사항에 맡게 구현하고 있고,

이는 HttpServlet을 상속받은 "first"서블릿이라고 부를 수 있다.

 

먼저 이러한 자바파일을 실행시키면 class파일이 생성되게 된다.

이렇게 생성된 class 파일들은 " WEB-INF / classes / [클래스 파일]  " 이러한 위치에 지정해야한다.

 

그렇다면 http://localhost:8080/web-inf/classes/Nana.class 를 웹 브라우저로 열면 다음의 클래스 파일이 실행될까?

답은 아니다.

WEB-INF 파일의 접근은 클라이언트가 아닌 서버만이 할 수 있다. 

 

WEB-INF의 내용은 웹서버 , WAS 만이 알고 있다.

즉 클라이언트에서 URL형식으로 웹서버+WAS 에서 XML파일을 들여다보고 URL과 매핑된 Servlet코드를 찾아서 실행한다.

그 후 Servlet코드의 실행결과를 클라이언트 애플리케이션에게 전달한다. (위의 웹 서비스 구조 참고 ) 

 

XML 매핑의 예시

클라이언트 : http://localhost:8080/hello
서버 : hello라는 Url이 들어왔군 !  [WAS :그럼 XML파일을 열어서 해당 패턴에 일치하는 Class를 찾고 반환하자  ]
                         XML파일
<servlet>
        <servlet-name> na </servlet-name>
        <servlet-class>Nana</servlet-class>
</servlet>

<servlet-mapping>
        <servlet-name>na</servlet-name>
        <url-pattern>/hello</url-pattern>
</servlet-mapping>

==> /hello라는 url패턴은 na의 서블렛에 매핑되 있고, na 서블릿은 Nana 서블릿 클래스를 요청한다.

 

반응형