CGI, Servlet, JSP

굿거리·2023년 4월 13일
0

시작에 앞서 정적 페이지와 동적 페이지에 대해 알아볼 필요가 있다.

  • 정적 페이지(static page)
    서버에 미리 저장된 그 자체로 완성된 페이지이다. 관리자가 특별히 페이지를 수정하거나 하지 않는 한 클라이언트는 늘 동일한 Request에 따른 동일한 Response를 받는다. 보통 정보를 전달하거나, 특별히 바뀌지 않는 내용을 다루는 사이트에서 찾아볼 수 있다.

  • 동적 페이지(dynamic page)
    클라이언트가 요청하는 시간, 혹은 데이터베이스의 상태에 따라 유동적으로 그 내용이 변하는 페이지이다. 관리자가 내용을 수정하지 않아도 데이터베이스의 내용에 따라 변할 수 있다. 요즘 볼 수 있는 대부분의 페이지는 동적 페이지에 해당한다.

웹이 처음 등장했을 당시에는 문자, 이미지 등을 송수신할 수 있다는 점만으로 충분했다. 따라서 정적인 데이터를 돌려주는 역할만 할 수 있으면 문제가 없었다. 하지만 웹을 다양한 용도로 쓰게 되면서, 정적인 응답을 수 십, 수 백, 수 천개를 별도로 만들 수 없게 되었기에 동적인 페이지를 만들어낼 수 있는 수단이 필요했다.

CGI (Common Gateway Interface)

이를 처음으로 해결하기 위해 나온 것이 바로 CGI이다. CGI는 Common Gateway Interface의 약자로 사용자의 요청을 토대로 표준출력을 응답으로 내보낸다. 기존의 웹서버는 정적인 페이지만을 다루기 위해 만들어졌으므로 동적인 페이지를 다루는 데에는 한계가 있었는데, 여기에 CGI 구현체를 연결해 해당 요청에 대응되는 응답을 내놓는 것이다.

하지만 이 CGI에도 한계가 있었으니, 바로 속도이다. 각 요청마다 프로세스가 하나씩 진행되는 형식이다보니 개별 속도가 아무리 빠르다고 하더라도 직렬적으로 처리하다보면 아무래도 시간이 많이 걸릴 수밖에 없다. 이를 해결하기 위해 나온 것 중 하나가 바로 servlet이다.

Servlet

어떠한 프로그램의 장점이나 기능이 궁금할 때는 항상 그 전에 무엇이 있었는지, 이게 왜 나왔는지의 배경 등을 참고하면 좋다. Servlet의 경우는 CGI와 그 기능은 유사하나, 속도를 개선하기 위해 등장했다. CGI처럼 요청마다 프로세스를 진행하는 것이 아니라, 프로세스 내에 스레드 풀을 만들어 멀티스레드 형식으로 이를 해결한다. 여러개의 스레드를 통해 동시에 진행하여 많은 요청을 좀 더 발빠르게 해결할 수 있다.

[servlet의 특징]

  • servlet은 기본적으로 자바 클래스 파일이고, HttpServlet이라는 추상 클래스를 상속받아 작성한다.
  • servlet의 리턴은 HTML이기에 자바 파일 내에 HTML 태그를 만들어내는 방식으로 동적 페이지를 생성해낸다.

Servlet Container

서블릿은 개발자들이 직접 작성하는 하나의 Java Class지만, 이를 개발자들이 직접 실행시키지는 않는다. Servlet Container라는 것이 생성과 실행, 파괴를 통해 수많은 서블릿들을 직접 관리한다. Servlet 내부의 init(), service(), destroy() 메서드를 이용하여 직접 컨트롤한다. 서블릿은 기본적으로 하나의 인스턴스만을 사용하는 싱글톤(Singleton) 패턴으로 이루어진다.

  • init()
    서블릿이 메모리에 올라가게 될 때 한 번만 실행되는 메서드이다.

  • service()
    클라이언트의 요청 형식에 따라 doGet(), doPost() 메서드를 호출한다.

  • destroy()
    요청이 처리된 이후에 호출하고, 가비지 컬렉션을 이용해 삭제한다.

이것을 서블릿 컨테이너가 "서블릿의 생명주기(Life Cycle)를 관리한다" 라고 한다. 개발자가 관리하는 것이 아닌 서블릿 컨테이너가 주도하여 관리하는 것이기 때문에 이를 제어의 역전, 즉 IOC(Inversion of Control)라고 한다. 후에 Spring에서도 나타나는 특징이다.


하지만 이런 서블릿의 방식도 자바 파일 내에 HTML 태그를 문자열 형식으로 작성해야 했기에 가독성도 떨어질뿐더러 개발자들로 하여금 작업에 불편함을 야기했다. 이에 등장한 것이 JSP이다.

JSP (Java Server Page)

JSP는 자바 내부의 HTML 형식을 이용하는 Servlet과 반대로 HTML 내부에 스크립트 코드를 통해 자바 코드를 삽입하는 Servlet 기반의 스크립트 기술이다. 따라서 JSP 파일을 실행하면 Servlet 형태로 컴파일 된 뒤 실행된다.

  • jsp 실행 흐름

.jsp 실행 -> .java 형식의 servlet으로 컴파일 -> .class로 컴파일 -> 컨테이너 적재


어떠한 방식이든 완벽한 방식은 없기에, servlet을 보완하기 위해 나온 jsp이지만 결국 view에 jsp와 java 코드를 전부 넣는 방식으로 진행되던 model1 형태도 jsp와 servlet을 병용하는 model - view(jsp) - controller(servlet) 형태인 model2(mvc) 패턴으로 발전하게 되었다.

profile
개발자를 향해

0개의 댓글