카테고리 없음

WAS와 Web Server 차이

salmon16 2024. 6. 6. 12:24

Web Server란

웹 브라우저로부터 HTTP 요청을 받아 경로와 일치하는 정적 컨텐츠(file contents)를 Filesystem에서 읽어와 제공하는 프로그램이다.

ex) Apache Server, Nginx

정적 컨텐츠

어느 사용자 요청이든 항상 동일한 컨텐츠를 말한다.

ex) HTML, CSS, JS, Image

 

Web Server의 기능

  • 정적 컨텐츠 요청 시 정적 컨텐츠를 제공한다.
  • 동적 컨텐츠 요청 시 Web Application Server(WAS)로 전단하여 WAS가 처리한 결과를 클라이언트에 전달한다.

Web Application Server(WAS)란

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

 

동적 컨텐츠

요청 인자에 따라 바뀔 수 있는 컨텐츠이다.

ex) OOO님 환영합니다. OOO은 사용자의 이름에 따라 바뀐다.

 

WAS의 기능

  • 클라이언트로부터 HTTP 요청을 받을 수 있다. (대부분의 WAS는 Web Server를 내장)
  • 요청에 맞는 정적 컨텐츠를 제공할 수 있다.
  • DB 조회나 다양한 로직 처리를 통해 동적 컨텐츠를 제공할 수 있다.
  • 동적 컨텐츠는 web container에게 보내 처리 후 반환된 것을 web server가 clinet에게 전송한다.

Web Server는 굳이 왜 필요할까?

WAS는 Web Server를 내장하는데 그럼 WAS는 왜 필요할까? 

Web Server를 사용했을 때 장점

1. 책임 분할을 통한 서버 부하 방지

 

정적 컨텐츠는 Web Server, 동적 컨텐츠는 WAS가 담당

Web Server는 빠른 컨텐츠 전달과 기본적인 요청 처리에 최적화

WAS는 애플리케이션의 비즈니스 로직을 처리하고 사용자 상호작용에 대한 복잡한 요구를 충족시키는 데 초점

Nginx 설정 예시

server {
	root /www/data;
    
    location / {
    }
    
    location /images/ {
    }
  • Root는 파일 시스템 디렉토리의 root이다
  • /images/img1.jpg로 요청이 오면
  • /www/data/images/img1.jpg 파일을 찾아 제공한다.

2. 여러 대의 WAS 로드 밸런싱

 

WAS가 처리해야 하는 요청을 여러 WAS가 나누어서 처리할 수 있도록 설정할 수 있다.

http {
	upstream backend { 
    	server backend1.example.com weight=3;
        server backend2.example.com;
        server 192.0.0.1 backup;
    }
}

로드 밸런싱을 설정하는 upstream 디렉티브 사용

upstream 블록 내에는 요청을 처리할 서버들을 정의 

weight = 3 설정은 이 서버가 다른 기본 가중치를 가진 서버들에 비해 3배 더 많은 요청을 처리하도록 설정 

backup 키워트가 설정된 서버는 기본 서버들이 사용 불가능한 경우에만 사용한다.

 

 

 

server{
	location / {
    		proxy_pass http://backend;
    }
}

 

  • location / 디렉티브는 URL의 특정 경로에 대한 요청을 처리하는 방법을 정의한다. 여기선 루트 경로로 접근했을 때 매치되는 경로이다.
  • proxy_pass를 사용하면 NGINX는 클라이언트의 요청을 받아 지정된 서버로 전달하고, 그 서버로부터의 응답을 클라이언트에게 다시 전달한다. 이 과정에서 클라이언트는 요청이 어느 서버로 전달되었는지 알 수 없다.

3. 여러 대의 WAS Health check

Health check란

  • 서버에 주기적으로 HTTP 요청을 보내 서버의 상태를 확인한다 (ex 특정 url요청에 200 응답이 오는지?)
  • Interval : health check를 통해 서버 상태를 확인하는 요청을 날리는 주기 (default 5초)
  • Fails : 아래의 경우 2회 연속 실패하면 서버가 비정상이라고 인지 (default 1회)
  • Passes: 서버가 다시 복구되어 요청이 3번 연속 성공하면 서버가 정상으로 인지 (default 1회)
location / {
	proxy_pass http://backend;
    health_check interval = 15 fails=2 passes=3;
}

4. 보안

리버스 프록시를 통해 실제 서버를 외부에 노출하지 않을 수 있다.

WAS 같은 경우 DB 접근권한을 가질 수 있기 때문에 위험할 수 있어 앞에 Web Server를 두면 외부에 노출 위험을 막을 수 있다.