gpffh1011

[자바 상식] CGI와 서블릿 그리고 톰캣 본문

자바/관련상식

[자바 상식] CGI와 서블릿 그리고 톰캣

gpffh1011 2020. 5. 14. 00:27

1. CGI란 무엇인가


CGI란 공통 게이트웨이 인터페이스(common gateway interface)의 약어로, 웹서버와 외부 프로그램 사이에서 정보를 주고받는 방법이나 규약들을 말한다.

그렇다면 여기에서는 CGI에 대하여 조금 쉽게 설명한 후에 그 개념에 대하여 더 자세하게 알아보도록 하겠다.

CGI란 사용자의 요청의 의한 서버의 응답이라고 할 수 있다. 예를 들어 방명록이나 게시판등이 대표적이라고 할 수 있는 것이다. CGI를 가능하게 하기 위해서는 사용자의 입력을 받아들이는 html문서와 입력을 처리하기 위한 CGI프로그램이 필요하다. CGI는 응용프로그램이기 때문에 html로는 만들 수 없고 웹서버의 환경의 따라 다르게 구현되는데 주로 C, Perl, Visual Basic 등이 사용되고 있다.

특히 요새는 PHP, ASP가 발전함에 따라. 많은 분들이. 혼동을 하고 있는 것 같다. 즉. CGI가 우리가 보통 생각하는 무료 계정에 포함된 Perl로 구현된 것으로 오해하고 있다.

그렇다면 PHP / ASP 는 무엇이고 CGI는 또 무엇일까? 대답은 PHP / ASP 는 CGI를 만들기 위한 한가지 도구이며 한가지 스크립팅 언어일 뿐이다. 예를 PHP로 들어서 설명한다면 PHP와 PERL은 수평관계라고 할 수있다. PHP도 언어고 PERL도 언어이다. PHP와 CGI는 상하관계이다. PHP는 언어지만 CGI는 규약, 동작 원리이다.

그렇다면 PHP는 CGI다, 라는 말이 무엇을 의미하는 것일까? 그것은 PHP로 만들어진 결과물은 CGI의 역할을 한다는 의미이다. 즉 결론은 PHP / ASP 도 CGI라고 할 수 있다.

CGI는 외부 프로그램을 실행하는 표준 방식으로 자리잡았으며 사용이 편리하다는 장점이 있지만, 서버에서 많은 프로그램을 수행하므로 서버에 무리를 준다는 단점을 지니고 있다

☆CGI 의 개념

CGI(Common Gate Interface)란 서버와 외부 스크립트 또는 프로그램과 상호작용할 때 이루어지는 입출력을 정의한 표준이며, 이 표준에 맞추어 만들어진 것이 CGI 스크립트 또는 CGI 프로그램며 CGI 프로그램은 어떤 프로그래밍 언어로도 만들 수 있다.

쉽게 설명하자면 두 개 이상의 컴퓨터간의 자료들을 주고받는 프로그램 또는 주고받는 것 자체를 의미한다고 할 수 있다. 웹페이지는 HTML언어에 의해서 기본적으로 만들어진다. 하지만 HTML만으로 모든 정보를 다 처리할 수는 없다. 왜냐하면 HTML언어는 서버로부터 HTML문서를 보여주는 역할만 할 뿐이기 때문이다. 따라서 홈페이지를 양방향으로 할 필요성이 있는 것이다. 이를 위하여 여러 방법을 고안해 내고 있는 것인데 그 중 하나가 외부 프로그램을 수행하여 그 결과를 HTML형태로 보여주는 방식인데 이것을 CGI라고 하는 것이다. 넓은 의미로는 CGI를 수행하는 프로그램을 CGI라고 하기도 한다. 그 대표적인 예가 방명록, 게시판, 메모장 등이다



오늘은 Spring프로젝트를 진행하면서 막혔던 Servlet(서블릿)에 대해 공부해보고자 합니다.

처음으로 웹서버 분야를 공부하는데, 역시나 망나니개발자에게 보이는 것들은 처음보는 것들 뿐 입니다 ㅎㅎ;

Spring에서 dispatcher-servlet이라는 것을 설정해 주어야 하는데 servlet도 모르기에 막막함을 느끼고 서블릿 관련

내용들에 대하여 포스팅을 결심하게 되었습니다. 저도 잘 모르는 만큼 자세히 알아보도록 하겠습니다!

 

 

2. 서블릿이란 무엇인가

 

서블릿을 한줄로 정의하자면 아래와 같이 정의할 수 있습니다.

       웹프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

 

간단히 말해서, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술입니다. 그런데 좀더 들어가서 설명하자면 

클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다. 

예를 들어, 어떠한 사용자가 로그인을 하려고 할 때. 사용자는 아이디와 비밀번호를 입력하고, 로그인 버튼을 누릅니다. 

그때 서버는 클라이언트의 아이디와 비밀번호를 확인하고, 다음 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는 

것이 바로 서블릿(Servlet)입니다. 그래서 서블릿은 자바로 구현 된 *CGI라고 흔히 말합니다.

 

[ Servlet 특징 ]

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트

  • html을 사용하여 요청에 응답한다.

  • Java Thread를 이용하여 동작한다.

  • MVC 패턴에서 Controller로 이용된다.

  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. UDP보다 속도가 느리다.

  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.

