정적 웹 페이지 : 미리 만들어진 웹 페이지를 단순히 요청에 따라 반환
하지만 단점은 1000명의 유저 정보 페이지를 1000개의 웹 페이지로 가지고 있어야 한다...
그래서 방법을 고안하게 된다.
동적 웹 페이지 : 이미 만들어진 것을 반환하는게 아니라, 요청에 따라 웹 페이지를 만드는 것
어플리케이션은 함수와 동일하다고 생각하면된다. 쉬운 예를 들면 계산기도 어플리케이션
- 동적 웹 페이지를 만드는 주체는 어플리케이션
CGI 초기 = 1 요청 : 1 비상주 프로세스
매번 요청에 따라 프로세스가 실행되고 웹 페이지 만들고 반환하고 죽는다
Stateless 비상태성 : 매 요청마다 독립적이고 새로운 프로세스가 생성-실행(반환)-죽음 이기에 요청 간 정보 없음
일처리를 하기 위해 프로세스를 실행시키고 종료를 해야 하기때문에 일처리가 무겁다
손님이 한 명 들어올 때마다 식당 문을 열고, 불을 켜고, 냄비를 꺼내고, 물을 끓이고, 라면을 만들고, 문을 닫는 과정을 매번 반복.
FCGI = 1 요청 : 1 상주 프로세스
매번 요청에 따라 이미 열려있던 프로세스가 웹 페이지 만들고 반환하고, 프로세스는 계속 살아있는다
Stateful 상태성 : 아무리 많은 요청이 와도 기존 프로세스가 실행(반환) 만 하기에 요청 간 정보 공유
- 어제 실행된 프로세스랑 오늘 실행된 프로세스는 같은 프로세스라 같은 정보 공유
- 쓰레드만 상주시켜 보안성을 높였다.
식당 문은 항상 열려 있고, 불도 계속 켜져 있음. 손님이 들어오면 바로 냄비 꺼내고 라면만 만들면 됨.
장점
반복적으로 문을 열고 닫거나 불을 켜고 끄지 않아도 되니 시간과 에너지 절약.
기존에 켜져 있던 시스템(상주 프로세스)을 계속 활용
단점
항상 문을 열고 불을 켜둬야 하니 보안 문제가 발생. (예: 가게 안이 노출되거나, 악성 손님이 들어올 위험)
PHP = (A) CGI 를 내장하는 방식의 PHP + (B) 어플리케이션을 웹 서버가 내장하고있는 방식의 PHP 5.4+
(A) CGI 를 내장하는 방식
CGI 방식을 그대로 활용해서, 요청마다 PHP가 작동.
기본적으로 독립적이고 단순하지만 성능이 떨어짐.
(B) 어플리케이션을 웹 서버가 내장하고있는 방식 : Tomcat 과 유사
라면 식당에서 라면 요리 기계를 식당 안에 설치해서 버튼만 누르면 라면이 나옴.
이 과정에서 어플리케이션과 웹 서버가 합쳐져서 빠르고 간단해짐.
PHP는 간단한 웹사이트 개발로 시작했지만,
복잡한 프로그램 개발의 요구를 충족하기엔 한계가 있었음.Java의 등장
Java는 객체지향 프로그래밍을 기반으로 개발된 언어로, 복잡하고 확장 가능한 프로그램을 만드는 데 강점이 있음.
웹 어플리케이션 개발에서 Java는 큰 인기를 끌며 WAS(Web Application Server) 기술의 핵심이 됨.
JSP와 Servlet의 역할
JSP (Java Server Pages):
PHP처럼 HTML에 Java 코드를 삽입해 웹페이지를 동적으로 생성.
비유: 요리의 플레이팅 과정을 담당.Servlet:
서버에서 비즈니스 로직을 처리하고 데이터를 관리.
비유: 요리 재료를 준비하고 조리하는 메인 셰프.
1 요청 : 1 스레드 = 상주 프로세스의 Stateful 장점과 비상주 Stateless 의 장점을 스레드를 통해 얻어냄
요소 간 관계 정리
클라이언트가 요청 → Servlet Container가 요청을 받음.
Servlet Container는 Thread Pool에서 스레드 하나를 꺼내서 요청을 처리할 Servlet에 배정.
Servlet이 요청을 처리하고 응답 생성.
스레드는 작업 완료 후 Thread Pool로 반환.
비유로 다시 정리
요청(클라이언트, 손님): 식당에 들어온 손님.
Thread(스레드): 요리사가 라면을 만들 때 실제로 사용하는 손.
Servlet(서블릿): 손님의 주문을 받고 라면을 만들어주는 요리사.
Thread Pool(스레드 풀): 요리사가 대기 중인 대기실.
Servlet Container(서블릿 컨테이너): 요리사들에게 손님을 배정하고, 요리가 끝나면 대기실로 돌려보내는 매니저.
동적 웹 페이지를 만들기 위해서는 2개가 필요 = 반복적인 템플릿 + 데이터
데이터베이스에서 Model(데이터)를 조회하여 그걸 기반으로 View(웹 페이지)를 만들어 Controller 가 반환