[Web]웹 서버(WS)와 웹 어플리케이션 서버(WAS)

Euiyeon Park·2024년 8월 26일

Web

목록 보기
11/13
post-thumbnail

🫧 웹 서버(Web Server, WS)

📍 웹 서버는 정적 웹 리소스를 반환한다.

웹 서버는 HTTP/HTTPS 프로토콜을 통해 클라이언트(웹 브라우저)로부터 요청을 받고,
미리 만들어진 웹 페이지를 단순히 요청에 따라 정적 컨텐츠를 제공하는 역할을 한다.

  • 정적 컨텐츠 : HTML, CSS, JavaScript, 이미지 파일 등 즉시 응답 가능한 컨텐츠

  • 대표적인 웹 서버 : Apache HTTP Server, Nginx

만약, 문서의 양이 많아짐에 따라 웹 서버의 용량도 많이 필요해진다면?
1,000명의 유저 정보 페이지가 필요하다면 웹 페이지 1,000개가 필요하다.
-사용자의 요청마다 다른 웹 페이지를 모두 개발해야 한다.

만약, 유저 정보 페이지의 템플릿은 동일하고 템플릿의 정보만 변경된다면?
웹 페이지 1개(유저 정보 템플릿)에 1,000명의 유저 정보를 데이터베이스에 저장한다.
반복되는 템플릿과 유저 정보를 분리해 동적 웹 리소스를 반환한다 - WAS 등장


🫧 웹 어플리케이션 서버(Web Application Server, WAS)

📍 웹 어플리케이션 서버는 정적+동적 웹 리소스를 반환한다.

웹 어플리케이션 서버는 웹 어플리케이션을 실행하고 클라이언트의 요청에 따라 동적 컨텐츠를 생성한다.
사용자의 요청에 따라 데이터베이스와 상호작용하고 비지니스 로직을 처리하며
그 결과로 웹 페이지를 클라이언트에게 제공한다.

  • 동적 컨텐츠 : 웹 페이지의 내용이 고정되어 있지 않고,
    사용자의 요청이나 데이터베이스 상태에 따라 실시간으로 생성되는 웹 컨텐츠

  • 대표적인 웹 어플리케이션 서버 : Apache Tomcat, Oracle WebLogic

📍동적 컨텐츠의 생성 주체는 어플리케이션이다.

방금 전까진 웹 어플리케이션 서버가 동적 컨텐츠를 생성한다며 ...?

동적 컨텐츠(동적 웹 페이지)는 웹 어플리케이션 서버와 웹 어플리케이션 간의 협력에 의해 생성된다.

웹 어플리케이션 서버

  • 웹 어플리케이션을 호스팅하고 실행하는 서버 소프트웨어
  • 웹 어플리케이션이 제대로 작동할 수 있는 환경 제공
  • 생성된 결과를 클라이언트에게 반환
  • 주로 웹 서버와의 통합을 통해 요청을 받아 처리

웹 어플리케이션

  • 실제로 비지니스 로직을 수행하고 사용자 인터페이스를 생성하는 코드와 기능을 포함하는 소프트웨어
  • 클라이언트의 요청에 따라 다양한 동적 컨텐츠(웹 페이지)를 생성하는 주체
  • 데이터베이스에서 데이터를 가져와 처리하고,
    서버 사이드 스크립트를 통해 HTML 페이지를 동적으로 생성하는 작업을 포함

서버 사이드 스크립트란,
웹 서버에서 실행되어 동적 웹 컨텐츠를 생성하는 프로그램 코드를 의미한다.
클라이언트가 웹 페이지를 요청하면 서버 사이드 스크립트가 서버에서 실행되고,
결과를 클라이언트에게 전달한다.

동적 웹 페이지의 장점

  1. 공간 효율
    수많은 페이지들을 웹 서버가 들고 있을 필요없이 매번 만들어서 반환한다.

  2. 실시간성
    요청이 들어온 순간의 데이터로 만들기 때문에 데이터 및 웹 페이지의 신선도가 높다.


🫧초기 웹 어플리케이션 서버

초기 웹 어플리케이션 서버(WAS)는 웹 서버와 어플리케이션을 CGI 를 통해 연결했다.

웹 서버가 요청을 받으면 어플리케이션에게 동적 웹 페이지 생성 작업을 위임한다.
이때 웹 서버가 요청을 받아 어플리케이션을 실행하고, 페이지 생성을 요청하기 위한 연결고리가 CGI다.

CGI(Common Gateway Interface)웹 서버와 어플리케이션을 연결하기위한 기술이다.

처음 CGI가 등장했을 때 어플리케이션은 Java, Python이 아닌 Shell, Bash같은 스크립트 언어였다.
유명한 서버 스크립트 언어는 PHP, Perl, Ruby가 있다.