일반적으로 웹서버는 정적인 페이지만을 제공합니다. 그렇기에 동적인 페이지를 제공하기 위해서 웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 합니다. 동적인 페이지는 임의의 이미지만을 보여주는 페이지와 같이 사용자가 요청한 시점에 페이지를 생성해서 전달해 주는 것을 의미합니다. 여기서 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 어플리케이션이 CGI입니다. 

 

 

[ Servlet 동작 방식 ]

 

 

 

  1. 사용자(클라이언트)가 URL을 클릭하면 HTTP Request를 Servlet Container로 전송합니다.
  2. HTTP Request를 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성합니다.
  3. web.xml은 사용자가 요청한 URL을 분석하여 어느 서블릿에 대해 요청을 한 것인지 찾습니다.
  4. 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 POST, GET여부에 따라 doGet() 또는 doPost()를 호출합니다.
  5. doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
  6. 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.

 

 

 

 

 

Q) CGI(Common Gateway Interface)란?

 

CGI는 특별한 라이브러리나 도구를 의미하는 것이 아니고, 별도로 제작된 웹서버와 프로그램간의 교환방식입니다. CGI방식은 어떠한 프로그래밍언어로도 구현이가능하며, 별도로 만들어 놓은 프로그램에 HTML의 Get or Post 방법으로 클라이언트의 데이터를 환경변수로 전달하고, 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것입니다.

즉, 자바 어플리케이션 코딩을 하듯 웹 브라우저용 출력 화면을 만드는 방법입니다.

 

 

Q) HTTP 프로토콜을 이용한 서버와 클라이언트의 통신 과정은?

 

클라이언트는 정보를 얻기 위해 서버로 HTTP 요청 메세지+매개변수를 전송하고, 서버는 이를 해석하여 정적 자원에 대한 요청일 경우 자원을 반환해주고, 그렇지 않은 경우 CGI 프로그램을 실행시켜 해당 결과를 리턴해줍니다. 이때 서버는 CGI 프로그램에게 클라이언트의 요청과 매개변수를 전달해주고, 결과를 전달받기 위한 파이프라인을 연결합니다. 그래서 CGI 프로그램은 입력에 대한 서비스를 수행하고, 결과를 클라이언트에게 전달하기 위해 결과 페이지에 해당하는 MIME 타입의 컨텐츠데이터를 웹 서버와 연결된 파이프라인에 출력하여 서버에 전달합니다. 서버는 파이프라인을 통해 CGI 프로그램에서 

출력한 결과 페이지의 데이터를 읽어, HTTP 응답헤더를 생성하여 데이터를 함께 반환해준다.

 

 

 

 

3. 톰캣이란 무엇인가

톰캣(Tomcat) 이란 Java Servlet을 실행하고 JSP 가 포함된 웹 페이지를 렌더링하는 Apache Software Foundation의 응용 프로그램 서버입니다. 톰캣(Tomcat)은 웹 서버와 연동하여 실행할 수 있는 자바 환경을 제공하여 자바 서버 페이지(JSP)와 자바 서블릿이 실행할 수 있는 환경을 제공하고 있습니다. 톰캣은 관리툴을 통해 설정을 변경할 수 있지만, XML 파일을 편집하여 설정할 수도 있습니다. 그리고, 톰캣은 HTTP 서버도 자체 내장하기도 합니다.


< 추가 설명 >

 - Tomcat은Apachesoftware 재단에서 만든 JAVA Servlet & JSP 기술 구현을 위한 Open Source 입니다.

 - Tomcat 은 WAS(Web Application Server)과에 속한다

 

 

Was를 쓰는 이유??

 - 일반적인 html이나 사진, 플래시 같은 정적인 컨텐츠 등은 WebServer만 있어도 무방하지만 스크립트를 통해 동적인 페이지를 생성하게 해주고

   태그 라이브러리 등을 개발 할 수 있는 등 여러모로 활용도가 높은 JSP 나 ASP, PHP같은 서버 스크립트가 등장하게 되었는데 그런 스크립트를 

   처리 할 수 있는  WAS라는 제품을 사용한다.   

 

# 기타정보

통상적으로 웹서버와 웹어플리케이션 서버가 있다.

웹서버 - HTML 이나 사진 같은 정적인 컨텐츠를 주로 처리함

웹어플리케이션 서버(WAS) - 동적인 페이지를 처리하는데 필요하다.

 

JSP 와 서블릿

JSP 와 서블릿의 차이점은 결과적으로 하는일은 동일하지만 

JSP 는 HTML 내부에 JAVA 소스코드가 들어감으로 인해 HTML 코드를 작성하기 간편하다는 장점이있으며

서블릿은 자바코드내에 HTML 코드가 있어서 읽고 쓰기가 굉장히 불편하기 때문에 작업의 효율성이 떨어진다.

 

하지만 웹을 공부할때 JSP 와 서블릿은 함께 배운다 그건 왜 때문일까..

JSP 로 작성된 프로그램은 서버로 요청시 서블릿(Servlet) 파일로 변환되어 JSP 태그를  분해하고 추출하여 다시 순수한 HTML 를 변환한다.

쓰면서도 나자신도 헷갈리기에 외국 사이트에서 이미지를 찾아왔다.



출처: https://javacpro.tistory.com/43 [버물리의 IT공부]