Spring

WAS

후후후하하하 2024. 4. 17. 16:54

 

 

Static vs Dynamic

  • Static Pages : 데베에서 정보를 가져오거나 등 별도의 서버에서의 처리가 없어도, 사용자들에게 보여줄 수 있는 페이지
    • 어떠한 사용자가 오던간에 동일한 페이지를 보여준다.
    • ex) image, html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들
  • Dynamic Pages
    • 서버에서 데베에서 정보를 가져와서 처리하는 것처럼, 어떠한 요청에 의하여 서버가 일을 수행하고 해당 결과가 포함된 파일을 보여주는 페이지
    • 사용자들마다 다른 페이지가 보여질 수 있다.

 

 

Web Server vs WAS(Web Application Server)

  • Web Server
    • 웹 서버는 클라이언트가 요청한 정적인 콘텐츠를 HTTP 프로토콜을 통하여 제공해주는 서버. 위에서 언급한 정적 페이지를 보내준다. = 정적인 콘텐츠 제공
    • 다른 역할로는 동적인 요청이 클라이언트로부터 들어왔을 때, 해당 요청을 웹 서버에서 처리할 수 없기 때문에 컨테이너로 보내주는 역할을 한다.
    • ex) Nginx, Appach HTTP Server, IIS
    • 기능 1)
      • 정적인 컨텐츠 제공
      • WAS를 거치지 않고 바로 자원을 제공
    • 기능 2)
      • 동적인 컨텐츠 제공을 위한 요청 전달
      • 클라이언트의 요청(Request)을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달(응답, Response)한다.
  • Web Container
    • 컨테이너는 동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈
    • Apache는 CGI라는 개념을 지원한다.
      • CGI란? Common Gateway Interface
        • 인터페이스로서, 웹 서버 상에서 프로그램을 동작시키기 위한 방법을 정의한 프로그램.
        • 웹 서버와 외부 프로그램 사이에서 정보를 주고 받는 방법이나 규약.
        • 쉽게 말하면 두 개 이상의 컴퓨터 간의 자료들을 주고 받는 프로그램. 또는 주고 받는 것 자체를 의미.
        • PHP, Perl, Python 등의 언어는 Apache를 통해 CGI를 적용시키는 것이 가능한데, JAVA는 불가능.
        • JAVA는 따로 CGI와 같은 기능을 위해 컨테이너라는 것이 필요한데, 그것이 서블릿이다.
    • 웹 컨테이너의 작동
      1. 클라이언트는 웹서버로 request를 보낸다.
      2. 서블릿을 포함하는 WAS는 컨테이너로 요청을 보낸다.
      3. 컨테이너가 요청을 각 서블릿에게 전달한다.
      4. 서블릿 메서드가 로드된다.
      5. 서블릿은 컨테이너에 관련 response를 넘겨준다.
      6. 컨테이너는 이를 서버에 전달한다. 서버는 응답을 클라이언트에게 전달한다.
    •  

 

 

WAS(Web Application Server)

  • 웹 서버로부터 오는 동적인 요청을 처리하는 서버. 웹 서버와 컨테이너를 붙여놓은 서버.
  • ex) Tomcat, JBoss, Jeus, Web Sphere 등
  •  

 

 

Web Server가 필요한 이유

  • 클라이언트에 정적 컨텐츠를 보내는 과정
  • 이미지 파일과 같은 정적 컨텐츠들은 웹 문서(HTML 문서)가 클라이언트로 보내질 때 함께 가는 것이 아니다.
  • 클라이언트는 HTML 문서를 먼저 받고 그에 맞게 필요한 이미지 파일들을 다시 서버로 요청하면 그때서야 이미지 파일을 받아온다.
  • Web Server를 통해 정적인 파일들을 Application Server까지 가지 않고 앞단에서 빠르게 보내줄 수 있다.
  • 따라서 Web Server에서는 정적 컨텐츠만 처리하도록 기능을 분배하여 서버의 부담을 줄일 수 있다.

 

WAS가 필요한 이유

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

 

Web Server + WAS 조합

  1. 기능을 분리하여 서버 부하 방지
    • WAS는 DB 조회나 다양한 로직을 처리하느라 바쁘기 때문에 단순한 정적 컨텐츠는 WS에서 빠르게 클라이언트에게 제공하는 것이 좋다.
    • WAS는 기본적으로 동적 컨텐츠를 제공하기 위해 존재하는 서버.
    • 만약 정적 컨텐츠 요청까지 WAS가 처리한다면 정적 데이터 처리로 인해 부하가 커지게 되고, 동적 컨텐츠의 처리가 지연됨에 따라 수행 속도가 느려진다.
  2. 물리적으로 분리하여 보안 강화
    • SSL에 대한 암복호화 처리에 WS를 사용
    • 더 자세히 조사
  3. 여러 대의 WAS를 연결 가능
    • fail over(장애 극복), fail back 처리에 유리
    • 특히 대용량 웹 어플리케이션의 경우 (여러 개의 서버 사용) WS와 WAS를 분리하여 무중단 운영을 위한 장애 극복에 쉽게 대응할 수 있다.
    • 예를 들어 앞 단의 WS에서 오류가 발생한 WAS를 이용하지 못하도록 한 후 WAS를 재시작함으로써 사용자는 오류를 느끼지 못하고 이용할 수 있다.
  4. 여러 웹 애플리케이션 서비스 가능
    • 예를 들어, 하나의 서버에서 PHP와 JAVA 애플리케이션을 함께 사용하는 경우
  5. 기타
    • 접근 허용 IP 관리, 2대 이상의 서버에서의 세션 관리 등도 WS에서 처리하면 효율적이다.
    • 즉, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 WS와 WAS를 분리한다.
    • WS를 WAS 앞에 두고 필요한 WAS들을 WS에 플러그인 형태로 설정하면 더욱 효율적인 분산 처리가 가능하다.
  6.  

 

 

