JSP 중심 웹 개발의 배경
2000년대 초·중반까지 대부분의 웹 애플리케이션은 JSP에 대부분의 로직을 포함하는 구조로 개발되었다.
이는 자바 진영뿐만 아니라 PHP, ASP 등 다른 웹 기술에서도 공통적으로 나타난 흐름이다.
당시의 웹 애플리케이션 구조는 다음과 같은 특징을 가진다.
- JSP 파일 하나에 화면(HTML)과 로직(Java 코드)이 함께 존재한다
- 데이터 조회, 조건 분기, 반복 처리 등을 JSP 안에서 직접 수행한다
- 초기 개발 속도가 빠르다
요구사항이 단순하고 프로젝트 규모가 작을 때는 큰 문제가 없었다.
하지만 웹 애플리케이션의 수와 복잡도가 증가하면서 이 구조는 한계가 드러난다.
JSP에 로직이 집중되었을 때의 문제점
웹 애플리케이션이 점점 복잡해지면서 다음과 같은 문제가 발생한다.
- JSP 파일이 점점 커지고 읽기 어려워진다
- HTML과 자바 코드가 뒤섞여 가독성이 급격히 떨어진다
- 수정 시 영향 범위를 예측하기 어렵다
- 유지보수 비용이 계속 증가한다
즉, 초기 개발 속도는 빠르지만 유지보수 비용이 매우 높은 구조가 된 것이다.
이 문제를 해결하기 위해 등장한 개념이 바로 MVC 패턴이다.
MVC 패턴의 등장
MVC 패턴은 애플리케이션의 역할을 다음 세 가지로 분리하자는 구조적 접근 방식이다.
- Model
비즈니스 로직과 데이터 처리 담당
예: 사용자 조회, 저장, 검증 - View
화면 출력 담당
예: JSP, HTML - Controller
요청을 받아 흐름을 제어하는 역할
예: Servlet
핵심은 JSP에 있던 로직을 밖으로 분리하는 것이다.
MVC 패턴 기반 요청·응답 흐름
MVC 패턴을 적용했을 때의 일반적인 요청·응답 흐름은 다음과 같다.
- 클라이언트가 컨트롤러로 요청을 보낸다
- 컨트롤러가 모델에게 처리를 요청한다
- 모델이 처리 결과를 컨트롤러에게 반환한다
- 컨트롤러가 모델 데이터를 뷰로 전달한다
- 뷰가 최종 HTML을 생성하여 클라이언트로 응답한다
이 구조에서 중요한 점은 클라이언트의 첫 진입 지점이 JSP가 아니라 컨트롤러라는 것이다.
사용자 목록 기능으로 보는 MVC 적용 예
이전에 구현했던 사용자 목록 기능은 MVC 패턴 기반으로 작성된 코드이다.
이 기능의 실제 흐름을 단계별로 정리하면 다음과 같다.
- 클라이언트가 ListUserServlet으로 요청을 보낸다
- ListUserServlet이 사용자 목록을 조회한다 (List<User>)
- 조회 결과를 다시 ListUserServlet이 받는다
- ListUserServlet이 사용자 목록을 /user/list.jsp로 전달한다
- /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 |
