WAS

SexyWoong·2023년 11월 9일

Web

목록 보기
4/5

정적 페이지 vs 동적 페이지

  • 정적 페이지 : 아무런 로직이 필요히지 않은 고정된 페이지, 서버에서 그대로 제공되는 페이지 ex)회사 소개 페이지
  • 동적 페이지 : 로직이 필요한 페이지, 서버에서 프로그램에 의해 생성되는 페이지 ex) 로그인한 사용자에 따라 달라지는 페이지

웹 서버와 웹 컨테이너를 적절히 분리함으로써 정적 페이지와 동적 페이지의 처리를 효과적으로 다룰 수 있다.

Web Server

  • 예시) Nginx, Apache 등

클라이언트가 요청을 하였을때 웹서버가 정적페이지인지 동적페이지인지 구분하여 해당 파일을 가지고 있다면 파일을 찾아서 응답한다.

WAS (Web Application Server)

  • 예시) tomcat, undertow 등
  1. 클라이언트가 요청을 하였을때 웹서버가 정적페이지인지 동적페이지인지 구분한다.
  2. 동적페이지라면 웹서버는 처리할 수 없기 때문에 웹컨테이너에 요청을 넘겨준다.
  3. 요청 주소에 맞는 서블릿을 찾아서 프로그래밍을 한다.
  4. 프로그래밍 결과로 나온 데이터를 템플릿 엔진에 반영하여 클라이언트에게 응답한다.

WAS내부에는 웹서버와 웹 컨테이너가 존재한다. 따라서 트래픽이 많지 않은 소규모의 서비스에서는 웹서버가 필요없다. (WAS만 존재하더라도 정적 페이지 처리 가능)

Web Server가 필요한 이유

대규모 트래픽이라면 책임을 분리해주기위해 Web Server와 WAS가 필요하다.

  • Web Server : 정적 페이지 처리, 로드 밸런싱, 캐싱, health check, reverse proxy 등
  • WAS : 동적 페이지 처리
    대규모 트래픽에서는 Web Server와 WAS를 분리하여 부하 분산 및 효율적인 리소스 활용을 할 수 있다

Health Check?

  • Web Server가 WAS에 주기적으로 HTTP 요청을 보내서 서버의 상태를 확인하는 작업
    • Interval : Health Check를 통해 WAS 상태를 확인하기 위한 요청을 보내는 주기 (default : 5s)
    • Fails : 지정한 횟수만큼의 요청을 연속 실패한다면 WAS가 비정상적인것으로 간주 (default : 1)
    • Passes : 지정한 횟수만큼의 요청을 연속 성공한다면 WAS가 정상적인 상태가 된것으로 간주 (default : 1)
http {
    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
        server backend3.example.com;  # 새로운 서버 추가
        # 다양한 백엔드 서버들을 추가할 수 있어
        # ...
    }

    server {
        location / {
            # 기본적인 proxy_pass 설정
            proxy_pass http://backend;

            # Health Check 설정
            health_check;

            # Health Check 주기 설정 (예: 5초마다)
            health_check_interval 5s;

            # 실패 횟수 및 성공 횟수 설정
            health_check_fail_timeout 3s;
            health_check_healthy_threshold 2;
            health_check_unhealthy_threshold 3;

            # 추가적인 Health Check 옵션들도 있어
            # ...
        }
    }
}
  • health_check_healthy_threshold: 이 옵션은 서버를 정상 상태로 간주하는 데 필요한 연속 성공한 Health Check 요청의 횟수를 나타냅니다. 만약 이 횟수만큼의 연속된 성공이 있으면 서버를 정상 상태로 판단합니다.

  • health_check_unhealthy_threshold: 이 옵션은 서버를 비정상 상태로 간주하는 데 필요한 연속 실패한 Health Check 요청의 횟수를 나타냅니다. 만약 이 횟수만큼의 연속된 실패가 있으면 서버를 비정상 상태로 판단합니다.

  • health_check_fail_timeout 옵션은 Health Check 요청이 일정 시간 내에 지정된 횟수만큼 실패하면 해당 서버를 비정상 상태로 간주하는 데 사용됩니다.

예를 들어, health_check_fail_timeout 3s;는 Health Check 요청이 3초 동안 성공하지 않으면 해당 요청을 실패로 간주한다는 의미입니다. 만약 이 옵션을 설정하지 않으면 기본값은 2초가 될 수 있으며, 이 시간 동안에 Health Check가 실패하면 해당 서버를 비정상 상태로 간주하게 됩니다.

이 옵션을 설정함으로써 서버의 응답이 일정 시간 이내에 없다면 해당 서버를 문제가 있는 상태로 판단하고 대응할 수 있도록 할 수 있습니다.

profile
함께 있고 싶은 사람, 함께 일하고 싶은 개발자

0개의 댓글