🫧웹 서버에서 웹 어플리케이션 서버로의 변천사

CGIFCGI웹 서버와 서버 사이드 어플리케이션 간의 인터페이스를 정의하는 기술이다.
서버 사이드 스크립트를 실행하여 동적 웹 컨텐츠를 생성하는 방법을 제공한다.

📍CGI(Common Gateway Interface)

CGI웹 서버와 웹 어플리케이션간의 통신을 위한 표준 인터페이스로,
CGI프로그램은 웹 서버의 요청을 받아 실행되며, 실행 결과를 웹 서버를 통해 클라이언트에게 반환한다.

CGI 동작 방식

  • 클라이언트가 웹 서버에 요청을 보내면 웹 서버는 요청을 CGI로 전달한다.
  • CGI는 요청을 처리하고 동적으로 생성된 HTML을 웹 서버로 반환한다.
  • 웹 서버는 HTML을 클라이언트(브라우저)에게 전송한다.

CGI 특징

  • CGI는 클라이언트의 매 요청마다 웹 서버가 새로운 프로세스를 생성한다.

    • 매번 요청에 따라 프로세스(어플리케이션)이 실행되고,
      웹 페이지를 만들고 반환 후 종료하는 과정을 반복한다. - 비상주 프로세스
    • 1요청 : 1비상주 프로세스의 관계
    • 무거운 어플리케이션의 실행과 종료의 반복으로 비효율성의 문제(성능저하, 자원소모)
  • CGIStateless(비상태성)하다.

    • 매 요청마다 새로운 프로세스가 생성-실행(반환)-종료를 반복하므로 요청 간에 정보가 없다.
    • 웹 서버는 이전의 요청이나 상태를 기억하지 않는다.
    • 각 실행 프로세스가 독립적이다. - 보안성을 가진다.

📍FCGI(FastCGI)

FCGI는 CGI의 성능 문제를 해결하기 위해 개발됐으며, CGI의 기본 아이디어를 유지며 성능을 개선한다.
FCGI지속적인 프로세스를 사용하여 요청을 처리하며, 성능을 향상시키고 자원을 절약한다.

FCGI 동작 방식

  • FCGI는 웹 서버와 별도로 지속적으로 실행되는 프로세스다.
    요청이 들어오면 웹 서버는 FCGI 프로세스와 연결하여 요청을 전달한다.

  • FCGI프로세스는 요청을 처리한 후 결과를 웹 서버로 반환한다.

  • FCGI는 요청 처리가 완료된 후에도 프로세스를 유지하므로,
    동일한 프로세스가 여러 요청을 처리한다.

FCGI 특징

  • 매번 요청에 따라 이미 열려있던 프로세스가 웹 페이지를 만들고 반환하고,
    프로세스는 계속 살아있는다. - 상주 프로세스

    • 상주하고 있는 프로세스가 요청을 처리하고 반환
    • 1요청 : 1상주 프로세스의 관계
    • 여러 요청을 하나의 프로세스에서 처리한다. - 자원 효율성
    • 상주 프로세스를 사용하므로 매 요청마다 새로운 프로세스를 생성할 필요가 없다.- 성능 향상
  • FCGIStateful(상태성)하다.

    • 아무리 많은 요청이 와도 기존 프로세스가 실행과 반환하므로 요청 간 정보를 공유한다.
    • 매 번 실행된 프로세스가 같으므로 같은 정보를 공유한다. - 보안성이 낮다

🫧 웹 어플리케이션 서버(WAS)

웹 애플리케이션 서버(WAS)는 사용자 요청을 처리하는 데 적절한 어플리케이션을 호출하고, 그 애플리케이션 내에서 서버 사이드 스크립트를 실행하여,
웹 서버(WS)가 단독으로 처리할 수 없는 데이터베이스 조회나 다양한 로직 처리 필요한
동적 콘텐츠를 생성
한다. 이 동적 콘텐츠는 사용자의 요청에 따라 실시간으로 생성되며,
그 결과를 클라이언트(브라우저)로 전달한다.

📍 WAS의 구성요소와 특징

WAS는 위에서 살펴본 초기 WAS에서 CGI 비상주 프로세스의 Stateless한 장점과
FCGI 상주 프로세스의 Stateful한 장점을 Thread를 통해 얻어냈다.

  • 하나의 요청이 들어오면, 하나의 스레드가 해당 요청에 대해 할당된다.

    • 스레드는 스레드 풀(Thread Pool)에 개수를 지정해 미리 만들어놓고
      대기시킨다.
    • 스레드는 자기가 맡은 작업을 수행하고 완료되면 스레드 풀에 반환된다.
  • 1요청 : 1스레드의 관계를 가진다.

  • 1요청에 대해 할당되는 1자바 스레드서블릿(Servelt)이라 불린다.

  • 서블릿 컨테이너(Servelt Container)는 요청이 오면 스레드를 할당하고,
    완료 뒤 회수하는 주체로 서블릿의 생명주기를 관리한다.


