본문 바로가기
Programming/DevOps, Tools

웹 (WEB), 웹어플리케이션, WAS, 웹 컨테이너...

by kghworks 2022. 9. 23.

 

웹, 웹 애플리케이션, 톰캣, WAS, 웹 컨테이너, 서블릿 컨테이너... 

 

 

 웹 개발을 하다보면 위 단어들이 아주 여기저기 날아다니는데 그 개념이 명확하게 정리되어있지 않습니다. 심지어 웹 개발자들 조차 실무에서 위 단어들을 혼용해서 맘껏 사용합니다. 명확한 정의를 알고 용어를 혼동하지 않고 소통할 때 비로소 일도 효율이 잘된 것 같습니다. 이번 포스팅에서 간단하게 정리합니다. 웹 개발자라면 구분해야겠지요?

 

목차

  • 웹 (web)
  • 웹 어플리케이션 (web application)
  • CGI (Common Gateway Interface), WAS (Web Application Server)
  • Web Server와 WAS
  • Servlet, JSP, Web Container
  • 참조

 

웹 (web)

 

 팀 버너스 리 (Sir Tim Berners-Lee, 영국의 컴퓨터 과학자)가 제안한 인터넷 기반의 정보 공유 서비스 (정보 공유 공간)입니다. 서비스입니다. World Wide Web (www, W3)이라고도 합니다. 

 

www.naver.com  

www.instagram.com

...

 

우리가 접속하는 수많은 사이트들 앞에  'www'가 붙네요. 모두 웹 서비스(웹 사이트)입니다. 

 

 인터넷에 분산된 정보를 통일된 방법으로 찾아볼 수 있도록 하는것이 웹의 목적입니다. 어떻게 정보들을  연결할까요?

 그것이 웹 문서입니다. 웹 문서는 하이퍼 텍스트로 작성됩니다.

 

하이퍼 텍스트 

 웹 공간에서 존재하는 문서의 형태로 이 문서에는 텍스트, 이미지, 동영상 등이 포함됩니다. 하이퍼 텍스트는 HTML로 표현되어 HTTP 프로토콜을 통해 서로 전송(공유)합니다. 문서에서는 하이퍼링크를 통해 다른 하이퍼 텍스트와 연결할 수 있습니다. (link 태그) 사용자는 웹 브라우저 (클라이언트, 크롬, 사파리 등)를 이용해서 하이퍼 텍스트를 엽니다.

 

정적 웹 문서 (static)

  • 문서 내용이 정적임 (요청마다 동일한 결과를 받음)
  • 클라이언트가 서버에게 웹문서를 요청 -> 서버가 웹 문서를 전달

로그인 폼

위 페이지는 요청할때마다 같은 html 태그를 결과로 뱉을 것입니다. 정적인 (static) 문서입니다. 

...

<form action="/login.do">

  <input type="text" id="id_val" name="user_id" >
  <label for="id_val">ID</label><br>
  <input type="text" id="pw_val" name="user_pw" >
  <label for="pw_val">PASSWORD</label><br>
  
  <input type="button" value="LOGIN">
  
</form>

...

 

동적 웹 문서 (dynamic)

    • 결과를 동적으로 만들어 줌 
    • 동적이란 클라이언트 혹은 서버가 처리함에 따라 결과 (html 태그)가 바뀌는 걸 의미
    • 대표적인 동적 웹문서 JSP

 

실시간으로 시각을 표시해주는 페이지

 

위 페이지가 있다면 동적으로 현재 시각을 1초마다 바꿔주어야 합니다. JSP로 구현하면 아래와 같이 웹문서가 작성됩니다.

 

<%@ page Language = "java" contentType = "text/html;charset=euc-kr"%>
<html>
	<head>
    
    ...
    
    <body>
    
    지금 시각 : <% out.print (new java.util.Date());%>
    
    ....

 

여기까지 정리

 웹이라는 공간에서 하이퍼텍스트 양식으로 웹 문서를 만들어 HTTP 프로토콜을 사용해서 서로 정보를 공유한다. 웹문서는 정적일 수 있고, 동적일 수 있다. 


웹 어플리케이션 (web application)

 

 웹 환경에서 실행되는 응용 프로그램 (애플리케이션, 웹 서비스)입니다. 

 

