거북이의 IT 공부

웹 서비스의 구조 - 웹 서버와 WAS(웹 애플리케이션 서버)를 중심으로 본문

Web/Web

웹 서비스의 구조 - 웹 서버와 WAS(웹 애플리케이션 서버)를 중심으로

버니빈 2020. 8. 7. 17:05

웹의 작동 원리

http://tcpschool.com/webbasic/works

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

웹 서버, WAS, 그리고 WSGI

웹 서버

웹 브라우저(클라이언트)에서 HTTP요청을 받고 HTML 문서와 같은 웹 페이지(그림, 스타일시트, 자바스크립트)를 정적으로 처리해서 반환하는 소프트웨어 + 하드웨어이다.

 

웹 서버는 정적이다. 

예) Apache, Nginx, IIS 등등

 

CGI (Common Gateway Interface)

  • 정적으로 동작하는 웹서버를 동적으로 기능하게 만들기 위함.

  • 웹서버에 들어온 Request를 외부 프로그램과 연결하여 해당 프로그램이 그 요청(동적인 파일)을 처리하게 연결해주는 역할.

  • 들어온 요청을 외부 프로그램과 연결해주는 역할만 할 뿐, 웹 서버가 외부 프로그램을 직접 실행함.

  • WAS와의 차이는 연결되는 외부 프로그램을 서버가 직접 실행하는지, WAS가 대신 실행하는지 차이.

  • 따라서 WAS에 비해 다수의 요청을 처리하기에 불리하다.

웹 애플리케이션 서버 (WAS)

간단하게 말해 웹 서버 위에 서버 애플리케이션을 얹은 것. 동적 리소스 처리를 위해 사용.

 

- Django인 경우를 예로 들자 -

웹 서버(ex. Nginx)와 웹 애플리케이션(ex. Django)간의 연결을 중계하는 것이 Django에 내장되어 있는  WSGI이다. (Nginx에서 받은 요청을 Django에서 처리하기 위한 중계인 역할을 해준다.)

Nginx는 Python을 모르기 때문에 uWSGI는 HTTP 요청을 python으로, Django로 부터 받은 응답을 Nginx가 알 수 있도록 변환해준다.

 

좀더 심화적으로 살펴보면 WAS = 웹서버 + CGI. 일반적으로는 웹서버와 WAS를 굳이 구분할 필요가 없다.

웹서버 따로 없이도 프로젝트를 할 수 있는 이유는 WAS도 정적인 데이터를 처리할 수 있다. 둘을 구분하는 경우는 큰 프로젝트 할 때 웹서버와 웹 애플리케이션 서버를 분리하는게 효율적이기 때문이다. 

(평상시에 장고로 프로젝트 할 때 장고 내장 WAS만 써도 되는 이유이다. 큰 프로젝트 할 때  웹서버를 따로 두면 구분)

 

예)Tomcat(Apache), JBoss(Redhat), Jeus(Tmax),,

웹 서버 vs 웹 애플리케이션 서버

웹 서버는 정적인 데이터만 처리하는 서버이다. 이미지나 단순 html파일과 같은 리소스(정적 파일 - DB에 따라서 변화되지 않는 데이터)를 제공하는 서버는 웹 서버를 통하면 WAS를 이용하는 것보다 빠르고 안정적이다.

WAS동적인 데이터를 처리하는 서버이다. DB와 연결되어 데이터를 주고 받거나 프로그램으로 데이터 조작이 필요한 경우에는 WAS를 활용 해야 한다. 

 

★ CGI와 WAS의 차이

접속자가 많은 서비스의 경우 CGI 방식보다 WAS가 처리량이 더 좋다.

 

예를 들어, 5개의 웹 브라우저(클라이언트)가 동일한 프로그램을 요청했을 때 CGI 방식은 5개의 요청에 대한 프로그램을 모두 메모리에 적재한다. 반면에 WAS는 메모리에 한번만 적재한다. 이로써 CGI에 비해 메모리의 사용량이 적다. 이는 더많은 요청을 처리할 수 있음을 의미한다.


 

django 배포할 때 나오는 구조 - AWS는 이 전체 소프트웨어가 들어가는 서버 컴퓨터(하드웨어)를 빌려주는 업체이다.

WSGI(Web Server Gateway Interface) - Python WAS

파이썬으로 구현된 웹 애플리케이션(ex. django)가 웹 서버와 통신하기 위한 인터페이스이다.

 

예를 들어 파이썬 애플리케이션 Django가 웹 서버와 통신하기 위해서는 WSGI가 필요하다.

Apache, Nginx의 웹서버는 정적 콘텐츠(이미지, 파일 등)에 대한 처리를 수행하고 동적 콘텐츠(로그인, 메일)는 django, flask를 이용하여 만든 웹앱이 처리를 한다. 이 때 Nginx와 django 사이의 interface를 정의한 것이 WSGI이고 구현한 것이 uWSGI이다.

 

웹 서비스의 구조

  • 정적 처리 : 클라이언트 -> 웹 서버

  • 기본적인 동적 처리 : 클라이언트 -> 웹 서버 -> WAS -> (WAS가 실행하는)외부 프로그램

  • WSGI를 사용 : 클라이언트 -> 웹 서버 -> WSGI(=WAS) -> 외부 프로그램(ex. django)

 

 

참고 - https://wayhome25.github.io/django/2018/03/03/django-deploy-02-nginx-wsgi/

 

Django 배포연습 2 - nginx, wsgi 개념 · 초보몽키의 개발공부로그

Django 배포연습 2 - nginx, wsgi 개념 03 Mar 2018 | django deploy nginx wsgi nginx, uwsgi, docker를 활용한 배포 연습 과정을 기록한 글입니다. 개인 공부후 자료를 남기기 위한 목점임으로 내용상에 오류가 있을 ��

wayhome25.github.io

참고 - https://itmining.tistory.com/m/135

 

[Django] 장고 웹서비스의-이해

django 프로젝트 구성 장고를 이용해 웹서비스를 구성할 때 보통 다음과 같은 구조를 가진다고 합니다. 기본적으로 WSGI Web Application Server 하단 부분을 구현하게 되는데, 상단의 웹 서버와 웹 애플��

itmining.tistory.com

참고 -  https://my-repo.tistory.com/20

참고 -https://brownbears.tistory.com/350

'Web > Web' 카테고리의 다른 글

프레임워크(Framework) - 웹 프레임워크  (0) 2020.08.06
Comments