티스토리 뷰

DEV/ETC

서블릿(Servlet)과 MVC 패턴

SBP 2025. 6. 13. 15:57
서블릿(Servlet)과 MVC 패턴 설명

서블릿(Servlet)과 MVC 패턴: 웹 애플리케이션의 핵심 원리

웹 애플리케이션을 개발할 때 가장 기본적이면서도 중요한 개념이 바로 서블릿(Servlet)MVC 패턴입니다. 이 둘은 동적인 웹페이지를 만들고, 애플리케이션의 구조를 체계적으로 관리하기 위한 핵심 요소입니다.


1. 서블릿 (Servlet) 이란?

서블릿은 자바(Java) 언어로 웹 개발을 하기 위한 기술 표준이자, 서버 측에서 실행되어 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 보내주는 자바 프로그램입니다.

쉽게 말해, '서버에서 실행되는 작은 프로그램(Server + Applet)'으로, 웹 서버가 혼자서는 할 수 없는 동적인 처리를 가능하게 합니다. 예를 들어, 사용자가 로그인할 때 아이디와 비밀번호가 맞는지 확인하고, 결과에 따라 '로그인 성공' 또는 '실패' 페이지를 보여주는 작업을 서블릿이 수행합니다.

서블릿의 특징

  • 자바 기반: 자바의 모든 특징(객체 지향, 플랫폼 독립성 등)을 그대로 사용합니다.
  • 동적 처리: 정적인 HTML 파일과 달리, 요청에 따라 실시간으로 다른 결과(HTML)를 생성하여 응답할 수 있습니다.
  • 플랫폼 독립성: 자바 가상 머신(JVM)이 설치된 어떤 운영체제에서도 동작합니다.
  • 스레드 기반 동작: 최초 요청 시 메모리에 로드된 후, 각 요청은 가벼운 스레드(Thread)로 처리되므로 자원 효율성이 높고 빠릅니다.

서블릿의 처리 과정 (Life Cycle)

서블릿은 '서블릿 컨테이너(Servlet Container)'에 의해 관리되며, 다음과 같은 생명주기를 가집니다. (대표적인 서블릿 컨테이너로 Apache Tomcat이 있습니다.)

  1. 요청 (Request): 클라이언트(웹 브라우저)가 특정 URL로 서버에 요청을 보냅니다.
  2. 서블릿 컨테이너:
    • 객체 생성 및 초기화: 해당 요청을 처리할 서블릿이 메모리에 없는 경우, 서블릿 객체를 생성하고 init() 메소드를 호출하여 초기화합니다. (최초 1회만 실행)
    • 요청 처리: 생성된 서블릿 객체에 요청을 전달합니다. 각 요청마다 별도의 스레드를 생성하여 service() 메소드를 호출합니다. service() 메소드는 요청 방식(GET, POST 등)에 따라 doGet() 또는 doPost() 메소드를 내부적으로 호출합니다.
  3. 서블릿:
    • doGet() / doPost() 실행: 개발자는 이 메소드 안에 실제 비즈니스 로직(데이터베이스 조회, 계산 등)을 구현합니다.
    • 로직 처리 후, 동적으로 HTML 코드를 생성하여 응답(Response) 객체에 담습니다.
  4. 응답 (Response): 서블릿 컨테이너는 서블릿이 생성한 응답을 클라이언트에게 전달합니다. 클라이언트의 웹 브라우저는 이 응답(HTML)을 해석하여 화면에 표시합니다.
  5. 소멸: 서버가 종료되거나 서블릿이 재로드될 때 destroy() 메소드가 호출되어 서블릿 객체는 메모리에서 소멸됩니다.

2. MVC 패턴이란?

