1. 인터넷과 웹의 개요
인터넷과 웹의 개념을 살펴보고 웹을 동작 원리를 학습합니다.
웹의 동작 원리
웹은 기본적으로 클라이언트/서버 방식으로 동작합니다.
클라이언트가 특정 페이지를 웹 서버에 요청하면 이를 처리한 후 그 결과를 클아이언트에게 보내어 응답하는 것입니다.
2. 정적 웹 페이지와 동적 웹 페이지
웹 페이지는 크게 정적페이지와 동적 페이지로 나눌 수 있습니다. 정적 웹 페이지는 컴퓨터에 저장된 텍스트 파일을 그대로 보는 것이고, 동적 웹페이지는 저장된 내용을 다른 변수로 가공 처리하여 보는 것입니다. 정적 웹페이지는 html과 같은 웹 언어로 작성하고 동적 웹페이지는 php,asp,jsp와 같은 웹 언어로 작성합니다.
3. 서블릿과 JSP
서블릿이란 자바를 사용하여 웹 페이지를 동적으로 생성하는 서버 측 웹 프로그래밍을 말하며 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종입니다.
서블릿은 효율적이고 확장 가능합니다.
서블릿 (미리 생성된 객체)이 웹 서버에 배포되고 로드되면 클라이언트의 요청을 즉시 이행하기 시작할 수 있습니다.
웹 서버는 경량 스레드를 사용하여 서블릿을 호출하므로 자바의 멀티스레딩 기능을 사용하여 여러 클라이언트 요청을 동시에 서블릿에서 채울 수 있습니다. 서버가 모든 클라이언트 요청에 대해 새로운 프로세스를 시작해야 하는 CGI에 비해 서블릿은 효율적이고 확장 가능합니다.
4. 서블릿과 JSP의 동작 과정
💡 차이점 요약
항목 | 서블릿(Servlet) | JSP |
작성 방식 | Java 코드로 작성 | HTML에 Java 코드 삽입 |
목적 | 로직 중심 | 화면(View) 중심 |
추천 용도 | 비즈니스 로직 | 사용자 인터페이스 |
유지보수 | 복잡해질 수 있음 | 비교적 쉬움 |
📦 Servlet 동작 과정
- 클라이언트 요청 (HTTP)
→ 사용자가 URL 입력 또는 버튼 클릭 - 웹 서버가 Servlet 호출
→ web.xml 또는 @WebServlet으로 등록된 Servlet 클래스 실행 - Servlet 실행
→ doGet() / doPost() 메서드 안에서 요청 처리 - 응답 생성 (HTML 등)
→ Java 코드로 직접 HTML 생성 (PrintWriter 사용 등) - 클라이언트에 응답 전송
📄 JSP 동작 과정
- 클라이언트 요청 (HTTP)
→ xxx.jsp 요청 - 웹 서버가 JSP를 서블릿으로 변환
→ .jsp → .java(Servlet) → .class (컴파일) - Servlet처럼 동작
→ 변환된 서블릿 클래스가 실행되고 결과 생성 - 응답 생성 (주로 HTML)
→ JSP 안의 HTML + Java 코드 실행 결과 - 클라이언트에 응답 전송
💡 비유로 정리하면:
- Servlet: Java로 HTML 직접 그리는 느낌 (→ 번거롭고 복잡)
- JSP: HTML 쓰면서 중간에 Java 끼워넣는 느낌 (→ 직관적이고 편함)
5. 서블릿과 JSP 생명 주기
✅ Servlet의 생명주기
- 서블릿 객체 생성 (init() 호출)
- 최초 요청 시, 딱 한 번 생성됨
- init(ServletConfig config) 호출로 초기화
- 요청 처리 (service() → doGet() / doPost() 호출)
- 클라이언트 요청마다 실행됨
- 요청 방식에 따라 doGet() 또는 doPost() 자동 호출
- 서블릿 종료 (destroy() 호출)
- 서버 종료 시 또는 서블릿이 제거될 때 실행
- 리소스 정리 용도
🌀 이 순서는 Servlet이 살아있는 동안 반복됨 (요청 → 응답 반복)
✅ JSP의 생명주기
- JSP 파일 → 서블릿으로 변환
- 최초 요청 시 한 번: .jsp → .java (Servlet) → .class
- 서블릿 객체 생성 (jspInit() 호출)
- 한 번만 실행됨 (초기화 용도)
- 요청 처리 (_jspService() 호출)
- 매 요청마다 실행됨 (JSP에 작성한 코드들이 이 안에 들어감)
- JSP 종료 (jspDestroy() 호출)
- JSP가 언로드될 때 실행 (리소스 정리)
🔁 비교 요약표
단계 | Servlet | JSP |
초기화 | init() | jspInit() |
요청 처리 | service() → doXXX() | _jspService() |
종료 | destroy() | jspDestroy() |
최초 변환 여부 | ❌ 이미 자바 클래스 | ✅ JSP → Servlet → 클래스 변환 |