ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Web] 웹 서버 VS 웹 애플리케이션 서버 (WAS)
    Programming/Web 2020. 1. 14. 13:31

    웹은 HTTP라는 프로토콜을 사용하여 클라이언트 - 서버간 데이터 통신을 한다.

    클라이언트 측에서 요청을 보내고, 서버 측에서 응답이 되돌아 오는 구조이다. 

    웹 서버는 이러한 HTTP 요청을 받아들이고 HTML, 이미지 파일, CSS 같은 문서 또는 리소스 데이터를 반환하는 역할을 한다.

     

    대표적인 웹 서버는 IIS, Apache, Nginx, GWS 등이 있다. Apache는 HTTP Daemon 이라고 부르기도 한다. 

    * HTTP Daemon : 웹 서버의 백그라운드에서 실행되어, 들어오는 서버 요청을 대기하는 SW 프로그램

     

    웹 서버

    웹 서버는 서비스 SW가 동작하는 컴퓨터를 말한다.

    웹 서버의 가장 중요한 기능은 클라이언트가 HTTP에 맞게 요청하는 HTML 문서나 각종 리소스를 전달하는 것이다.

     

    웹 브라우저나 웹 크롤러가 요청하는 리소스는 컴퓨터에 저장된 정적인 데이터이거나 동적인 결과가 될 수 있다.

     

    Nginx의 특징

    • Reverse Proxcy(리버스 프록시)를 잘 활용하면 깔끔하고 안정적인 서비스 운영이 가능하다.
    • Nginx 에서 제공해주는 캐싱 기능을 잘 활용하면 안정적인 서비스 운영이 가능하다.
    • Apache 보다는, 설정이 심플하다(주관적 견해).
    • 대용량 트래픽의 서비스에서 안정적인 성능을 보여준다.

     

    Reverse Proxy

    Reverse Proxy는 클라이언트 사용자의 리퀘스트 요청을 받아서, 실제로 운영하고 있는 내부 서버의 애플리케이션에 전달하고 결과를 받아서 클라이언트에 리턴하는 역할을 한다.

     

    외부에 공개된 도메인은 DNS에 의해서 해당 서버의 위치, 즉 IP 주소를 알 수 있다. 하지만 내부 서버의 IP를 외부에 공개할 수 없는 경우가 많다(보안상의 이유로..). 

     

    예를들어 internal.springboot.co.kr 이라는 애플리케이션과 admin.springboot.co.kr 이라는 관리자 애플리케이션 두 대를 운영중이라고 가정하자.

     

    해당 두 대의 서버에는 외부에 오픈이 되지 않은 상황ㅇ다. 즉, 외부 DNS 서버를 통해서 해당 서버들을 찾을 수가 없는 것이다.

     

    이 때 Nginx Web Server 에서는 외부 요청을 받으면 내부 서버로 요청, 응답, 전달하는 역할을 수행한다.

    springboot.co.kr 이라는 URL로 Nginx 웹 서버에 요청이 오면, internal.springboot.co.kr 로 요청을 전달하는 식이다.

     

     

     

    WAS

    WAS는 일종의 미들웨어로 웹 클라이언트의 요청 중 동적인 웹 애플리케이션이 동작하도록 지원하는 목적을 가진다.

    WAS에는 Apache Tomcat, 웹 로직, 제이보스 등이 있다.

     

    Nginx와 같은 웹 서버가 HTML, 이미지와 같은 정적인 리소스를 전달하는 역할을 한다면, WAS는 동적으로 동작하며 DB와 연동되고 비즈니스 로직을 포함한다. 

     

    예를 들어, Nginx는 WAS의 앞단에서 리버스 프록시를 수행한다. 정적인 리소스에 대한 리버스 프록시는 nginx 설정으로 캐싱 되어있는 파일을 호출할수도 있고, 정적인 static 파일 서버를 호출할 수도 있다.

     

    또한 동적 실행이 필요한 경우에는 마찬가지로 리버스 프록시 설정으로 톰캣 WAS를 호출한다.

    물론 경우에 따라서는 다른 네트워크에 있는 서버를 호출할 수도 있다.

     

     

     

    웹 서버와 WAS를 분리하는 이유

    웹 서버는 상대적으로 WAS 보다 간단한 구조로 만들어져 있다.

     

    예를 들어, WAS에서 동작하도록 만들어진 프로그램이 WAS 자체에 문제가 생겨 장애가 발생하는 경우를 생각해보자.

    해당 웹 애플리케이션을 사용자는 WAS에 문제가 발생한 지 모르고 이용할 수 있기 때문에 문제가 있는 WAS를 시작할 때 앞단의 웹 서버에서 먼저 해당 WAS를 이용하지 못하도록 해야한다. 

     

    이는 대규모 처리를 위해 다수의 서버를 가지는 대용량 웹 애플리케이션에서 무중단으로 운영하기 위해서 상당히 중요한 문제이다.

    이러한 문제 때문에 보통 웹 서버가 WAS 앞단에서 동작하도록 하는 경우가 많다.

     

    'Programming > Web' 카테고리의 다른 글

    [Web] Template Literals with JSON in JavaScript  (0) 2020.01.15
    [Web] JavaScript - Event Bubbling  (0) 2020.01.15
    [Web] Client - Server의 TCP/IP 통신  (0) 2020.01.14
    [Web] 토막글  (0) 2020.01.13
    [Web] NodeList vs Array  (0) 2020.01.12

    댓글

Designed by Tistory.