CS Interview

Web Server vs WAS

게임이 더 좋아 2022. 9. 24. 17:24
반응형
728x170

사실 나는 웹에 대해서 공부하진 않았고 가볍게 개념만 알고 있었는데

서버에 대한 더욱 깊은 이해가 필요할 것 같아서 정리해본다.

 

기본적으로 알아야할 것이 몇가지 있다.

1. 정적 페이지

2. 동적 페이지

 

??? 이것만 보면 뭔 차이인지 감이 오지 않을 수 있다.

 

말로 설명해보자면

정적 페이지란 바뀌지 않는 것을 의미한다.

 

여기서 기사는 매일 바뀌겠지만 나머지 인터페이스나 구성들은 바뀌지 않는다.

그렇다면 인터페이스 같은 것들이 정적페이지라는 것을 말한다.

웹서버에 단순히 파일을 요청하면 file을 응답할 뿐이다.

image, html, css, js 들이 그 예다.

 

동적페이지는 무엇인가 파라미터에 의해 바뀌는 페이지를 말한다.

다시 말하면 웹 서버에서 실행되는 프로그램의 결과물을 보여주는 것이다.

예를 들면 JAVA 개발자는 Servlet에 메서드를 구현하고  Servlet은 WAS 에서 작동한다.

 

??? 차이는 알겠는데.. 감이 제대로 오지는 않는다.

 

그림을 보면서 더 이해해보자.

 

여기서 Web Server는 요청을 전달하고 결과물을 Client에게 반환할 뿐이다.

**특히 정적 컨텐츠의 경우는 WAS의 동작 없이도 바로 리소스를 제공할 수 있다.

그 외의 동적 컨텐츠는 요청을 WAS에 보내 처리된 결과를 클라이언트에게 전달하는 것이다.

 

대표적인 Web Server는 Nginx가 있다. 리눅스로 하면 저것을 가장 많이 봤을 것이다.

 

그렇다면 저 그림에서 WAS는 더 큰 개념인 것 같은데?? 맞아??

WAS는 Web Application Server로 

다양한 로직 처리, DB 조작 등 여러가지 동적인 컨텐츠를 제공하기 위한 어플리케이션 서버다.

동작은 HTTP를 통해 이루어진다.

 

**그림을 보면 Web Container가 동작하는 것을 알 수 있다. 하지만 대개 WAS와 Web Container를 동일하게 본다.

다른 말로는 서블릿 컨테이너라고도 한다.

요즘은 대개 Web Server 단독으로 존재하지 않기 때문에

 WAS 는 Web Server + Wer Container라고 볼 수 있다.

 

WAS 의 대표적인 예는 Tomcat 이다.

 


 

아니 근데.. 굳이 저렇게 2개 나누어야하나..?

그냥 하나가 둘 다하면 되는거 아녀..?

 

물론 그럴 수 있다.

하지만 속도를 위해선 저렇게 2개로 나누는 것이 훨씬 좋다.

Web Server에서는 정적컨텐츠만 처리하니까 빠른 요청 응답이 가능하다.

Web Container에서는 동적 컨텐츠만 담당하므로 그 때 여러가지 로직을 통해 클라이언트에 적절한 결과를 돌려준다.

더군다나 이렇게 2개로 나눔으로써 Load Balance가 더 용이해졌다.

**WAS가 여러개가 될 수 있다는 말과 같다.

사람마다 다르지만 "3초"룰이라는 것이 있는데 로딩이 3초 이상되면 페이지 뒤로가기를 누른다는 것이다.

예전엔 10초였다는데.. 점점 빨라졌다나 뭐라나..그렇다.

그래서 저렇게 2가지로 나눈다면 정적 컨텐츠를 먼저 로딩할 수 있으므로 UX 적으로 더욱 좋고

역할을 2개로 나누므로 하는 일이 달라져 유지 보수, 배포의 편리성도 높아졌다.

더욱이 웹 서버의 성능에 쓸 자원을 WAS에 써서 동적컨텐츠의 빠른 반응성도 기대해볼 수 있다.

즉, 필요한 곳에 더 많이 라는 단순한 내용을 저렇게 역할을 나눔으로써 가능해졌다.

 


 

사실 다른 그림도 있다.

어쩌면 이게 더 좋을 수 있다.

 

이 구조가 Web Server 랑 WAS랑 구분되어서 더 좋다.

사실 이 구조가 더 많이 쓰인다고 플랫폼 개발자에게 들었다.

우선 클라이언트 요청을 WebServer가 받고 WAS에 전달하고

관련 내용은 Servlet을 메모리에 적재하고 WAS는 Thread 를 미리 생성(Thread Pool)하고

web.xml을 참조하고 HttpServletRequest, HttpServletResponse 객체를 생성해서

Servlet에 전달한다.

스레드는 그저 Servlet의 service() 를 호출하면 된다.

다시 WAS는 Response 객체를 HttpResponse 형태로 바꿔서 Web Server에 전달하고

스레드를 반납하고 객체를 제거한다.

참 쉽지 않다.

 

다만 개발자가 고생할수록 사용자는 더 큰 만족을 얻게 된다.

나 프로젝트도 내가 고생해서 다른 사람이 좋아했으면 좋겠다.

 

반응형
그리드형