sklass의 s-class 프로그래밍 blog

Web, Web Server, Web Application Server(WAS) 본문

network

Web, Web Server, Web Application Server(WAS)

sklass 2021. 9. 26. 20:51

웹(Web)은 World Wide Web의 줄임말로, www, web, w3 등으로 씁니다. 

1989년 3월 컴퓨터 과학자인 Tim Berners-Lee에 의해 만들어 졌습니다.

 

웹은 http 프로토콜을 통해 html, image, video, sound와 같은 데이터를 주고받습니다.

아래 그림은 클라이언트와 서버간 데이터를 주고받는 과정입니다. 

클라이언트와 서버간 데이터를 주고받는 방법

위 그림에서 보듯, 클라이언트는 요청(request)을, 서버는 응답(response)을 담당합니다.

이때 클라이언트란, 인터넷을 통해 서버에 요청할 수 있는 장치를 가리킵니다.

 

즉, 웹 브라우저를 뜻합니다.

그렇다면 웹 브라우저의 동작 원리를 통해 클라이언트와 서버간 통신 과정을 배워보겠습니다.

 

  1. 네이버에 접속하고 싶다면, 해당 URL 주소(https://www.naver.com)를 웹브라우저에 입력합니다.
  2. 웹 브라우저는 DNS 서버로 가서 www.naver.com의 IP 주소를 알아냅니다.
  3. 웹 브라우저는 해당 IP 주소로 데이터를 요청합니다. 이때 데이터란 앞에서 설명했던 html, image 등의 리소스를 말합니다.
  4. 웹 서버는 요청을 보낸 클라이언트에게 http status code 200을 리턴하고 패킷에 데이터를 담아 보냅니다.
  5. 웹 서버는 TCP 통신에 따라 패킷을 모아 데이터로 만들고 렌더링해서 사용자에게 최종적으로 보여줍니다.

TIP

웹 서버의 진짜 주소는 111.111.111.111 와 같은 숫자와 점으로 이루어진 IP 주소입니다.

예를 들어, www.naver.com와 같은 주소를 도메인(domain)이라 하는데, 사람들이 암기하기 쉬운 문자를 주소로 사용하여 접근성을 높여줍니다.

DNS(Domain Name Server) 서버는 이러한 도메인 주소를 IP 주소로 리턴해주는 서버를 말합니다.

http status code는 http 요청 결과를 나타냅니다. 5개 그룹으로 나뉘며 100(정보를 제공하는 응답), 200(성공적인 응답), 300(리다이렉트), 400(클라이언트 에러), 500(서버 에러)으로 이루어집니다.

TCP는 서버와 클라이언트 통신에서 신뢰성을 보장하는 프로토콜입니다.

3 way handshaking을 통해 통신하므로 데이터 유실의 우려에서 벗어날 수 있습니다.

 

Web Server 와 Web Application Server(WAS)

웹 서버(Web Server)가 모든일을 다 처리하는 줄 알았다면 잘못된 지식입니다.

웹 서버는 웹 브라우저와 같은 클라이언트로부터 http 요청을 받아 html, css, js, image 와 같은 정적 페이지를 반환합니다. 이러한 웹 서버의 종류로는 Apache, NGINX 등이 있습니다.

 

그렇다면 웹 애플리케이션 서버(WAS)는 어떤 역할을 할까요? 웹 서버가 정적인 파일들을 반환한다면 웹 애플리케이션 서버는 동적인 콘텐츠를 반환합니다.

 

DB를 조회해서 데이터를 넘겨주거나 다양한 서버 로직들을 처리해 반환합니다. 이러한 웹 애플리케이션 서버의 종류로는 Django, Flask 등이 있습니다.

 

그렇다면 웹 애플리케이션 서버만 필요한 게 아닐까라고 생각할 수도 있겠지만, 아닙니다. 다음과 같은 Flask 경고 메시지를 보면 그 이유를 알 수 있습니다.

WARNING: This is a development server. Do not use it in a production deployment. 
Use a production WSGI server instead.

이 메시지를 번역하면 다음과 같습니다. "이것은 개발 서버입니다. 이것을 프로덕션 환경에 사용하지 마십시오. 대신 프로덕션에는 WSGI 서버를 사용하세요."

 

웹 서버는 장고 또는 플라스크의 파이썬 코드들을 이해하지 못합니다.

 

따라서 웹 서버와 프레임워크는 통신할 수 없습니다. 그래서 만들어지게 된 것이 바로 WSGI(Web Server Gateway Interface)입니다. WSGI는 파이썬 코드들을 웹서버가 이해할 수 있게 도와줍니다.

 

웹 브라우저가 웹 서버에 요청을 보내면 웹 서버는 WSGI를 통해 웹 애플리케이션 서버를 사용할 수 있습니다. WSGI 종류로는 mod_wsgi, gunicorn 등이 있습니다.

WSGI의 역할

'network' 카테고리의 다른 글

[SSH] known_hosts와 authorized_keys  (0) 2021.12.05
Forward Proxy와 Reverse Proxy  (0) 2021.11.14
SSH (Secure Shell)  (0) 2021.11.07
IP 주소 & 서브넷 마스크(Subnet Mask) 정리  (0) 2021.10.31
Socket & Session  (0) 2021.08.26