==================================================

Apache vs Tomcat

  장점 단점
Apache(static) 처리 속도가 빠르다.
구조가 단순하여 비용 절감.
트래픽 과부하에 강하다.
정적인 데이터만 처리가 가능.
다른 서비스와 상호작용 불가
Tomcat(dynamic) 데이터 흐름이 유동적이다.
DB 등 여러 서비스가 가능.
Apache에 비해 속도가 느리다.
부가적인 비용이 발생한다.
트래픽 과부하에 약하다.

 

Apache

  • 아파치 소프트웨어 재단에서 만든 웹 서버(Web Server)를 일컫는다.
  • 리눅스에서는 httpd로 명명지어져 배포된다.
  • 정적인 데이터들(html, css, 이미지, 파일 등)에 대한 클라이언트의 요청을 데이터로 만들어서 응답한다.
  • 80 포트를 사용.
    • Web Server란?
    • HTTP 프로토콜 기반으로 web client(browser)로부터의 요청을 서비스하는 기능을 담당하는 프로그램.
    • 80번 포트로 클라이언트의 요청(POST, GET, DELETE)이 왔을 때만 응답한다.
    • 정적인 데이터에 대한 처리를 담당한다.

Tomcat

  • 웹 서버와 웹 컨테이너(=컨테이너, 서블릿 컨테이너)의 결합
  • 현재 가장 일반적이고 많이 사용되는 WAS
  • 톰캣은 JSP와 서블릿 처리, 서블릿의 수명 주기 관리, 요청 URL을 서블릿 코드로 매핑, HTTP 요청 수신 및 응답, 필터 체인 관리 등을 처리해준다.
  • 8080 포트를 사용
    • WAS란?
    • 여러 클라이언트의 요구를 웹서버가 감당할 수 없는 기능을 구조적으로 웹 서버와 분리하기 위해 만들어진 것.
    • 동적인 데이터를 처리하는 서버, DB 연결, 데이터 조작 등의 처리를 담당한다.
    • WS역할도 할 수 있지만 WS에 비해 처리 속도가 느리다. 그래서 서로 강점만 사용하기 위해 WS와 WAS를 연동하여 서비스를 하는 것이 대부분이다.

 

Apache Tomcat

  • WAS에서 편의를 위해 Apache의 기능(웹서비스 데몬, HTTPD)을 포함하고 있기 때문에 아파치 톰캣이라 부른다.
  • 즉, 톰캣이 아파치의 기능을 일부를 가져와서 제공해주는 형태.

 

Apache 서버와 Tomcat 서버의 분업

  • 톰캣이 아파치의 기능을 지원하지만 아파치의 모든 기능을 제공하는 것은 아니다.
  • 특수한 상황에선 아파치 톰캣만으로는 구현이 어려워, 따로 아파치 서버를 설치하고 톰캣과 연결하여 사용한다.
  • 예를 들어 하나의 서버에서 PHP 애플리케이션과 JAVA 애플리케이션을 함께 사용하거나, HTTPD(아파치) 서버를 간단한 로드밸런싱을 위해서 사용해야 하는 경우라면 HTTPD를 앞에 두고 톰캣을 연결해서 사용하는 편이다.

 

참고 : https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-%EC%9B%B9-%EC%84%9C%EB%B9%84%EC%8A%A4-%EA%B5%AC%EC%A1%B0-%EC%A0%95%EB%A6%AC

 

[WEB] 🌐 웹 서비스 구조 (Web서버 / 웹컨테이너 / WAS) 정리

Static vs Dynamic 페이지 Static Pages 정적 페이지 데이터베이스에서 정보를 가져오거나 등 별도의 서버에서의 처리가 없어도, 사용자들에게 보여줄 수 있는 페이지. 어떠한 사용자가 오던간에 동일한

inpa.tistory.com

https://inpa.tistory.com/entry/TOMCAT-%E2%9A%99%EF%B8%8F-%EC%84%A4%EC%B9%98-%EC%84%A4%EC%A0%95-%EC%A0%95%EB%A6%AC