MVC 패턴은 애플리케이션을 세 가지 주요 역할로 나누어 설계하는 디자인 패턴(Software Design Pattern)입니다. 각 구성 요소가 독립적으로 역할을 수행하도록 하여 코드의 관심사 분리(Separation of Concerns)를 이루는 것이 핵심 목표입니다. 이를 통해 코드의 재사용성을 높이고, 유지보수를 용이하게 만듭니다.

  • Model (모델): 애플리케이션의 데이터(DB 데이터 등)와 비즈니스 로직(데이터를 처리하는 규칙)을 담당합니다. 즉, '무엇을 할 것인가'를 정의하며, 데이터의 상태가 변경되면 컨트롤러나 뷰에 이를 알릴 수 있습니다.
    예시: UserDAO.java, ProductVO.java
  • View (뷰): 모델의 데이터를 사용자에게 보여주는 역할, 즉 UI(사용자 인터페이스)를 담당합니다. 사용자가 보는 화면 그 자체이며, 모델이나 컨트롤러에 대한 지식이 거의 없습니다. 단지 컨트롤러로부터 받은 데이터를 화면에 표시할 뿐입니다.
    예시: userList.jsp, productDetail.jsp
  • Controller (컨트롤러): 모델과 뷰를 연결하는 다리 역할을 합니다. 사용자의 입력을 받아 모델에 특정 작업을 지시하고, 모델이 처리한 결과를 받아 다시 뷰에 전달하여 화면을 갱신하도록 지시합니다.
    예시: UserController.java (서블릿)

서블릿 기반 MVC 패턴의 처리 과정

과거에는 서블릿 하나에서 비즈니스 로직 처리와 HTML 코드 생성을 모두 담당했습니다. (MVC 패턴 미적용) 이는 코드를 복잡하게 만들고 유지보수를 어렵게 했습니다.

이를 해결하기 위해 서블릿을 컨트롤러(Controller) 역할로 사용하고, 화면 표시는 JSP(JavaServer Pages)뷰(View)로 사용하는 MVC 패턴이 표준처럼 자리 잡았습니다.

  1. 요청 (Request): 클라이언트가 특정 기능(예: /user/list)을 URL로 요청합니다.
  2. 컨트롤러 (Controller - Servlet):
    • 요청을 가장 먼저 받습니다. (web.xml 또는 @WebServlet 어노테이션으로 매핑)
    • 요청에 필요한 데이터를 분석하고, 어떤 비즈니스 로직을 수행할지 결정합니다.
  3. 모델 호출 (Model):
    • 컨트롤러는 비즈니스 로직 처리를 위해 해당 모델(일반 Java 클래스, DAO 등)을 호출합니다.
    • 모델은 데이터베이스에 접근하여 데이터를 조회, 수정, 삭제 등의 작업을 수행하고 그 결과를 컨트롤러에 반환합니다.
  4. 뷰 선택 및 데이터 전달 (View):
    • 컨트롤러는 모델로부터 받은 결과를 request 객체 등에 담습니다.
    • 결과를 표시할 뷰(JSP 파일)를 선택하고, 해당 뷰로 제어를 넘깁니다(Forward).
  5. 뷰 렌더링 (View - JSP):
    • JSP는 컨트롤러로부터 전달받은 데이터를 사용하여 동적으로 HTML 문서를 생성합니다.
    • 생성된 HTML 문서는 응답(Response) 객체에 실려 클라이언트에게 전달됩니다.
  6. 응답 (Response): 클라이언트는 최종적으로 완성된 HTML 페이지를 화면으로 보게 됩니다.

이처럼 MVC 패턴을 적용하면 서블릿(Controller)은 오직 로직 흐름 제어에만 집중하고, JSP(View)는 화면을 그리는 데만 집중하며, 자바 클래스(Model)는 데이터 처리에만 집중하게 됩니다. 각자의 역할이 명확히 분리되어 훨씬 체계적이고 효율적인 웹 애플리케이션 개발이 가능해집니다.

'DEV > ETC' 카테고리의 다른 글

Vibe Code, Low Code, No Code 설명  (3) 2025.06.14
Cursor AI 설명  (0) 2025.06.14
Nginx vs Apache 서버 비교  (0) 2025.06.13
IOPM (통합 운영 및 성과 관리) 프로젝트 상세 설명  (4) 2025.06.12
윈도우 가상 메모리  (1) 2025.06.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
글 보관함