웹 서버와 WAS, 컨테이너의 개념 알아보기



웹서버와 WAS에 대한 개념이 잘 잡혀있지 않아서 구글링을 하면서 정보를 찾아보다가 좋은 포스팅이 있어서 해당 포스팅을 참조하면서 포스팅해보겠습니다. 포스팅 출처는 아래에 남기겠습니다. 기존에 Django, Node.js와 같은 여러가지 프로그램들을 그저 웹서버라고 불렀었는데 이번 포스팅을 토대로 제대로 정리해보았습니다.


정적 페이지와 동적 페이지

정적 페이지 (Static Page)

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

image

정적인 요소에는 Html, Css, Js, Image 같은 요소들이 있습니다. Js는 클라이언트 단에서 Html과 Css 와 같은 요소들을 컨트롤 하는데 쓰입니다. 파일의 형태로 보내기 때문에 정적인 요소로 봐도 무방하다고 생각합니다.

동적 페이지 (Dynamic Page)

서버에서 데이터베이스에서 정보를 가져와서 처리하는 것처럼, 어떠한 요청에 의하여 서버가 일을 수행하고 해당 결과가 포함된 파일을 보여주는 페이지. 사용자들마다 다른 페이지가 보여질 수 있습니다.


웹 서버와 컨테이너, WAS

웹 서버 (Web Server)

흔히 웹 서버라고 하면 초기에 Django, Node.js 와 같은 것들을 떠올릴 수 있지만, 엄밀하게 따지면 이들은 WAS라고 보는 것이 맞는 것 같습니다. 그렇다면 웹 서버는 무엇일까요?

웹 서버의 역할은 크게 2가지 입니다.

  • 웹 서버는 클라이언트가 요청한 정적인 콘텐츠를 HTTP 프로토콜을 통하여 제공해주는 서버입니다. 위에서 언급한 정적 페이지를 보내줍니다. 정적인 콘텐츠 제공 이 가장 큰 역할입니다.
  • 다른 역할으로는 동적인 요청이 클라이언트로부터 들어왔을 때, 해당 요청을 웹 서버에서 처리할 수 없기 때문에 컨테이너(Container)로 보내주는 역할을 합니다.

웹 서버에는 Nginx, Appach HTTP Server, IIS가 있습니다.

컨테이너 (Container)

컨테이너는 동적인 데이터들을 처리하여 정적인 페이지로 생성해주는 소프트웨어 모듈 입니다. 사용자가 로그인해서 My Page 메뉴에 들어간다고 가정해보겠습니다. 이 메뉴에서는 각자 사용자에 따라 보여질 정보가 다릅니다. 사용자의 요청이 들어오면 웹 서버는 정적인 요소만 클라이언트 측에 보낼 수 있고, 동적으로 처리해야 하는 부분은 처리할 수 없습니다. 컨테이너는 이러한 부분을 대신 처리해서 웹 서버에 정적인 파일로 만들어서 보내주는 모듈이라고 생각하면 될 것 같습니다.

image

클라이언트 측에서 크롬 개발자 도구를 이용하여 파일을 살펴보면 php, ejs 파일도 만든 소스코드도 전부 html로 전송됩니다. 이는 해당 파일에서 처리해야할 부분을 처리하고 정적 파일로 만든 후에 클라이언트에게 보냈다고 생각하면 좋을 것 같습니다. php 나 js 코드 등으로 처리한 코드 부분도 클라이언트 측에서는 볼 수 없습니다.

자바 기반의 서버에서는 서블렛이라는 용어도 많이 사용하는 것 같습니다.

WAS (Web Application Server)

웹 서버로부터 오는 동적인 요청을 처리하는 서버를 말합니다. 웹 서버와 컨테이너를 붙여놓은 서버 라고 보시면 될 것 같습니다. 위키백과에서는 아래와 같이 정의하고 있습니다.

웹 애플리케이션 서버(Web Application Server, 약자 WAS)는 웹 애플리케이션서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크 이다.[1] 인터넷 상에서 HTTP 를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해 주는 미들웨어 (소프트웨어 엔진)으로 볼 수 있다. 웹 애플리케이션 서버는 동적 서버 콘텐츠를 수행하는 것으로 일반적인 웹 서버와 구별이 되며, 주로 데이터베이스 서버와 같이 수행이 된다. 한국에서는 일반적으로 “WAS” 또는 “WAS S/W”로 통칭하고 있으며 공공기관에서는 “웹 응용 서버”로 사용되고, 영어권에서는 “Application Server” (약자 AS)로 불린다.

image

예를 들어서, 클라이언트에서 http://caffelove.com 이라는 도메인을 가진 서버에서 ‘내 정보’를 눌러 http://caffelove.com/myinfo 라는 경로에 들어간다고 가정해보겠습니다. 내 정보를 볼 수 있는 홈페이지라고 하겠습니다. 환경은 node.js 라고 가정하겠습니다.

/myinfo 라는 경로로 요청하면 WAS는 자신의 라우팅 정보를 통하여 어떤 처리를 해야될지 살펴봅니다. 이 때, myinfo를 라우팅 할 때, ‘myinfo.html 이라는 파일을 보여줘!’ 라는 요청을 하게 된다면 정적인 요소이기 때문에, 웹서버에서 클라이언트에게 myinfo.html 파일을 보내주기만 하면 됩니다. 관련된 Css, Js, Image 파일도 함께요.

하지만, myinfo는 자신의 정보를 보여주는 페이지이니 위처럼 반응하지 않겠죠. WAS에서는 대게 먼저 데이터베이스에서 데이터를 가져옵니다. 그 다음에 원하는 데이터를 가공하여, myinfo.ejs 파일로 해당 데이터를 보내줍니다. .ejs파일에서는 node.js 에서의 변수나 정보를 사용할 수 있게 만들어 놓았습니다. 정보를 넣어야 할 곳에 데이터베이스에서 가져온 정보를 넣고, ejs 파일을 html 로 바꿔준 다음에 웹서버로 전송합니다. (node.js 의 Javascript와 클라이언트의 UI를 동적으로 보여주는 Javascript는 다른 것이니 유의해서 봐주세요!)

웹 서버는 위의 html 요소를 클라이언트에게 다시 보내주는 것이죠. WAS에 Tomcat, Jeus 같은 것들이 있다고 합니다.


출처

  • https://hyoje420.tistory.com/5
  • http://myblog.opendocs.co.kr/archives/425
  • https://ko.m.wikipedia.org/wiki/웹_컨테이너
  • https://ko.m.wikipedia.org/wiki/웹_애플리케이션_서버
  • https://www.udemy.com/html-css-javascript/