728x90
반응형

목차

  1. 서블릿이란? (쉬운 비유)
  2. 서블릿의 핵심 특징
  3. 서블릿 컨테이너(예: Tomcat)의 역할
  4. 서블릿 동작 흐름(요청→매핑→doGet/doPost→응답)
  5. 서블릿 생명주기(init → service → destroy)
  6. JSP는 뭐고, 서블릿과 어떻게 다른가
  7. 실전 예제: HelloServlet (Annotation 기반)
  8. 자주 하는 실수 & 베스트 프랙티스
  9. 마무리 체크리스트(면접/시험 대비)

1) 서블릿이란? (쉬운 비유)

사용자(브라우저)가 “로그인해줘!”라고 부탁하면, 서블릿이 그 요청을 받아 DB를 확인하고 결과 페이지(응답)를 만들어 돌려주는 자바 클래스입니다.

  • “요청을 받아 응답을 만든다” = Controller 역할에 딱 맞음.

2) 서블릿의 핵심 특징

  • 동적 웹 컴포넌트: 요청 시점에 필요한 내용을 만들어 응답.
  • HttpServlet 상속: javax.servlet.http.HttpServlet(Jakarta EE에선 jakarta.servlet.http.HttpServlet)을 상속.
  • 스레드 기반 동작: 컨테이너가 요청마다 스레드를 재사용/관리.
  • MVC에서 Controller로 자주 사용.
  • (구)HTML을 자바 코드로 println 하던 시대 → 유지보수 어려워서 JSP/템플릿과 분리해서 씀.

3) 서블릿 컨테이너의 역할 (Tomcat 대표)

  • 웹 서버와 통신을 대신 처리(소켓, HTTP 파싱 등).
  • 생명주기 관리: 로딩→init()→요청 시 service()→종료 시 destroy().
  • 멀티스레드 처리: 요청마다 스레드 할당/관리.
  • 선언적 보안: 설정 파일/어노테이션 기반으로 인증·인가 처리.

4) 서블릿 동작 흐름

  1. 클라이언트가 URL 요청 → 컨테이너가 HttpServletRequest/Response 생성
  2. URL 매핑(web.xml 또는 @WebServlet)으로 대상 서블릿 찾기
  3. service()가 호출되어 메서드 분기(doGet/doPost 등)
  4. 서블릿이 응답을 만들어 HttpServletResponse로 전송
  5. 컨테이너가 마무리 정리

5) 서블릿 생명주기 (Life Cycle)

  • init(): 서블릿 최초 로딩 시 1회 호출(공유 리소스 초기화에 적합)
  • service(): 매 요청마다 호출되어 doGet()/doPost()로 분기
  • destroy(): 컨테이너 종료/교체 시 1회 호출(정리 작업)
[로딩] → init() → (요청 n번) service() → ... → destroy() → [언로드]

6) JSP는 무엇이고, 서블릿과 어떻게 다른가

  • JSP(Java Server Pages): HTML 안에 자바를 삽입해 화면 구성에 특화.
  • 최종적으로 JSP도 서블릿으로 변환되어 실행됨.
  • 일반적으로 서블릿=로직/제어, JSP=뷰 로 분리해서 MVC 구조를 만든다.

7) 실전 예제: HelloServlet (Annotation 기반)

// jakarta.servlet-api를 사용하는 최신 톰캣 기준 예시
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html; charset=UTF-8");

        PrintWriter out = resp.getWriter();
        out.println("<!DOCTYPE html>");
        out.println("<html><head><meta charset='UTF-8'><title>Hello</title></head>");
        out.println("<body><h1>안녕하세요, Servlet!</h1>");
        out.println("<p>요청 URI: " + req.getRequestURI() + "</p>");
        out.println("</body></html>");
    }
}

Tip: 구형 프로젝트는 web.xml 매핑을 쓰지만, 요즘은 @WebServlet("/path") 어노테이션 매핑이 간편합니다.

