웹 서버와 WAS

2022. 10. 25. 14:06web

HTTP란?

인터넷을 사용할 때 버튼을 누르거나 주소를 입력하는 등의 동작을 하면 인터넷은 어떠한 정해진 과정을 거쳐 사용자가 원하는 데이터를 보여준다.
사람도 의사소통하기 위해 정해진 언어가 있듯이,
인터넷을 상에서 데이터를 주고받기 위해서는 정해진 규약을 따라서 데이터를 주고받을 수 있는데 이 때 필요한 프로토콜, 즉 규약이 HTTP이다.

Hyper Text Transfer Protocol의 약자로 인터넷간에 데이터를 주고받는, 통신할 수 있는 프로토콜, 규약이다.


HTTP동작 방식

웹 서버

클라이언트는 서버에게 HTTP요청을 보낸다. 해당 요청이 들어오면 웹서버는 요청을 확인한 뒤 이에 맞는 응답을 보내준다. 이 응답 역시 HTTP를 사용한 응답 메세지를 보내주는것이다.
웹서버는 보통 정적인 리소스(HTML, CSS, JS, 이미지 등)과 기타 부가기능을 제공한다.
웹서버의 예로는 Apache, IIS, NGiNX등이 있다.

WAS (웹 어플리케이션 서버)

그런데 이 웹 서버 하나로만은 모든 요청을 다 처리할 수 없을 뿐더러, 같은 html이라도 클라이언트마다 다른 화면, 즉 동적인 화면을 보여줄 수 없다.

동적인 처리를 하기 위해서는 WAS가 그 역할을 위임하게 되는데
웹 서버의 기능을 포함하면서도 프로그램 코드를 실행해서 어플리케이션 로직을 수행 할 수 있는 역할을 가진다.
또한 해당 로직을 위해 필요한 DB 접근도 WAS를 통해서 연결하며, 로직과 더불어 사용자마다 다른 동적인 페이지를 보여줄 수 있게 된다.


하지만 WAS가 정적 리소스도 제공한다고해서 모든 역할을 WAS가 담당해버리면 서버 과부하가 우려될 수 있다.
또한 WAS나 DB 장애시 오류 화면을 노출해 줄 수 있는것은 웹 서버다. WAS는 장애 시 오류화면 노출이 불가능하다.

또한 WAS의 최대 장점 중 하나가 멀티 쓰레드를 가능하게 해준다는것이다.
단일 쓰레드 혹은 요청마다 쓰레드를 생성하게 되면 시간과 비용면에서 문제가 되는데, WAS는 이러한 문제를 위해 쓰레드 풀을 두어 미리 여러개의 쓰레드를 보관해둔다.

쓰레드 풀(Thread Pool)

  • 요청과 응답에 필요한 쓰레드 풀을 미리 만들어두고 쓰레드 풀에서 관리한다.
  • 최대치를 설정할 수 있다. (톰캣은 기본 200개)
  • 쓰레드가 필요하면 쓰레드 풀에서 꺼내서 사용하고, 사용이 종료되면 다시 반납한다.
    특징
  • 쓰레드가 미리 생성 되어있으므로, 쓰레드를 생성하고 종료하는 비용(CPU)이 절약되고, 응답 시간이 빠르다.
  • 생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 와도 서버가 안전할 수 있다.

WAS의 예로는 Tomcat, 레진, Jetty 등이 있다.

사실 둘은 서로의 역할과 기능도 포함하긴 하지만!
정리하자면

정적 리소스는 웹 서버가, 애플리케이션 로직과 디비 연결은 WAS에 더 특화되어 있으며, 웹 서버는 로직 수행같은 동적인 처리가 필요하면 WAS에 요청을 위임

한다고 간단히 정리할 수 있다.

'web' 카테고리의 다른 글

Servlet  (0) 2022.10.28
HTTP의 발전2_ HTTP2.0  (0) 2022.10.25
HTTP의 발전_HTTP 1.x  (0) 2022.10.25
IP  (0) 2022.10.25