서블릿 프로그래밍 - 1 :: 너 서블릿(Servlet) 알고 사용하니 :: CGI 프로그램과 서블릿
우리는 웹 애플리케이션을 구현하면서 서블릿(Servlet)을 항상 사용했었습니다. 근데 서블릿이 어디 즈음에서 무슨 역할을 하고 있는지 아시나요? 자바에서는 웹 브라우저와 웹 서버를 활용하여 좀 더 쉽게 서버 애플리케이션을 개발할 수 있도록 서블릿(Servlet)을 제공하고 있습니다.
🤷♂️ : 아니 스프링부트에서 그냥 @Controller에 @GetMapping이런 어노테이션 사용하면 서블릿 사용되는거 아닌가요
그러지 말아줘..
이번 포스팅을 HttpServlet 이전에 제일 기본적인 Servlet에 대해서 알아보겠습니다 !
(HttpServlet은 다음 포스팅에 …)
2. 먼저 CGI 라는게 뭔데 ??
Command…아닙니다..
CGI는 Common 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 프로토콜을 어떻게 준수할 수 있는지 알 수 있습니다.
'스터디 모음 > Spring 스터디' 카테고리의 다른 글
[Spring MVC] 기초 요약 정리 (1) | 2022.09.10 |
---|---|
[Spring JPA Basic] 스프링 JPA 기초 간단 요약 (1) | 2022.09.07 |
서블릿 프로그래밍 - 2 / 서블릿 인터페이스를 구현해보자 ! / Servlet / GenericServlet (0) | 2022.07.02 |
댓글