6장_ : JSP 중심 구조에서 MVC 패턴으로의 변화

2026. 2. 8. 16:46·Book/자바 웹 프로그래밍 Next Step

 

JSP 중심 웹 개발의 배경

2000년대 초·중반까지 대부분의 웹 애플리케이션은 JSP에 대부분의 로직을 포함하는 구조로 개발되었다.
이는 자바 진영뿐만 아니라 PHP, ASP 등 다른 웹 기술에서도 공통적으로 나타난 흐름이다.

당시의 웹 애플리케이션 구조는 다음과 같은 특징을 가진다.

  • JSP 파일 하나에 화면(HTML)과 로직(Java 코드)이 함께 존재한다
  • 데이터 조회, 조건 분기, 반복 처리 등을 JSP 안에서 직접 수행한다
  • 초기 개발 속도가 빠르다

요구사항이 단순하고 프로젝트 규모가 작을 때는 큰 문제가 없었다.
하지만 웹 애플리케이션의 수와 복잡도가 증가하면서 이 구조는 한계가 드러난다.

 

 

JSP에 로직이 집중되었을 때의 문제점

웹 애플리케이션이 점점 복잡해지면서 다음과 같은 문제가 발생한다.

  • JSP 파일이 점점 커지고 읽기 어려워진다
  • HTML과 자바 코드가 뒤섞여 가독성이 급격히 떨어진다
  • 수정 시 영향 범위를 예측하기 어렵다
  • 유지보수 비용이 계속 증가한다

즉, 초기 개발 속도는 빠르지만 유지보수 비용이 매우 높은 구조가 된 것이다.
이 문제를 해결하기 위해 등장한 개념이 바로 MVC 패턴이다.

 

 

MVC 패턴의 등장

MVC 패턴은 애플리케이션의 역할을 다음 세 가지로 분리하자는 구조적 접근 방식이다.

  • Model
    비즈니스 로직과 데이터 처리 담당
    예: 사용자 조회, 저장, 검증
  • View
    화면 출력 담당
    예: JSP, HTML
  • Controller
    요청을 받아 흐름을 제어하는 역할
    예: Servlet

핵심은 JSP에 있던 로직을 밖으로 분리하는 것이다.

 

 

MVC 패턴 기반 요청·응답 흐름

MVC 패턴을 적용했을 때의 일반적인 요청·응답 흐름은 다음과 같다.

  1. 클라이언트가 컨트롤러로 요청을 보낸다
  2. 컨트롤러가 모델에게 처리를 요청한다
  3. 모델이 처리 결과를 컨트롤러에게 반환한다
  4. 컨트롤러가 모델 데이터를 뷰로 전달한다
  5. 뷰가 최종 HTML을 생성하여 클라이언트로 응답한다

이 구조에서 중요한 점은 클라이언트의 첫 진입 지점이 JSP가 아니라 컨트롤러라는 것이다.

 

 

사용자 목록 기능으로 보는 MVC 적용 예

이전에 구현했던 사용자 목록 기능은 MVC 패턴 기반으로 작성된 코드이다.
이 기능의 실제 흐름을 단계별로 정리하면 다음과 같다.

  1. 클라이언트가 ListUserServlet으로 요청을 보낸다
  2. ListUserServlet이 사용자 목록을 조회한다 (List<User>)
  3. 조회 결과를 다시 ListUserServlet이 받는다
  4. ListUserServlet이 사용자 목록을 /user/list.jsp로 전달한다
  5. /user/list.jsp가 HTML을 생성하여 클라이언트로 응답한다

이 구조에서 각 역할은 명확히 분리되어 있다.

  • ListUserServlet → Controller
  • List<User>를 반환하는 로직 → Model
  • /user/list.jsp → View

 

 

MVC 적용 전과 후의 가장 큰 차이

MVC 패턴 적용 전에는 JSP가 요청의 시작점이었다.
즉, 브라우저가 직접 JSP를 요청하고 JSP가 모든 처리를 담당했다.

MVC 패턴을 적용하면 다음과 같이 달라진다.

  • 클라이언트 요청은 반드시 컨트롤러(Servlet)로 들어온다
  • 대부분의 로직은 컨트롤러와 모델에서 처리된다
  • JSP는 전달받은 데이터를 출력만 담당한다

