WebServer - WAS, WSGI

Yujeong Jeong·2021년 4월 14일
0

웹서비스 구조

정적처리

클라이언트 -> request -> 웹서버

  • 정적인컨텐츠는 WAS를 거치지 않고 자원 제공

동적 처리

클라이언트 -> request -> 웹서버 -> request -> WAS -> 외부프로그램실행

  • 클라이언트 요청을 WAS에 보내고 WAS가 처리한 결과를 response
    ex) Apache, Nginx, IIS 등

CGI vs WAS

CGI - Common Gateway Interface

클라이언트 -> request -> 웹서버 -> CGI -> 외부프로그램

정적으로 동작하는 웹서버를 동적으로 기능하도록 만들기 위함

  • 웹서버에 들어온 request를 외부프로그램과 연결하여 그 프로그램이 request를 처리하도록 함
  • request를 연결만 함
  • 웹 서버가 외부프로그램 실행함
  • request가 들어올떄마다 서브프로세스를 fork함 (다수 요청을 처리하기 불리)

WAS - Web Application Server

웹 애플리케이션서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크 (웹 서버위에 애플리케이션 얹인 것)
클라이언트 -> request -> 웹서버 -> WSGI(미들웨어) -> request -> WAS -> 외부
웹서버 + CGI = WAS

  • db조회, 다양한 로직 처리 등 동적인 리소스 제공/처리 위해 만들어짐
  • http/https를하는 통해 컴퓨터나 장치에 애플리케이션 수행하는 미들웨어
  • 웹컨테이너/ 서블릿 컨테이너라고도 불림
  • ex) uWSGI, Gunicorn
  • ex)
    WSGI(django에 내장) : 웹서버와 웹애플리케이션 중계
    nginx는 python을 모르게때문에 uWSGI는 HTTP요청을 python으로,
    django로부터 받은 응답을 nginx(dnpqtjqj)가 알 수 있도록 변환

웹서버 WAS구분하는 이유

웹서버 필요 이유

  • 클라이언트가 서버로부터 response 받을 때 HTML문서와 이미지 파일등 정적 컨텐츠를 한꺼번에 받는 것이 아닌 웹문서를 모두 받아 이미지 파일 재요청
  • 이때 웹서버 프로그램이 이미지 파일 요청까지 한번에 처리해서 response하면 WAS에 요청 다시 보낼필요 없음

WAS 필요 이유

  1. 효율적으로 웹페이지에 존재하는동적 컨텐츠 처리 위함
  • 웹서버만 사용하면 동적으로 동작해야하는 콘텐츠 결과를 웹서버에서 모두 미리 로드해야함(자원낭비)
  1. 서버 부하 방지

분리 이유

  1. 서버의 부하방지
    두개의 서버 프로세스가 별개의 작업을 처리하게끔 하여 동적 데이터를 처리하기 위해 상대적으로 바쁜 WAS에 가해지는 부하를 줄임 (정적컨텐츠는 대체로 처리량이 많은 멀티미디어 컨텐츠가 많기 때문에 해당 요청까지 WAS가 처리하면 부하가 커짐)
  2. 보안 강화
    물리적으로 두 서버 분리
  3. 무중단 운영
    백사이드/프론트사이드로 분리한 WAS를 연결
  4. 하나의 웹서비스에서 여러 어플리케이션 서비스 가능

WSGI - WebServer Gateway Interface

웹서버웹애플레케이션간 인터페이스를 제공하는 파이썬 프레임워크

  • 파이썬 스크립트와 웹서버가 통신하기 위한 인터페이스
  • 웹서버와 WAS사이에서 미들웨어로 동작
  • 웹서버관점에서는 WAS처럼, WAS 관점에서는 서버처럼 동작
  • 다수의 클라이언트에서 오는 request 동시처리하기 위해 사용
  • CGI와는 다르게 request마다 서브프로세스 처리하지 않음
  • 환경정보와 요청에 대한 콜백함수 등을 파싱하고 정리하여 WAS에 제공
  • WAS는 해당요청 처리하고 콜백함수를 통해 웹서버로 전달

참고
https://my-repo.tistory.com/20
https://ahzick.tistory.com/entry/Web-Server-WAS-WSGI-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0
https://velog.io/@muchogusto/%EC%9B%B9%EC%84%9C%EB%B2%84%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://bunnnybin.tistory.com/entry/%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%9D%98-%EA%B5%AC%EC%A1%B0
https://jay-ji.tistory.com/66

0개의 댓글