우리가 부르는 통상적으로 부르는 '서버'는 두 가지로 나누어진다.
하나는 웹 서버 (Web Server) - WS
또 다른 하나는 웹 어플리케이션 서버(Web Application Server) - WAS 이다.
일단 이렇게 웹 서버(WS)와 웹 어플리케이션 서버(WAS)로 나누어서 사용하는 이유는 효율성 때문이다.
웹 서버(WS)는 정적인 컨텐츠를 처리하며, 웹 어플리케이션 서버(WAS)는 주로 동적인 컨텐츠 처리를 담당하고 있다.
그렇다면
정적인(Static) vs 동적인(Dynamic)
으로 나누어서 생각해보아야 한다.
정적인(Static)
일반적으로 이야기하는 정적(Static)의 의미는 만들어놓은 것 그대로 제공하는 것 자체를 정적이라 할 수 있다. 예를 들면, HTML 템플릿을 작성하고 홈페이지를 열어보면 이것 자체가 정적인 페이지가 되는 것이다. 정적인 웹사이트는 만들기 쉽기 때문에 처음에는 정적인 웹사이트를 만들어보며 사이트를 만든다.
( 다른 컴퓨터 혹은 클라이언트에서 접속해도 항상 같은 페이지를 보여주는 것을 정적 사이트라 한다.)
동적인(Dynamic)
동적의 의미는 상호작용을 통한 데이터 처리가 필요한 경우 동적인 페이지라 한다. 대표적으로 데이터베이스의 처리가 필요한 경우 '동적'이라는 말이 붙는다. (서버가 사용자의 '요청(Request)'에 따라 데이터를 가공처리한 뒤에 생성되어진 웹 페이지를 보여주는 것이다.)
웹 서버(Web Server)
웹 서버는 일반적으로 정적인 컨텐츠를 제공합니다.
- 클라이언트가 요청한 정적인 컨텐츠를 HTTP를 통해 제공해주는 서버입니다.
- 클라이언트로부터 들어온 요청에 대해 사용자 인증을 처리하는 역할을 한다.
- 요청한 파일이 없거나 문제가 발생하면 특정한 코드 값을 전달해준다. (대표적으로 404)
그렇다면 여기서 의문이 하나 듭니다. 정적인 컨텐츠를 처리해준다면, 동적인 컨텐츠는 어떻게 처리해야할지 생각해야 합니다. 여기서 웹 서버의 다른 역할이 있습니다.
- 동적인 요청 ( 예를 들면, 데이터베이스 쿼리문 처리 )가 들어오면 이 요청을 웹 서버에서는 처리가 불가능하므로 컨테이너(Container)에 보내주는 역할을 합니다.
※ 웹 서버는 정적 처리만 하기 때문에, 웹 서버 혼자만은 처리가 불가능하므로 동적 처리를 위해 요청을 보내는 것이다. HTML 페이지 자체에서는 서버에 저장된 데이터를 가져오거나 저장하는 것이 불가능하므로 요청을 통해 데이터를 가져오거나 저장해야 한다.
웹 서버의 종류에는 NGINX, APACHE 등이 있습니다.
그렇다면 여기서 이야기하는 컨테이너(Container)란 무엇인가?
컨테이너는 서블릿의 생명 주기를 관리하고 JSP를 서블릿으로 변환하는 기능을 지닌 프로그램이다.
(서블릿의 생명주기는 서블릿을 관리해주는 역할이라 생각하면 된다.)
컨테이너는 두 가지 종류가 있는데, 서블릿 컨테이너와 JSP 컨테이너가 있다.
(실상, 서블릿 컨테이너와 JSP 컨테이너는 같은 개념이다. JSP 자체가 PHP 처럼 스크립트 형식으로 동작하지 않고 서블릿으로 변경된 이후에 실행되기 때문이다. JSP를 서블릿으로 컴파일 해주는 것이 JSP엔진이다. 그런데 여기서 톰캣(TomCat)의 경우, 이러한 JSP엔진이 JSPServlet이다. JSP를 동작시켜주고 컴파일 하는 것이 JSPServlet이 담당하고 있으므로 어떠한 의미에서는 JSP컨테이너라고도 볼 수 있는 것이다.
- 서블릿 : 서블릿은 자바로 구현된 CGI를 의미한다. [자바를 사용하여 웹 페이지를 동적으로 생상하는 서버 측 프로그램을 이미한다.]
- CGI : 공용 게이트웨이 인터페이스 (Common Gateway Interface) 로 웹 서버와 프로그램 간의 교환방식을 의미한다. (정적 처리를 하는 웹 서버와 컨테이너를 연결하기 위한 통신 장치이다. 쉽게 생각해서 웹서버와 컨테이너 간의 통신을 도와주는 장치이다. )
- JSP(Java Server Pages) : 자바 서버 페이지는 HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어이다.
JSP의 기본적인 동작 구조는 클라이언트에서 서비스가 요청되면 JSP의 실행이 된다. → JSP는 웹 어플리케이션 서버의 서블릿 컨테이너에서 서블릿 원시코드로 변환 → 서블릿 원시코드가 컴파일되어서 HTML 형태로 클라이언트에게 돌려준다.
※ 개인 홈페이지에서는 HTML, CSS, JavaScript만으로도 충분한 표현이 가능합니다. 하지만 요새는 트위터, 페이스북, 개인 쇼핑몰 운영 그리고 댓글이 달리는 기능이 있는 홈페이지와 같이 기능이 추가되어져서 웹 페이지를 만듭니다. 이러한 데이터는 데이터베이스 상에 저장되는데, HTML으로는 막대한 양의 데이터를 저장과 처리가 불가능하므로 이러한 데이터를 처리를 감당하기 위해 만들어진 곳이 동적 페이지 입니다. (대표적인 언어가 CGI, ASP, PHP, JSP 등이 있다.)
웹 어플리케이션 서버(Web Application Server)
웹 서버로부터 오는 동적인 요청을 처리하는 서버를 웹 어플리케이션 서버라 한다. 일반적으로 WAS라 한다.
위키백과에서 WAS는 이렇게 정의되고 있다. 인터넷 상의 HTTP를 통해 사용자 컴퓨터나 장치에 어플리케이션을 수행주는 미들웨어(소프트웨어 엔진)으로 볼 수 있다.
WAS는 웹서버 + 컨테이너로 이루어진 서버라 생각하면 편하다.
웹 어플리케이션 서버 기능은
- 프로그램 실행 환경과 데이터베이스 접속 기능을 제공
- 여러 개의 트랜잭션을 관리
- 업무를 처리하는 비즈니스 로직 수행
웹 어플리케이션의 종류는 아파치 톰캣, 제우스, 제티(Jetty), 레진(Resin) 등이 있다.
더욱 자세한 내용은
gmlwjd9405.github.io/2018/10/29/web-application-structure.html
developer.mozilla.org/ko/docs/Learn/Common_questions/What_is_a_web_server
를 참조하도록 하자.
'클라우드 및 서버' 카테고리의 다른 글
[유용한 사이트] 모음 (0) | 2021.03.23 |
---|---|
[PaaS, IaaS, SaaS의 차이점]PaaS, IaaS, SaaS 너희들은 뭐니? (0) | 2020.12.28 |