본문 바로가기
IT관련/정리

CGI와 서블릿 그리고 톰캣

by XoX 2020. 5. 13.
728x90
개인적인 메모를 위해 작성된 글이므로 가벼운 참고용으로 봐주세요.

 

CGI, 서블릿, 톰캣을 탄생 배경

처음 웹이 등장하고 활성화 되지 않았을때는 정적인 데이터(HTML,XML,이미지 등)를 전달하는 것 만으로도 충분했다.

그러나 웹이 발달하면서 이제 사용자의 입력을 받아

이를 처리하고 그 결과를 다시 화면에 보여주는 동적인 페이지가 필요하게 되었다.

기존의 웹서버는 정적인 페이지를 보여주는용으로 만들었기 때문에

사용자의 요청을 받아 정보를 동적으로 생성하고 이를 다시 클라이언트로 보내주는 것이 불가능 했다.

따라서 서버에서 동적 페이지를 만들어줄 다른 프로그램을 불러내고 그 프로그램의 처리결과를

클라이언트에게 보내줄수 있는 인터페이스가 필요했고 이로인해 CGI, 서블릿, 톰캣이 등장하게 됐다.

 

 

출처: https://opentutorials.org/course/3256/19819

 

웹브라우저, 웹서버, CGI애플리케이션이 구동되는 과정

1. 웹 브라우저에서 주소를 입력하면 그 주소에 해당하는 웹서버에 접속하게 된다.

2. 사용자는 HTTP프로토콜로 웹서버에 어떤 요청을 한다.

4. 웹서버는 그 요청에 답해줄 애플리케이션(파이썬, PHP, 자바, 루비로 만들어진 CGI애플리케이션)을 호출한다.

5. CGI애플리케이션은 코드에 따라서 사용자가 요청한 정보를 특정 디렉토리에서 찾아 웹서버에게 준다.

6. 출력된 결과를 웹서버가 웹브라우저에게 요청에 대한 답으로 돌려준다. 

 

 

 

 

 

CGI (Common Gateway Interface, 공용 게이트웨이 인터페이스) ?

웹서버와 웹애플리케이션이 데이터를 주고 받을 때

CGI라는 표준을 만들어서 약속한 규약대로 상호작용하도록 정해놓음.

 

 

왜 이런 약속을 만들게 되었을까?

 

CGI가 교류하고 있는 웹서버는 아파치, 톰캣과 같은 여러가지 웹서버가 있다.

그리고 CGI어플리케이션을 만들 수 있는 파이썬, PHP, 자바, 루비 등 여러 언어들이 존재한다.

이런 복잡성을 속에서 웹서버와 어플리케이션이 상호간에 쉽게 교류하기 위해서는 약속이 필요했다.

 

 

CGI프로그램의 실행 유형

 

컴파일 방식

프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법

기계어만들어진 CGI애플리케이션은 .exe라서 웹서버가 요청을 받아 바로 실행가능하다.

 

인터프리터방식

인터프리터 방식은 기계어가 아니다.

.php .pl .asp .py 같이 프로그램 소스로 존재하는 스크립트를 웹서버에서는 직접 실행할 수 없다.

그래서 스크립트엔진(중간에서 스크립트의 실행에 도움을 줌)이 있다. 이것이 인터프리터다.

 즉 웹서버는 스크립트 엔진을 실행하고 스크립트엔진이 해당 스크립트를 파싱(해석)하여 실행을 완료하고

실행결과를 웹서버에 전달해주는 방식이다.

 

 

 

자바웹 애플리케이션은 둘 중 어떤 방식?

자바프로그램은 .class 라는 확장자를 갖는 바이트코드이다.

웹서버는 바이트코드를 바로 실행할 수 없다. 그래서 이를 실행할 JVM을 이용한다.

그러나 사실상 JVM은 CGI프로그램은 아니다.

JVM은 CGI약속을 이행하고 있지 않다. 그래서 이를 보완하기위한 자바프로그램 관리 서버가 있다.

 JVM은 자바프로그램관리서버를 실행하고 있는 상태에서

웹서버가 클라이언트로 부터 요청을 받으면 그 요청을 자바 관리 서버에 보내고,

자바관리서버는 해당 바이트코드를 실행한다. 바로 그 자바관리서버가 서블릿컨테이너라고 한다.

위에서는 엔진이라 부르는 것을 자바에서는 컨테이너라고 한다.

 

서블릿 객체를 생성하고 실행하고 소멸하는 서블릿의 라이프 사이클을 관리하는 소프트웨어 = 서블릿 컨테이너

서블릿 콘테이너에는 Tomcat , Jetty, JEUS, WebLogic, WebSphere, JBoss 등이 있다.

이런 소프트웨어를 다른 말로 웹 애플리케이션 서버 = WAS라고 한다.

 

 

사용자가 동적인 문서를 요청을 하면,

요구에 맞는 정보를 만들어내기 위한 코드가 실행되도록 하는 프로그램인 Sever App이 있고,

이 코드를 실행시켜주는 환경이 Web Sever이며

이 코드를 실행해주는 것은 WAS(웹 어플리케이션 서버)와 Servlet(웹 서버 응용프로그램)이 있다.

Server Application Let(조각)를 줄여 Servlet이라고 한다.

 

 

 

톰캣 ?

우리가 사용하는 웹서버에는 아파치와 톰캣이 있다.

톰캣은 아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너만 있는 웹 애플리케이션 서버이다.

톰캣은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여

자바서버 페이지와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있다.

 

아파치는 정적웹페이지에 사용된다.

반명 톰캣은 동적인 데이터 처리가 가능하다.

위에서 설명한 WAS가 톰캣이다.

아파치는 처리속도가 빠르고 트래픽 과부하게 강하며 구조가 단순해 비용이 싸다.

그러나 정적인 데이터 처리만 가능하여 다른 서비스와 상호작용을 할 수 없다.

반면 톰캣은 동적인 웹페이지를 사용할 수 있으나 아파치에 비해 속도가 느리며

트래픽 과부하게 약하고 부가적 비용이 발생할 수 있다는 단점이 있다.

 

 

 

 

 

출처 : https://www.youtube.com/watch?v=wdPAvUuyu8A

https://opentutorials.org/course/3256/19819

https://m.blog.naver.com/PostView.nhn?blogId=goddlaek&logNo=220901890910&proxyReferer=https:%2F%2Fwww.google.com%2F%EF%BB%BF

https://wodonggun.github.io/wodonggun.github.io/study/%EC%95%84%ED%8C%8C%EC%B9%98-%ED%86%B0%EC%BA%A3-%EC%B0%A8%EC%9D%B4.html

 

 

728x90
반응형

댓글