Web Server와 Web Application Server(WAS)

우노·2024년 6월 23일
0

CS

목록 보기
2/5

WEB Server? Web Application Server (WAS)?

Web (거미줄) → World Wide Web (전세계로 퍼진 거미줄)

Web Server와 WAS 둘의 공통점은 아래와 같습니다.

  1. W3(L7)에서 HTTP 로 통신 (인터넷 L4)
  2. 클라이언트-서버 구조에서 서버 담당 → 클라이언트(웹 브라우저 등)의 요청에 맞는 응답을 반환

그럼 둘이 뭐가 다르냐구요?

Web Server - 정적

Web Server는 두가지를 가리킬 수 있습니다.

  1. 웹 브라우저 등의 클라이언트의 요청에 맞게 HTML 페이지, 이미지, 비디오 또는 파일과 같은 정적 데이터를 반환하는 서버의 역할을 수행하는 프로그램 (HTTP Server)
  2. 1.의 기능을 수행하는 데이터센터의 서버 컴퓨터 그 자체

우린 여기서 1. 로 생각할 겁니당.

  • nginx
  • Apache HTTP Server
  • LiteSpeed
  • Google Web Server
  • etc..

HTTP Server (HTML), FTP Server (files), EMAIL Server (email) 등의 공통점은?

🌐 Web Server정적 데이터를 반환한다 !

  1. 브라우저는 URL을 사용하여 서버의 IP 주소를 찾습니다.
  2. 브라우저는 정보에 대한 HTTP 요청을 보냅니다.
  3. 웹 서버는 데이터베이스 서버와 통신하여 관련 데이터를 찾습니다.
  4. 웹 서버는 HTTP 응답으로 HTML 페이지, 이미지, 비디오 또는 파일과 같은 정적 콘텐츠를 브라우저에 반환합니다.
  5. 그러면 브라우저가 정보를 표시합니다.

⇒ 이미 정해져있는, 서버가 가지고 있는 = 정적 콘텐츠를 제공하는 것에 적합
ex. 블로그, 사전, 사진, 파일 등

❓ 그럼 클라이언트가 요청할 수 있는 건?
어떤 정적 파일이 필요한지 지정해서 요청!

Web Application Server - 정적 + 동적

Web에서 무슨 일을 하는 Server = Web Server 확장판

요청에 따라 단순히 가지고 있는 파일을 가져다주는 역할에서 끝나지 않고 뭔가 더 처리한다!

🌐 Web Server + 비즈니스 로직 = Web Application Server

동적 콘텐츠 생성, 애플리케이션 로직 및 다양한 리소스와의 통합을 지원

  1. 브라우저는 URL을 사용하여 서버의 IP 주소를 찾습니다.
  2. 브라우저는 정보에 대한 HTTP 요청을 보냅니다.
  3. 웹 서버는 요청을 애플리케이션 서버로 전송합니다.
  4. 애플리케이션 서버는 비즈니스 로직을 적용하고 다른 서버 및 서드 파티 시스템과 통신하여 요청을 수행합니다.
  5. 애플리케이션 서버는 새 HTML 페이지를 렌더링하고 이를 응답으로 웹 서버에 반환합니다.
  6. 웹 서버는 브라우저에 응답을 반환합니다.
  7. 브라우저가 정보를 표시합니다.

⇒ 요청 기반으로 사용자가 원하는 데이터를 생성하거나 기존 데이터를 가공해서 전달할 수 있다.

그럼 WAS만 쓰면 안돼요?

WAS는 DB, 인공지능 등과 같은 다양한 리소스와 통합해서 동적 콘텐츠를 생성합니다.
근데 이 바쁜 WAS가 정적 콘텐츠까지 줘야한다면?
그걸 저멀리 있는 클라이언트에 전달까지 해야한다면??
심지어 서버니까 클라이언트 요청 분산하면서 부하 관리도 해줘야한다면???
그러려면 캐싱도 해야한다면????

  • [ Client ↔ WAS ↔ DB 등 ]

양쪽에서 너무 시달린다~ 그러다 해야할 일도 제대로 못하고 죽는다!
WAS는 이미 복잡한 처리하니까 그것만 집중해! 나머지는 Web Server가 처리할게!
물론 WAS가 Web Server의 확장이기 때문에 이것도 가능합니다.

  • [ Client ↔ Web Server ↔ WAS ↔ DB 등 ]

결국 Client 요청 분산과 응답 등의 역할을 할 가벼운 서버를 앞에 배치한 것입니당

Web ServerWeb Application Server
task간단한 요청에 응답 제공DB, 서비스 등 복잡한 콘텐츠 제공
protocolHTTP 기본 (FTP, SMTP도 지원)HTTP 포함 많은 프로토콜 지원
contentHTML 페이지, 이미지, 비디오 등의 정적 콘텐츠실시간 업데이트, 개인화 정보 등의동적 콘텐츠
multi threading일반적으로 지원하지 않음요청 동시 처리를 위해 지원

AWS 웹 서버와 애플리케이션 서버의 차이점은 무엇인가요?

nginx + wsgi/asgi (+gunicorn … )

nginx = 웹 서버 프로그램/소프트웨어 + 경량화/고성능이 목표 + 기타 웹서버에 필요한 기능 지원
➕ Apache httpd, Lightspeed 등 다른 웹서버 프로그램도 있다~

  • cgi = Common Gateway Interface - 웹서버 요청 처리 + 요청마다 프로세스 생성(fork) → FastCGI - 하나의 프로세스로 동작

프로젝트 폴더의 settings.py가 있는 config 폴더를 확인하면 wsgi.pyasgi.py 가 있습니다.

  • wsgi = Web Server Gateway Interface - 요청을 callback으로 받아 동기 처리
    웹서버와 애플리케이션의 미들웨어 역할
    쿠키, 세션, 인증, 라우팅 등을 확장
    gunicorn 등
    https://velog.io/@han0707/WSGI는-무엇일까
    How to deploy with WSGI
  • asgi = Asynchronous Server Gataway Interface - wsgi + 비동기 처리 지원
    uvicorn 등

저는 Django에서 wsgi - gunicorn 조합으로 배포했고 gunicorn은 다음과 같습니다.

gunicorn

= Python WSGI HTTP Server for UNIX

  • broadly compatible with various web frameworks
  • simply implemented
  • light on server resources
  • fairly speedy

django에서 지원하는 wsgi를 살려서 gunicorn으로 django application을 WAS로 동작하게끔 하고 → nginx로 client 요청을 받고 응답을 넘겨줄 겁니당.

  1. python manage.py runserver 쓰면 안돼요?

    """
    HTTP server that implements the Python WSGI protocol (PEP 333, rev 1.21).
    
    Based on wsgiref.simple_server which is part of the standard library since 2.5.
    
    This is a simple server for use in testing or debugging Django apps. It hasn't
    been reviewed for security issues. DON'T USE IT FOR PRODUCTION USE!
    """

    대충 django 프레임워크 개발에 집중할 거라 디버깅용으로 켤 수 있는 서버를 제공해줄텐데 그거에 신경은 안 쓸거고 실배포용으로는 안전하지 않으니 쓰지 마라~ 는 얘기입니다.

  2. nginx 왜 썼어요?

    위에서 언급한 [ Client ↔ Web Server ↔ WAS ↔ DB 등 ] 구조에서 리버스 프록시를 담당하고 nginx의 다양한 기능들 중 SSL/TLS로 HTTPS를 지원해주었습니다.

profile
기록하는 감자

0개의 댓글