🫧 WAS의 템플릿 엔진과 MVC

📍 웹 어플리케이션 서버 내 템플릿 엔진

템플릿 엔진(Template Engine)은 웹 어플리케이션 개발에서
동적 웹 페이지를 생성하기 위해 사용되는 도구 또는 라이브러리다.
HTML파일에 템플릿 문법을 사용해 동적으로 내용을 삽입하거나 변경할 수 있도록 한다.

만약, 유저 정보 페이지의 템플릿은 동일하고 템플릿의 정보만 변경된다면?
웹 페이지 1개(유저 정보 템플릿)에 1,000명의 유저 정보를 데이터베이스에 저장한다.
반복되는 템플릿과 유저 정보를 분리해 동적 웹 리소스를 반환한다

  • 반복되는 템플릿 - ViewTemplate
  • 유저 정보(데이터) - Model
  • 유저 정보 페이지(동적 웹 페이지) - View(HTML)

📍 템플릿 엔진 동작원리로 이해하는 WAS의 MVC

WAS에서 많이 사용되는 아키텍처 중 하나가 MVC패턴이다.
MVC패턴은 Model-View-Controller의 약자로, 어플리케이션을 세 가지 주요 구성요소로 나누어 관리하는 디자인 패턴이다.

데이터베이스에서 Model(데이터)를 조회하여 그걸 기반으로 View(웹 페이지)를 만들어 Controller가 반환한다.

Model

  • 데이터에 대한 조회 및 조작을 담당한다.
  • 데이터와 어플리케이션이 무엇을 할 것인지 정의하고
    내부 비지니스 로직을 처리하기 위한 역할을 맡는다.
  • Controller가 호출하면 데이터베이스와 연동해 데이터를 조회/조작한다.

View

Model을 기반으로 만들어진 웹 페이지
User의 요청을 받아 Controller는 응답으로 View를 반환한다.

  • User가 보는 것 : 웹 페이지(View) - Controller가 반환해준 것
  • User가 하는 것 : 자바스크립트 인터랙션 - Controller 호출
    • Model을 바꿔달라는 요청을 View의 자바스크립트를 통해 Controller 호출

Controller

사용자 요청을 받아 처리하고, 적절한 모델(Model)을 호출해 데이터를 가져와
그 데이터를 뷰(View)에 전달하는 역할을 한다.

  • 요청을 받고, 그에 따른 연산(로직)을 실행시키고, 그 결과를 반환한다.
  • 어떤 요청이 오면 어떤 행위를 해야할 지 정의해야한다.
  • 요청을 받고, 결과를 반환하기에 URI가 정의되어 있다.(엔드포인트)

📍 MVC 패턴의 동작 흐름

1. 사용자의 요청(Request)
사용자가 브라우저에서 특정 URL을 입력하거나 버튼을 클릭해 요청을 보낸다.
이 요청은 웹 서버를 WAS로 전달된다.

2. Controller의 요청 처리

  • WAS는 이 요청을 어플리케이션 내의 Controller로 전달한다.
  • Controller는 요청을 분석해 사용자가 원하는 작업을 결정한다
  • 요청에 필요한 데이터를 가져오기 위해 Model과 상호작용한다.
    • 데이터베이스에서 사용자 목록을 조회하는 등의 작업

3. Model의 데이터 처리

  • Model은 데이터베이스와 상호작용해 필요한 데이터를 가져오거나 수정한다.
  • 가져온 데이터는 다시 Controller로 전달되고,
    이 데이터는 View에서 화면을 구성하는데 사용된다.

4. View의 생성과 템플릿 엔진의 역할

  • Controller는 Model에서 받은 데이털르 사용해 View를 생성한다.
  • 템플릿 엔진은 HTML 템플릿 파일(ViewTemplate)을 기반으로 Controller에서 전달된 데이터를 삽입해 사용자에게 보여줄 동적 웹 페이지를 생성한다.

5. 사용자에게 응답(Response)

  • 템플릿 엔진이 최종적으로 생성한 페이지는 Controller를 통해 WAS에 전달되고, 이 페이지는 웹 서버를 통해 클라이언트(브라우저)에게 응답된다.
  • 사용자는 브라우저에서 최종적으로 렌더링된 웹 페이지를 보게 된다.

ref

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

profile
"개발자는 해결사이자 발견자이다✨" - Michael C. Feathers

0개의 댓글