이로 인해 JSP의 복잡도는 급격히 낮아진다.
JSP에는 반복 출력, 값 치환 정도의 코드만 남게 된다.

 

 

서블릿과 JSP만으로도 MVC가 가능한 이유

서블릿과 JSP만으로도 MVC 패턴 기반 개발은 가능하다.
그 이유는 개발자가 MVC 패턴을 이미 이해하고 있기 때문이다.

하지만 다음과 같은 문제가 발생할 수 있다.

  • MVC 패턴에 익숙하지 않은 개발자는 구조를 지키기 어렵다
  • 프로젝트에 따라 MVC 구조와 그렇지 않은 코드가 섞일 수 있다
  • 코드 일관성이 무너지고 유지보수가 어려워진다

이 문제를 해결하기 위해 등장한 것이 프레임워크이다.

 

 

프레임워크와 라이브러리의 차이

프레임워크와 라이브러리는 모두 개발 생산성을 높이기 위한 도구다.
하지만 두 개념에는 중요한 차이가 있다.

  • 라이브러리
    • 개발자가 필요할 때 호출해서 사용한다
    • 구조나 패턴을 강제하지 않는다
  • 프레임워크
    • 애플리케이션의 전체 흐름을 프레임워크가 제어한다
    • 특정 패턴(MVC 등)을 기반으로 개발하도록 강제한다

MVC 프레임워크는 개발자 간의 역량 차이가 있더라도
일관된 MVC 구조로 개발하도록 강제하는 역할을 한다.

또한 서블릿에서 반복되던 공통 코드들을 제거해 주는 효과도 있다.

 

 

정리

  • JSP 중심 구조는 초기 개발은 빠르지만 유지보수 비용이 크다
  • MVC 패턴은 역할 분리를 통해 이 문제를 해결한다
  • 컨트롤러가 요청의 진입점이 되고 JSP는 출력만 담당한다
  • 프레임워크는 MVC 패턴을 강제하여 코드 일관성을 유지하게 한다

 

 

 


출처 : 《자바 웹 프로그래밍 Next Step》, 박재성, 로드북

'Book > 자바 웹 프로그래밍 Next Step' 카테고리의 다른 글

6장_ : 쿠키와 UUID로 세션 아이디 직접 생성  (0) 2026.02.08
6장_ : 쿠키와 세션  (0) 2026.02.07
6장_ 요구사항4 : 회원 목록 및 개인정보 수정 보안 강화  (0) 2026.02.07
6장_ 요구사항3 : 세션 기반 로그인/로그아웃 상태 만들기  (0) 2026.02.07
6장_ 요구사항1: 개인정보 수정  (0) 2026.02.06
'Book/자바 웹 프로그래밍 Next Step' 카테고리의 다른 글
  • 6장_ : 쿠키와 UUID로 세션 아이디 직접 생성
  • 6장_ : 쿠키와 세션
  • 6장_ 요구사항4 : 회원 목록 및 개인정보 수정 보안 강화
  • 6장_ 요구사항3 : 세션 기반 로그인/로그아웃 상태 만들기
sqaxe1
sqaxe1
woojoo-devlog 님의 블로그 입니다.
  • sqaxe1
    Woojoo's Devlog
    sqaxe1
  • 전체
    오늘
    어제
    • 분류 전체보기 (148)
      • Backend (9)
        • Servlet (7)
        • Spring (2)
      • Frontend (1)
      • CS (0)
      • Book (33)
        • 자바 웹 프로그래밍 Next Step (30)
        • 테스트 주도 개발: 고품질 쾌속개발을 위한 TDD.. (1)
        • 성공과 실패를 결정하는 1%의 네트워크 원리 (2)
      • Engineering (0)
        • Testing (0)
      • Infra (6)
        • AWS (6)
      • Java (4)
      • Network (1)
      • 김영한 (28)
        • 자바 입문 (8)
        • 실전 자바 - 기본편 (6)
        • 실전 자바 - 중급편 (10)
        • 실전 자바 - 고급편 (4)
      • Web (39)
        • Web Basics (39)
      • Project (24)
        • NeoSquare (0)
        • Memo Evolution (24)
      • 정보처리기사 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    java
    개발서적
    aws
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
sqaxe1
6장_ : JSP 중심 구조에서 MVC 패턴으로의 변화
상단으로

티스토리툴바