8) 자주 하는 실수 & 베스트 프랙티스

  • 인스턴스 변수에 상태 저장 금지: 서블릿은 다중 스레드가 공유합니다.
  • 문자 인코딩 설정: resp.setContentType("text/html; charset=UTF-8") 등 필수.
  • 비즈니스 로직 분리: DAO/Service로 분리하고 서블릿은 흐름 제어만.
  • 에러/예외 처리: 공통 에러 페이지, 필터/인터셉터로 로깅과 인증 처리.
  • JSP에서 스크립틀릿 최소화: EL/JSTL, 템플릿 엔진(Thymeleaf 등)로 표현만 담당.

9) 마무리 체크리스트 (면접/시험 포인트)

  • 서블릿과 JSP의 관계 설명 가능?
  • 컨테이너 역할(생명주기·스레드·보안) 술술 말할 수 있는지?
  • Life Cycle 순서/용도 정확히 아는지?
  • URL 매핑(@WebServlet vs web.xml) 차이 이해했는지?

SEO용 FAQ

Q1. 서블릿은 왜 필요한가요?
A. HTTP 요청을 자바로 처리해 동적 페이지를 만드는 표준 컨트롤러이기 때문입니다.

Q2. JSP랑 뭐가 달라요?
A. JSP는 화면 템플릿, 서블릿은 로직/흐름 제어. JSP도 결국 서블릿으로 변환돼 실행됩니다.

Q3. 스프링 MVC랑 관계는?
A. 스프링 MVC도 내부적으로 서블릿(DispatcherServlet)을 사용합니다. 서블릿 개념을 알면 스프링이 쉬워집니다.

728x90
반응형
728x90
반응형

🎯 개발자라면 꼭 알아야 할 디자인 패턴! MVC란?

**MVC(Model-View-Controller)**는 소프트웨어 개발에서 **관심사의 분리(Separation of Concerns)**를 구현하는 대표적인 디자인 패턴입니다.

  • 비즈니스 로직과 화면, 입력 제어를 독립적으로 구성할 수 있어 유지보수성이 매우 뛰어납니다.

📌 MVC 구성 요소

🔹 Model (모델)

  • 앱이 다뤄야 할 데이터비즈니스 로직을 담당합니다.
  • 데이터가 변경되면 일반적으로 뷰(View)와 컨트롤러(Controller)에 알려줍니다.
  • ✅ 예: 품목 이름, 가격, 수량 등 쇼핑 리스트의 항목 데이터

🔹 View (뷰)

  • 사용자에게 보여지는 UI를 담당합니다.
  • 데이터를 직접 처리하지 않고, 모델에서 전달받은 데이터만 표시합니다.
  • ✅ 예: 쇼핑 항목 리스트를 표 형태로 보여주는 HTML 화면

🔹 Controller (컨트롤러)

  • 사용자의 **입력(클릭, 요청 등)**을 받아,
    적절한 모델을 호출하고 뷰를 갱신하는 역할을 합니다.
  • ✅ 예: "장바구니에 담기" 버튼 클릭 → 컨트롤러가 해당 품목을 모델에 추가하고, 뷰를 새로고침

🛒 MVC 예제 - 쇼핑 리스트 앱

쇼핑리스트 앱을 예로 들면 다음과 같이 MVC로 나눌 수 있어요.

역할설명
Model itemName, price, quantity 등의 데이터를 정의
View 리스트 형태로 화면에 항목을 보여주는 레이아웃
Controller 사용자의 입력을 받아 모델 업데이트 및 뷰 갱신
 

✅ MVC 패턴의 장점

  • 🔧 유지보수가 쉬움: 각 구성 요소가 독립적이라 변경이 용이
  • 🧩 협업에 유리: 역할 분리가 명확해 프론트/백엔드 개발자 협업에 이상적
  • 🚀 재사용성과 확장성 증가
MVC패턴, 디자인패턴, 모델뷰컨트롤러, Model View Controller, 백엔드기초, 소프트웨어아키텍처, 쇼핑리스트예제, Java MVC, Spring MVC, 웹개발패턴
728x90
반응형

+ Recent posts