웹 어플리케이션의 구성 요소 

  • 웹 클라이언트 (브라우저, 크롬 등) : 웹 서버에 요청 (request)을 보내고 응답 (response)을 출력
  • 웹 서버 (아파치 등) : 클라이언트의 요청을 처리하는 프로세스 관리. 클라이언트에 응답
  • 웹 애플리케이션 서버 (웹 컨테이너, 톰캣 등) : 웹 애플리케이션 실행 환경. 동적인 프로그래밍 (jsp 등)을 실행하고, 결과를 웹 서버에 전달
  • 데이터베이스 (오라클 등) : 웹 서비스에서 필요한 데이터를 저장

 

데이터베이스에 대한 포스팅은 아래에서 자세히 다루었습니다.

2022.02.18 - [개발/데이터베이스 시스템] - 데이터베이스 (DB)의 이해

 

데이터베이스 (DB)의 이해

목표 데이터베이스의 개념을 이해한다. 데이터베이스의 특징을 이해한다. 데이터베이스의 구성요소를 파악한다. 목차 데이터베이스의 등장 배경과 역할 데이터베이스의 특징 데이터베이스의

kghworks.tistory.com

웹 서비스 실행 (런타임) 예제

 

웹 서비스는 클라이언트 측 실행 / 서버 측 실행으로 구분할 수 있습니다. 흔히 client side, server side라고 표현합니다. 

 

client side

  • 웹 문서에 동적 요소를 작성하여 클라이언트 (브라우저)에 응답 (response)
  • 웹 브라우저는 응답을 해석하여 페이지 작성
  • client side에서 작성한 문서는 보안에 취약
  • ex) 애플릿, javascript 등

 

server side

  • 서버에서 실행되고, 응답 문서를 동적으로 생성
  • 실행 결과를 브라우저에 전송
  • 서버에 부하
  • ex) jsp, asp, php

 

컴파일 방식과 비컴파일 방식으로도 구분됩니다.

 

컴파일 방식

  • 컴파일 과정을 통해 실행파일 (혹은 바이트 코드)가 만들어짐
  • ex) jsp, java servlet 등

 

비컴파일 방식

  • 요청마다 스크립트를 해석하여 실행
  • ex) javascript

CGI (Common Gateway Interface), WAS (Web Application Server)

 

 CGI란  동적 웹페이지를 만드는 방식으로  고급 프로그래밍 언어 (C, JAVA, python 등)로 만듭니다. 예를 들어 JAVA 언어를 실행시켜 JAVA로 HTML 코드를 작성하여 클라이언트에 전달합니다.  클라이언트의 요청이 있을 때마다 응용프로그램을 직접 호출하여 요청별 개별적으로 프로세스를 생성하기 때문에 웹서버에 부하를 줍니다.

 

 WAS는 웹 애플리케이션을 실행, 관리(=동적 웹 서비스를 담당)하는 별도의 서버 (프로그램)입니다. CGI 방식보다 개선되어 요청에 대한 프로세스를 매번 생성하지 않고, 요청 처리를 위해 하나의 JVM  (가상 머신) 안에서  스레드를 생성합니다. 웹페이지를 생성하는 작업 외에도 비즈니스 로직 수행, 외부 API 제공, 장애 조치 등의 일도 수행합니다. 

 


Web Server와 WAS

 

 

웹 서비스 실행 (런타임) 예제

 

웹 서버 (Web Server)

 클라이언트로부터 요청을 받고, 처리 결과를 전달하는 기능을 가집니다. 클라이언트와 통신할 떄에는 HTTP 프로토콜을 이용합니다. 따라서 웹서버를 HTTP 서버라고도 합니다.

 

  1. 클라이언트 (브라우저)로 부터 요청 (request)을 받음
  2. 요청을 처리 or WAS에 전달
  3. WAS로 부터 결과 전달 받음
  4. 결과를 클라이언트로 전달 (response)

2022.09.14 - [개발/WAS] - HTTP 프로토콜 초간단 요약

 

HTTP 프로토콜 초간단 요약

목차 HTTP 프로토콜이란? HTTP 요청 메시지 구조 HTTP 응답 메시지 구조 HTTP 프로토콜 (PROTOCOL)이란?  웹 서버 (아파치 등)가 클라이언트 (브라우저, 크롬 등)와 통시하는 규약입니다. TCP 프로토콜에

