본문 바로가기

책 정리

CGI, Servlet의 등장 MVC 패턴의 탄생

초기의 웹 프로그래밍은 웹 서버만 존재했었습니다. 웹 서버는 미리 준비된 정보를 클라이언트의 요구에 응답해 보내는 역할을 수행합니다.  사용자의 요청이 들어와도 웹 서버에서 모두 같은 정적인 *.html 파일만 조회가 되었습니다. 이런 불편한점을 개선시키기 위해 서버 프로그램에서 다른 프로그램을 불러내고, 그 처리 결과를 클라이언트에 송신하는 방법이 고안되었는데, 이를 실현 하기 위한 프로그램 연계 방법을 정한 CGI(Common Gateway Interface)가 등장했습니다.

 

CGI (Common Gateway Interface)

공용 게이트웨이 인터페이스로 서버 프로그램과 외부 프로그램과의 연계법을 정한 표준 인터페이스

CGI는 웹 서버 상에서 사용자 프로그램을 동작시키기 위해 서버 프로그램에서 다른 프로그램을 호출하고, 처리된 결과를 클라이언트에게 송신하는 방법입니다.

 

요청이 웹 서버로 전달되면 웹 서버는 주소가 CGI프로그램(CGI를 구현한 구현체, C, 펄 등 사용)에 대응되는지 확인하고 호출하여 처리된 결과를 클라이언트에게 전달함으로 동적인 처리가 가능해졌습니다.

 

초창기 CGI는 request가 들어올때마다 프로세스를 생성(멀티프로세스 방식)하고, 각 요청마다 구현체가 생기는 문제점이 존재했습니다. (프로세스:  메모리에 적재된 실행중인 프로그램 인스턴스, 메모리를 통으로 가짐, 자원을 상당히 많이 차지)

위의 문제를 개선하기 위해 멀티스레드 방식으로 변경하고 싱글톤 패턴을 적용한 자바의 Servlet이 등장하게 되었습니다.

 

Servlet/JSP

Servlet

서버에서 동적으로 요청과 응답을 처리할 수 있는 API들을 정의한 자바 프로그래밍 기술

서블릿이란 웹서버 프로그래밍을 위해 만들어진 자바 프로그램 혹은 코드 라고 할 수 있습니다.

위에서 CGI의 멀티프로세스 방식을 멀티스레드 방식으로 확장한 것이 서블릿이라고 하였습니다. CGI가 요청을 받아 처리한 결과를 응답해주는 역할을 하는 것처럼 서블릿도 동일한 역할을 수행합니다. CGI와 마찬가지로 서블릿도 Interface(표준) 이므로 구현체가 따로 존재합니다. Spring MVC는 웹 어플리케이션을 만드는데 특화된 서블릿 구현체입니다.

JSP

JSP는 ‘Java Server Pages’의 약자로 서블럿 기술과 동일하게 서버에서 동적으로 데이터를 구성는 기술입니다.

JSP는 서블릿 기술과 같은 목적이지만, 브라우저에 보내는 HTML 데이터를 만들어내는 데 좀 더 특화된 기술입니다.

 

JSP 코드는 자바 코드가 아님에도 서블릿과 동일하게 처리되는데 이것은 사실 JSP 파일도 서블릿 코드로 번환되어서 컴파일되고 실헹되기 때문입니다. JSP 파일은 필요한 순간 에 자바 파일로 생성되고, 이를 컴파일해서 class 파일로도 만들어 집니다.

 

servlet : 자바 코드안에 HTML 코드를 추가하는 방식

jsp: HTML 코드를 그대로 이용하고 필요할때 약간의 자바 코드 추가하는 방식

 

 

Web MVC

웹 MVC 방식의 탄생

초창기의 Model 1 방식을 사용하면, JSP는 기본적으로 GET/POST 방식의 호출을 구분하지 않기 때문에 POST 방식으로 접근해야 하는 *.jsp를 GET 방식으로도 얼마든지 호출할 수 있다는 문제가 있었습니다. 이런 경우 jsp 내에서 형변환과 같은 연산을 처리시에 500 에러가 뜨게 됬습니다.

 

또한, 유지 보수 측면에서도 문제가 발생하는데, *.jsp의 파일명을 변경했을 경우 과거의 jsp만 말고 있는 사용자들에게 다시 주소가 변경되었다는 점을 알려주어야 하는 작업이 발생하게 됩니다.

 

이러한 이유로 최근에 JSP는 다음가 같이 제한적인 용도로 사용하게 되었습니다.

● JSP에서 쿼리 스트링이나 파라미터를 처리하지 않는다. - JSP 대신에 서블릿을 통해서 처리

● JSP는 입력 화면을 구성하거나 처리 결과를 보여주는 용도로만 사용

● 브라우저는 직접 JSP 경로를 호출하지 않고 서블리 경로를 통해서 JSP를 보는 방식으로 사용

 

이러한 문제를 해결하기 위해서 등장한 방식이 Model 2인 ‘웹 MVC’ 방식으로 JSP는 걸과만 출력하고, 처리는 서블릿을 이용하는 방식으로 변화합니다.

웹 MVC의 개선사항

웹 MVC 구조를 이용하면 좀 더 확실하게 책임과 역할을 구분해서 작업을 진행할 수 있는 장점도 존재하지만 여러 개의 코드를 만들어야 하는 단점도 분명 존재합니다.

 

다음과 같은 사항들이 개선사항입니다.

- 여러 개의 컨트롤러를 작성하는 번거로움

- 동일한 로직의 반복적인 사용

- 예외 처리의 부재

- 반복적인 메소드 호출

- 자바의 객체지향 기법을 이용하면 좀 더 간결한 코드 작성 가능

 

이러한 고민의 결과는 나중에 프레임워크의 형태로 이어지게 됩니다.