[Web] 정적 or 동적 페이지, Web Server, WAS

·

3 min read

글의 목적

웹 서비스를 만들어 배포하기 위해 웹 서버 및 WAS를 보다 자세히 이해하고자 한다:

  1. 웹 서버가 실제로 어떻게 구성되어 있는지 이해한다.

  2. 정적, 동적 페이지란 무엇이고 각각이 필요로 하는 웹 서버가 어떻게 다른지 알아본다.

  3. WAS가 무엇인지를 알고 왜 필요한지를 이해한다.

Web Server란?

https://developer.mozilla.org/ko/docs/Learn/Common_questions/Web_mechanics/What_is_a_web_server

하드웨어 측면

  • Web Server의 소프트웨어와 Website를 구성하는 파일들(HTML, CSS, JS, images, ...)을 저장하는 컴퓨터

  • Web에 연결되어 다른 (Web에 연결된) 기기들이 본 하드웨어의 데이터(파일)들을 적절하게 주고받는 것이 가능하도록 해줌

소프트웨어 측면

이 글에서 다루는 Web Server는 HTTP 서버로 국한 합니다!

  • Web 사용자들이 어떻게 파일들에 접근하는지를 관리

  • URL을 통해 사용자들이 어떤 파일들에 접근하는지를 식별

정적 페이지와 동적 페이지

  • 정적 페이지: 동일한 URL을 통해서는 '언제나' 동일한 페이지(파일)만을 제공

  • 동적 페이지: 동일한 URL일지라도 사용자가 입력한 정보(게시글 id, 유저 id 등)에 기반하여 다른 페이지(파일)을 제공

좀 더 풀어서 설명하자면,

정적 페이지는...

모든 URL에 대해 돌려줘야할 결과물이 정해져 있다. 사전에 모든 URL에 대응되는 페이지를 생성해두고 매번 이를 전송하기만 하면 된다.

동적 페이지는...

모든 URL에 대해 돌려줘야할 결과물이 정해져 있지 않거나 그 경우의 수가 너무 다양하여 전부 사전에 준비해두기가 불가능하다.

예를 들어, 실시간으로 작성되는 모든 게시글, 혹은 새롭게 생성되는 모든 유저들을 위해 대응되는 모든 페이지를 빠르게 생성해내기 어렵고, 매우 비효율적이다.

따라서 사용자의 요청이 들어올 때마다 필요한 페이지를 생성하여 응답으로 전송해야한다. 정적 페이지에 비해 연산이 많이 요구된다.

정리하자면

사용자의 요청에 따라 페이지를 그 때 그 때 생성해야한다면 동적 페이지이고, 미리 생성해둘 수 있다정적 페이지이다.

조금 더 간결하게, 페이지의 생성 시점이 (웹 서버의) 컴파일 타임이냐 런타임이냐에 따라 정적 페이지, 동적 페이지로 나눌 수 있다.

WAS란

WAS는 Web Application Server의 줄임말이다.

흔히들 위와 같이 Web Server + Web Container를 WAS라고 표현한다.

Web Container는 동적 컨텐츠 제작을 담당하는 부분으로, Web Server의 요청에 따라 적절하게 컨텐츠를 생성하여 Web Server에게 돌려주고, Web Server가 이를 Client에게 전달하는 방식으로 작동한다.

그러나 정적 컨텐츠는 따로 처리하도록 분산하는 것으로 WAS의 부담을 덜 수가 있다. 아래와 같이 Web Server를 분리하고, 정적 컨텐츠는 Web Server가 처리하도록 하면 된다.

이 구조는 WAS를 멀티스레드로 작동하게 하는 것으로 Web Server의 요청이 들어올 때마다 Thread를 할당하여 더 효율적으로 작동할 수 있도록 하는 것이다.

이처럼 단일 WAS를 멀티스레딩 하는 것 뿐 아니라 WAS 자체를 여러개 두는 방법도 존재한다. 이 경우 Web Server가 여러 WAS 중 적절한 곳에 요청을 보내는, load balancing의 역할도 담당하게 된다.

오해할 수 있는 부분(+ Static Site Generator)

눈으로 보기에 동적일지라도 정적 페이지일 수 있다. 개발할 때는 동적 페이지 처럼 개발을 하되, 이를 Static Site Generator를 통해 모든 경우의 수에 대한 페이지를 빌드 시점에 (미리) 생성해주는 식으로 개발을 할 수 있는 것이다.

예를 들어, 실시간 업데이트가 필요 없(고 컨텐츠가 방대하지 않)는 블로그의 경우 Static Site Generator를 사용해볼 수 있다. 글만 작성하면 해당 게시글을 보여주는 페이지를 자동으로 생성해주어 정적 웹 서버에 업로드하는 식으로 할 수 있다. 이렇게 되면 서버는 매번 동적으로 게시글 페이지를 생성할 필요가 없어진다.

하지만 연산을 매번 안 하는 대신 한 번 연산을 해둔 결과물을 저장해둬야 하므로 저장공간을 더 필요로 한다. 따라서 위키피디아 같은 사이트는 정적으로 모든 것에 대한 페이지를 생성해두기보단 약간의 연산을 더 하더라도 동적으로 생성하는 것이 유리할 수 있겠다.

이 글을 참고하면 조금 더 도움이 될 것이다.

참고 글

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

https://codechasseur.tistory.com/25