kghworks.tistory.com

 

웹서버 기능

  • 클라이언트가 요청한 웹문서를 찾아서 응답
  • 클라이언트 사용자 인증 처리
  • 정해진 errror code 응답
  • 프로그램에서 실행 (was 단) 요청이 있으면 처리 후 그 결과 전달

Servlet, JSP, Web Container

Servlet (서블릿)

웹 페이지를 동적으로 생성하기 위한 서버 측 (server side) Java 클래스입니다. 

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//HttpServlet 상속받아 servlet 구현
public class ServletSample01 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {

        response.setContentType("test/html; charset=EUC_KR"); //동적 웹페이지의 파일 형식, charset
        PrintWriter writer = response.getWriter(); //응답 객체로부터 writer 객체 생성
        writer.println("<html><body><head>" +
                "<title>" +
                "<h2> 웹 페이지 테스트 </h2>" +
                "</title>" +
                "</head></body></html>");
    }

}

 

 html 태그 쓰기가 매우 불편합니다. 웹문서의 정적인 부분 (단순 글씨 등)을 바꾸기 위해서도 java 클래스파일을 재컴파일하고, was를 재기동해야 합니다. (서버에 컴파일한. class파일을 다시 탑재) 위에서 말한 server side의 단점이죠. 그래서 JSP 가 등장합니다.

 

JSP (JavaServer Pages)

<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="EUC-KR" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<h1>회원 게시판</h1>

<c:if test="${sessionScope.user_id == null}">
    <script>
        alert("로그인 후 이용하세요!");
    </script>
</c:if>

<title>회원 게시판</title>

 JSP도 서블릿입니다. 그러나 기존에 서블릿보다 더 편한 스크립트 형식의 언어로 작성됩니다. WAS가 jsp파일을 요청 시에 해당 JSP 요청이 최초라면 자동으로 번역, 컴파일하여 서블릿으로 만든 다음 웹서비스에 제공합니다. 그 후 런타임 시 해당 JSP 파일을 컴파일하지 않고, 기존에 컴파일한 클래스를 재사용합니다.

 

 

만일 JSP 파일이 변경된다면?

 JSP 파일의 변경 시간과 컴파일 시간을 비교하여 JSP파일 변경이 탐지되면 WAS가 재컴파일하여 새로운 JSP파일을 반영할 수 있도록 합니다.

 

Web Container 

 jsp를 컴파일하는 녀석이 WAS라고 했는데, 정확히는 WAS의 Web Container (웹 컨테이너, Servlet Container)입니다. 웹 컨테이너는  WAS의 구성요소입니다. 

 

  • 클라이언트의 Servlet 요청을 실행
  • Servlet의 생명주기를 관리
  • JSP를 Servlet으로 변환 (Servlet 생성)
  • Servlet 로드, 초기화 ( init() )
  • Servlet 종료, 메모리 초기화 (destory(), GC)

 

 


참조

 

https://ko.wikipedia.org/wiki/%EC%84%9C%EB%B2%84_%EC%82%AC%EC%9D%B4%EB%93%9C

 

서버 사이드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전.

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8_%EC%82%AC%EC%9D%B4%EB%93%9C

 

클라이언트 사이드 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 클라이언트 사이드(client-side)란 네트워크의 한 방식인 클라이언트-서버 구조의 클라이언트 쪽에서 행해지는 처리를 말한다.[1][2][3][4] HTTP 통신에 있어서 브라우

ko.wikipedia.org

https://ko.wikipedia.org/wiki/%EA%B3%B5%EC%9A%A9_%EA%B2%8C%EC%9D%B4%ED%8A%B8%EC%9B%A8%EC%9D%B4_%EC%9D%B8%ED%84%B0%ED%8E%98%EC%9D%B4%EC%8A%A4

 

공용 게이트웨이 인터페이스 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 공용 게이트웨이 인터페이스(영어: Common Gateway Interface; CGI)는 웹 서버 상에서 사용자 프로그램을 동작시키기 위한 조합이다. 존재하는 많은 웹 서버 프로그램은

ko.wikipedia.org

 

댓글