스터디 모음/Spring 스터디

[Servlet] 서블릿 프로그래밍 - 1 - 너 서블릿(Servlet) 알고 사용하니 - CGI 프로그램 (Common Gateway Interface) 과 서블릿

always-dev 2022. 7. 2.
반응형

서블릿 프로그래밍 - 1 :: 너 서블릿(Servlet) 알고 사용하니 :: CGI 프로그램과 서블릿


우리는 웹 애플리케이션을 구현하면서 서블릿(Servlet)을 항상 사용했었습니다. 근데 서블릿이 어디 즈음에서 무슨 역할을 하고 있는지 아시나요? 자바에서는 웹 브라우저와 웹 서버를 활용하여 좀 더 쉽게 서버 애플리케이션을 개발할 수 있도록 서블릿(Servlet)을 제공하고 있습니다.

 🤷‍♂️ : 아니 스프링부트에서 그냥 @Controller에 @GetMapping이런 어노테이션 사용하면 서블릿 사용되는거 아닌가요

 

 

 

 

 

 

 

 

그러지 말아줘..

 

 

 

 

 

 

 

 

 

 

 

이번 포스팅을 HttpServlet 이전에 제일 기본적인 Servlet에 대해서 알아보겠습니다 !

(HttpServlet은 다음 포스팅에 …)

 

 

 

2. 먼저 CGI 라는게 뭔데 ??

Command…아닙니다..

CGICommon Gateway Interface로 ‘웹 서버’와 ‘웹 애플리케이션(프로그램)’ 사이에 데이터를 주고받는 규칙을 의미합니다 !

먼저 이 CGI라는 규칙이 어디서 필요한지 알기 위해 ‘웹 애플리케이션 작동 순서'에 대해서 알아야합니다.

 

 

2-1. 웹 애플리케이션 작동 순서

먼저 ‘웹 애플리케이션(Web Application)’은 사용자가 웹 서버를 통해 간접적으로 실행시키는 프로그램을 의미합니다.

 

웹 브라우저 → 웹 서버 → 웹 애플리케이션

사용자는 ‘웹 브라우저’를 실행 시키면 ‘웹 브라우저’가 ‘웹 서버’에게 ‘웹 애플리케이션'이라는 프로그램 실행을 요청합니다.

웹 브라우저 ← 웹 서버 ← 웹 애플리케이션

그리고 ‘요청된 프로그램'이 실행되고 작업을 수행한 후 그 ‘결과'를 ‘웹 서버'에게 보내줍니다.

 

 

 

그림으로 표현한다면 아래와 같습니다.

 

 

🤷‍♂️ : 근데 웹 애플리케이션에서 나온 결과를 그냥 그대로 웹 서버에 넘겨주고 웹 브라우저에 넘겨주면 안돼요 ?

 

당연히 안괜찮죠.. 저희는 HTTP 프로토콜을 준수하기 때문에 그 형식에 맞춰서 보내줘야 합니다.

이 때 형식을 맞추는 규칙을 CGI 규칙이라고 합니다.

 

 

 

 

2-2. CGI 규칙 :: Common Gateway Interface

웹 애플리케이션에서 작업을 수행하고 결과를 웹 서버에게 보내주게 되는데

이 때의 결과를 ‘웹 서버’는 당연히 HTTP 형식에 맞추어 ‘웹 브라우저'에게 전달합니다.

그 형식을 맞추는데 어떠한 규칙이 필요하고 그 규칙에 따라서

웹 서버와 데이터를 주고 받을 수 있도록 작성된 프로그램을 CGI (Common Gateway Interface) 프로그램이라고 합니다.

 

 

 

CGI의 위치는 다음과 같습니다.

 

 

 

 

3. 서블릿(Servlet)이 있으면 편하다는데 왜 ??

 

🤷‍♂️ : 아니 그래서 결국 Servlet이 뭐라는 건데요 ? 편하다고만 하고..

 

 

 

CGI 프로그램은 C, C++, Java 같은 컴파일 언어로도 python, php 같은 스크립트 언어로도 작성할 수 있습니다.

혹시 기억나시나요..?

자바 언어로 개발했다면 이후 변경사항이 발생하면 다시 컴파일하고 다시 재배포 했었습니다.

번거롭기는 해도 컴파일 방식은 기계어로 번역된 코드를 바로 실행해서 스크립트 보다는 더 빠르긴 했죠.

 

 

컴파일 방식은 아래 그림과 같습니다.

🤷‍♂️ 아니 서블릿에 대해서 설명해달라고요..

 

이유가 있다고 !!!!!!!!!!!!!!!!!!!!!!

 

자바로 만든 CGI 프로그램을 서블릿(Servlet)이라고 부르고 있습니다.

하지만 자바 서블릿이 다른 CGI 프로그램과 다른 점은,

웹 서버와 직접 데이터를 주고받지 않으며

자바 서블릿(Java Servlet)은 ‘전문 프로그램'에 의해 관리되고 있습니다.

 

 

3-1. 그래서 서블릿이란 결국

자바 서블릿은

CGI 규칙에 따라서 웹 서버와 데이터를 주고 받을 수 있도록 작성된 CGI 프로그램인데

서블릿 컨테이너가 서블릿의 생명주기를 관리해주면서

다른 CGI 프로그램과 다르게 웹 서버와 서블릿(프로그램)이 직접 데이터를 주고받지 않는 특징이 있습니다.

 

 

그러면 자바 서블릿을 관리해주는 ‘전문 프로그램'은 뭘까요?

 

 

 

 

3-2. 서블릿 컨테이너(Servlet Container) :: 자바 서블릿을 관리해주는 전문 프로그램

서블릿은 생성, 실행, 소멸 등 생명주기를 가지고 있습니다.

이러한 생명주기를 관리해주는 프로그램을 ‘서블릿 컨테이너(Servlet Container)’라고 합니다.

 

 🤷‍♂️ : 그럼 서블릿 컨테이너는 서블릿을 관리하고
서블릿은 CGI 프로그램이며
다른 CGI 프로그램과 다른 점이 있다면 웹 서버와 데이터를 직접 주고 받지 않는다는 건가요?

 

 

👏 맞습니다 맞아요

 

때문에 서블릿은 아래 그림과 같습니다.

 

이제 저희는 더 이상 CGI 규칙에 대해 알 필요가 없습니다.

서블릿 컨테이너가 서블릿을 대신하여 CGI 규칙에 따라 웹서버와 데이터를 주고받기 때문입니다 !!

대신에 저희는 서블릿 컨테이너 - 서블릿 사이의 규칙을 알아야 합니다.

 

자바 웹 애플리케이션 개발자는 Java EE 기술 사양에 포함된 Servlet 규칙에 따라 CGI 프로그램을 만들고 배포하곤 합니다.

(* 스프링 ≠ Java EE, 둘은 다른 관계이다.)

 

🤷‍♂️ Java EE..?

 

Java EE는 Java Platform, Enterprise Edi-tion으로

애플리케이션 개발에 필요한 여러가지 복합적인 기술들을 정의하고 모아 놓은 것을 의미합니다.

아래 링크로 들어가면 Java EE가 어떤 기술들을 모아두었는지 알 수 있습니다.

 

Java Platform, Enterprise Edition (Java EE) | Oracle Technology Network | Oracle 대한민국

 

정리

서블릿이 왜 등장했는지 알 수 있습니다.

서블릿 컨테이너가 왜 있는지 알 수 있습니다.

HTTP 프로토콜을 어떻게 준수할 수 있는지 알 수 있습니다.

 

반응형

댓글