안드로이드 개발을 하다가 서버에 있는 DB를 실제로 사용하려고 서버 구성을 하다보니, 전체적인 흐름을 확인해볼 필요가 있어 정리하였음.
웹 서버는 클라이언트로부터 http 요청(request)를 받아들이고, 웹 페이지, 이미지, 문서 등의 정적 파일이나 동적 콘텐츠를 제공하는 소프트웨어.
이후에 언급되는 Web Application을 실행하기 위한 소프트웨어 및 서버 환경을 말한다.
WAS는 클라이언트로부터의 웹 요청을 처리하고, Web Application의 코드를 실행하여 동적 웹 페이지를 생성하며, 데이터베이스와 상호작용 하는 등의 역할을 수행한다.
WAS는 Web Server를 통해 요청을 받고, Web Application의 코드를 실행해주는 역할을 한다고 볼 수 있다. Web Application에 작성되는 스크립트 언어 종류에 따라 WAS는 종류도 다르고, 비슷한 역할을 수행하는 것에 대한 이름이 조금 다르다. 즉 정확하게 딱 무엇이다 말하기 애매한 경우가 있다.
JAVA의 경우, WAS 역할을 수행하는 것으로 Tomcat이라 불리는 것이 많이 사용된다.
Python의 경우, uWSGI 혹은 Gunicorn이라 불리는 것이 많이 사용된다.
CGI(Common Gateway Interface)와 WSGI(Web Server Gateway Interface)는 WAS가 아니라 Web Server와 Web Application간의 통신에 필요한 규약(프로토콜) 같은 것이다. uWSGI와 Gunicorn은 python Web application에 특화된 WSGI를 사용하여 WAS의 기능을 제공해준다.
Web Application은 웹 브라우저를 통해 사용자가 인터넷을 통해 접속해서 실행하는 소프트웨어 프로그램으로, 다양한 기능을 제공하는 동적 웹 페이지를 직접적으로 생성하는 기능을 제공한다.
스크립트 언어 진영에 따라서 사용하는 Web Application의 종류가 다른데, Python은 Django를, Java는 Spring이 있다. 구체적으로 어떠한 동적 웹 페이지를 구현할지를 코드로서 작성하게 구현하게 된다.
WAS는 Web Application과의 상호작용을 통해 정적 뿐만 아니라 동적 웹 페이지를 구현할 수 있다. 그럼에도 보통은 Web Sever - WAS - Web Application - DB
구조가 계속 사용되는데, 그 이유는 아래와 같은 Web server의 기능 때문이다.
1. Reverse proxy
보통 사용자 ip를 직접 들어내지 않고 인터넷을 사용할 수 있게하는 것을 forward proxy 기능이라 한다. Reverse proxy는 반대의 개념으로, 서버를 사용할 때 서버 내부의 구조나 기능의 구체적인 내용이 노출되지 않도록 하는 기능을 말한다.
2. Load Balancing
여러 서버 또는 서버 인스턴스 사이의 작업 부하를 분산시켜 성능을 향상시키고 가용성을 향상시키는 기술이다.
3. Reverse proxy caching
보통 사용자가 같은 사이트에 접속할 경우 이미 불러온 적 있는 일부 데이터를 따로 저장해두었다가 바로 보여줘서 빠르게 웹 페이지가 나오게 하는 기능을 forward proxy caching 기능이라 하는데, 반대로 서버 단에서 자주 전송하게 된 데이터를 따로 저장해두었다가 바로 보여주는 기능을 말한다.