📘WAS

was 란 (web application server)

DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공하기 위해 만들어진 Application Server

was가 필요한 이유

웹 페이지는 정적 컨텐츠와 동적 컨텐츠가 모두 존재한다. 사용자의 요청에 맞게 적절한 동적 컨텐츠를 만들어서 제공해야 한다. 이때, Web Server만을 이용한다면 사용자가 원하는 요청에 대한 결과값을 모두 미리 만들어 놓고 서비스를 해야 한다. 하지만 이렇게 수행하기에는 자원이 절대적으로 부족하다. 따라서 WAS를 통해 요청에 맞는 데이터를 DB에서 가져와서 비즈니스 로직에 맞게 그때 그때 결과를 만들어서 제공함으로써 자원을 효율적으로 사용할 수 있다.

was방식

요청 -> 웹서버) -> 웹 어플리케이션 서버(flask,django 등) -> (웹어플리케이션 서버가 실행)프로그램

Apache project의 Tomcat.

was 기능

  1. 기능을 분리하여 서버 부하 방지 WAS는 DB 조회나 다양한 로직을 처리하느라 바쁘기 때문에 단순한 정적 컨텐츠는 Web Server에서 빠르게 클라이언트에 제공하는 것이 좋다. WAS는 기본적으로 동적 컨텐츠를 제공하기 위해 존재하는 서버이다. 만약 정적 컨텐츠 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려진다. 즉, 이로 인해 페이지 노출 시간이 늘어나게 될 것이다.
  2. 물리적으로 분리하여 보안 강화 SSL에 대한 암복호화 처리에 Web Server를 사용
  3. 여러 대의 WAS를 연결 가능 Load Balancing을 위해서 Web Server를 사용 fail over(장애 극복), fail back 처리에 유리 특히 대용량 웹 어플리케이션의 경우(여러 개의 서버 사용) Web Server와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다. 예를 들어, 앞 단의 Web Server에서 오류가 발생한 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
  4. 여러 웹 어플리케이션 서비스 가능 예를 들어, 하나의 서버에서 PHP Application과 Java Application을 함께 사용하는 경우

WSGI

WSGI - Web Server Gateway Interface 웹서버와 웹 어플리케이션간 인터페이스를 제공하는 파이썬 프레임워크. -> 파이썬 스크립트(혹은 웹 어플리케이션)이 웹 서버와 통신하기 위한 인터페이스라는 소리. (일종의 프로토콜) 서버|게이트웨이 , 어플리케이션|프레임워크 양단으로 나눠진 구조. 웹서버와 WAS 사이에서 미들웨어로써 동작하며, 웹 서버의 관점에서는 WAS 처럼, WAS 관점에서는 서버처럼 동작한다. 다수의 클라이언트에서 전해지는 Request들을 동시에 처리하기 위해 사용함. -> CGI와는 다르게 Request 마다 서브프로세스를 만들지 않음. 웹서버로부터 들어온 요청을 처리하는데, 환경정보와 요청에 대한 콜백 함수 등을 파싱하고 정리하여 WAS에 제공하고, WAS은 해당 요청을 처리하고 콜백 함수를 통해 웹서버로 응답함. 같은 프로세스에서 다수의 애플리케이션과 프레임워크들을 실행시킴.

WSGI방식

요청 -> 웹서버 -> WSGI Server(middleware라고도 함) -> WSGI를 지원하는 웹어플리케이션(Django, flask 등)

Gunicone

웹 서버와 장고사이에서 request를 처리해주는 역할을 한다 멀티 쓰레드를 만들수 있기 때문에 request요청이 많아 지더라도 효율적으로 처리 가능

Bar

ASGI

“ASGI는 WSGI의 정신적 계승자입니다. 파이썬 웹 서버, 프레임워크, 어플리케이션 사이에 비동기적인 표준 인터페이스를 제공합니다. WSGI가 파이썬 앱에 대한 동기성에 대한 표준을 제공했다면 ASGI는 동기성과 비동기성 모두에 대한 표준을 제공합니다”라고 되어 있는데요. ASGI는 곧 WSGI에 대한 호환성을 가지면서 비동기적인 요청을 처리할 수 있는 인터페이스입니다.

ASGI방식

요청 -> 웹서버 -> ASGI Server -> ASGI를 지원하는 웹어플리케이션

Uvicoor

WSGI의 경우에는 비동기적인 요청 처리에 단점이 있었습니다. 하나의 동기적인 callable이 요청을 받아 응답을 리턴하는 방식이었는데, 이런 방식은 길게 유지되어야 하는 연결 - long-poll HTTP나 웹 소켓에는 적합하지 않았습니다.

CGI

CGI(Common Gateway Interface) 웹 서버에서 어플리케이션을 작동시키기 위한 인터페이스입니다. 정적인 웹서버를 동적으로 기능하게 하기 위해서 등장하였습니다. 서버 프로그램과 외부 프로그램 간의 인터페이스가 바로 CGI입니다. 근래에는 웹 서버의 프로세스로서 인터프리터를 상주시킴으로써, CGI로부터 프로그램을 호출해 부하를 줄임으로써 성능을 개선한 Java Servlet나 mod perl, mod php, FastCGI 등도 공개되었습니다. 기존에는, 웹서버가 있고 클라이언트에서 외부 프로그램이 필요한 리퀘스트가 들어오면 CGI를 통해 외부 프로그램을 실행시켜 리퀘스트에 응답하도록 했지만 요즘에는 웹서버에 인터프리터를 내장함으로써 따로 프로세스를 fork하여 외부 프로그램을 실행시키지 않고 내부에서 다 처리합니다.

CGI 방식

요청 -> 웹서버(아파치, nginx 등) -> (웹서버가 직접실행) 프로그램(Perl, C/C++ 등)

태그:

카테고리:

업데이트: