본문 바로가기

Web Programming

Chapter 2. 웹 애플리케이션 아키텍처 ①

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
<웹서버는 정적인 페이지 전문>

앞에서 이야기한 웹 서버는 실제로 하는 역할은 딱 한가지 뿐입니다. 사용자가 요청한 HTML 페이지를 찾아서 보여주는 역할만 하지요. 이미 정의가 되어있는 STATIC 한 페이지를 되돌려주는것이 전부입니다. 하지만 실제로 사용자가 원하는 페이지는 사용자의 구색에 맞게 변하는 동적인 페이지 이지요.. 그런 요구에 대응하기 위해 나온 구조가 웹 어플리케이션 아키텍쳐 입니다.

<CGI>
이런 동적인 페이지를 만들기 위한 시초정도라고 할 수 있는데.. C나 파이선, PHP 같은 언어로 구현이 되어있다고 합니다. 요청이 들어올때 마다 프로세스를 생성해야 하므로 퍼포먼스가 떨어진다는 단점이 있답니다.

<Servlet>
CGI와는 다르게 스레드를 생성하여 클라이언트의 요청에 부응합니다. 예전에 스레드와 프로세스의 차이를 다룬 내용이 있는데요.. 이 내용을 살펴보시면 될겁니다. 여튼, 프로세스보다 비용이 적은 스레드를 사용하여 요청을 처리하여 CGI보다 퍼포먼스 측면에서의 더 뛰어나다는게 핵심입니다.

기존의 서버와 클라이언트간의 1:1 맞 대응하던 요청 처리 방식이 서블릿이라는 녀석이 생기므로서 이제는 서버-서블릿-클라이언트 라는 구조로 변화가 됐습니다. 하지만 실제 클라이언트는 서블릿에 직접 요청하는 것이 아니라는 겁니다. 컨테이너라고 불리우는 자바 애플리케이션을 통해 요청을 하게 된답니다.



이런 그림을 보면 좀더 자세하게 알 수 있죠.. 실제로 클라이언트의 요청을 서블릿이 받기까지는 리스너와 컨테이너 두가지를 더 거쳐야 하니까 말이죠. 일단 리스너는 재껴두고 컨테이너에 대해서 먼저 알아 봅니다 ^^

<Servlet Container>
컨테이너라는 의미를 직역해보면, 담고 있다는 의미가 강한데요... 서블릿들의 집합체 정도로 이해하면 될려나? 생각합니다. 이 컨테이너는 웹 서버 환경에서 서블릿 스레드를 관리하고 로깅 처리를 한다던가 메모리 관리를 한다던가 하는 일체의 관리 포인트를 처리해주는 유용한 애플리케이션입니다. 가장 대표적인 웹 컨테이너는 톰캣이 되겠습니다 ^^

*Apache Tomcat 이라는 이름을 잠시 파헤쳐 보면 Apache는 HTTP 웹 서버 이고 Tomcat은 웹 컨테이너 입니다. 두가지가 합쳐져 있어서 이름이 Apache Tomcat인것이죠..

컨테이너의 기능 :
1. 서블릿과 웹 서버가 서로 통신 할 수 있는 방법을 제공한다.
2. 서블릿의 탄생과 죽음을 관리한다.
3. 여러 요청에 대응할 수 있는 멀티스레딩을 지원한다.
4. Deploy Description 을 통한 선언적인 보안 관리가 가능하다.
5. JSP를 지원한다.

컨테이너의 요청 처리 과정 :
사용자의 요청이 들어온다.
-> 1. 들어온 요청이 서블릿으로의 요청인지를 감지하고 HttpServletRequest 와 HttpServletResponse 객체를 생성한다.
-> 2. 요청한 URL를 분석하여 어느 서블릿에 해당되는지를 확인한후 Request, Response 객체를 포함하여 서블릿에 전달한다.
-> 3. 컨테이너는 서블릿의 service() 메소드를 호출한다.
-> 4. 서블릿은 doGet() 또는 doPost() 메소드를 호출할지 결정한다.
-> 5. doGet() 또는 doPost() 메소드를 통해서 동적인 페이지를 생성후에 reponse 객체에 실어 컨테이너로 보낸다.
-> 6. 컨테이너는 Response 객체를 HttpResponse 객체로 전환하여 클라이언트에 전달한다. 이후 생성되었던 Response, Request 객체와 서블릿을 소멸시킨다.


컨테이너가 서블릿을 찾아가는 방법 :
1. 클라이언트가 아는 URL 정보로 찾아간다.
2. DD를 보고 찾아간다.
3. 실제 파일명 .class 파일을 가지고 찾아간다.

*실제로 서블릿 이름을 직접적인 경로가 아닌 다른 이름으로 하는것이 보안, 유연성이 높아진다.