MVC1
Model : 비즈니스 로직, 데이터 처리 클래스
View : 사용자에게 보여지는 화면
Controller : X
컨트롤러 없이 JSP가 요청 처리와 비즈니스 로직, 화면 출력까지 모두 담당하는 구조로 비교적 단순하고 소규모 웹 애플리케이션 개발에 적합하지만 유지보수와 확장에 어려움이 있음
작동흐름
1. 사용자가 브라우저에서 form.jsp로 이동
2. form.jsp에서 데이터를 입력하고 submit 버튼 클릭
3. form.jsp 또는 다른 jsp 파일이 직접 request.getParameter()를 통해 데이터를 받고 처리
4. 처리결과를 같은 jsp 또는 또 다른 jsp에서 출력
MVC2
웹 애플리케이션에서 요청 처리와 화면 출력을 명확히 분리한 구조로, 서블릿이 컨트롤러 역할을 하여 클라이언트의 요청을 받아 비즈니스 로직을 처리한 뒤 데이터를 JSP에전달하고 JSP는 오직 결과 화면만 출력하는 방식
- 로직과 화면이 분리되어 코드의 재사용성과 유지보수성이 향상되며, 실제 프로젝트와 프레임워크(Spring)에서도 널리 채택되는 구조
클라이언트 > 컨트롤러 서블릿 > DAO/DTO > 결과 저장 > JSP 포워딩
항목 / MVC1 MVC2
컨트롤러 / 없음(jsp가 처리) / 있음(서블릿이 처리)
뷰 / JSP가 로직 + 출력 / JSP는 오직 뷰 역할
코드 재사용 / 낮음 / 높음
유지보수성 / 낮음 / 높음
사용 기술 / JSP 중심 / Servlet 중심 + JSP
JNDI (Java Naming and Directory Interface) : 이름으로 객체를 찾기 위한 표준
DB 연결, 자원(리소스), 환경 설정 등을 이름으로 등록해두고, 자바 코드에서 그 이름으로 가져다 쓰는 방식
1. 보안성 : 코드에 직접 쓰지 않고, 외부(톰캣)에 저장할 수 있음
2. 유지보수 : 코드 수정 없이 설정만 바꾸면 DB나 환경을 변경
3. 공통자원 재사용, 커넥션 풀 : 여러 서블릿이나 클래스에서 공통된 자원을 설정만으로 공유, 톰캣이 커넥션 풀을 관리해주므로 성능도 좋아짐
1. MVC 패턴 개요
애플리케이션을 세 가지 역할로 나눠 구조화하여 유지보수를 쉽게 하고 재사용성을 높이는 것이 목적
Model : 데이터 및 비즈니스 로직을 처리하는 부분
View : 사용자 인터페이스 (UI)를 담당하는 부분
Controller : 사용자의 요청을 받아 처리하고 적절한 응답을 결정하는 부분
2. MVC1 구조
* 목적과 역할 분석
MVC1은 JSP 중심의 아키텍처로 JSP페이지가 View와 Controller 역할을 모두 수행함
간단하고 직관적이며, 소규모 프로젝트에 적합하지만, 규모가 커질수록 코드 유지보수가 어려워짐
* 주요 특징
JSP 페이지에서 데이터 처리 (controller)와 화면처리(view)가 함께 이루어짐
Model 역할은 JSP 페이지에서 직접 호출된 Java 클래스에서 수행
* 구조 예시
클라이언트 요청 > JSP 페이지 (view + controller) + java bean(model) > DB
* 분석적 인사이트
작은 규모에서는 빠른 개발이 가능하지만, 규모가 커지면 코드가 복잡해져 유지보수가 어렵다
역할 구분이 명확하지 않아 협업 시 효율성이 떨어짐
3. MVC2 구조
* 목적과 역할 분석
MVC2는 명확히 역할을 분리한 아키텍처로, 서블릿(Controller)이 요청 처리와 흐름 제어를 담당하고 JSP(view)는 화면 표현만 담당함.
명확한 역할 분리로 인해 코드 유지보수와 확장성이 뛰어나고 대규모 프로젝트에 적합
* 주요 특징
Controller는 서블릿이 담당하고, View는 JSP 페이지가 담당
Model은 비즈니스 로직과 데이터 처리(DTO, DAO)를 수행
* 구조 예시
클라이언트 요청 → Controller(서블릿) → Model(Java Bean/DAO/DTO) → DB
↓
View(JSP)
* 분석적 인사이트
역할 분리가 뚜렷하여 협업이 효율적이며, 코드 관리가 쉬워 확장성이 뛰어남.
MVC2 구조는 현재 웹 개발에서 사실상 표준 구조로 자리 잡음
* 팁
Spring, Struts 등 유명한 Java 프레임 워크가 MVC2 기반으로 설계됨.
MVC2 구조 심화 분석 및 상세 설명
웹 개발에서 특히 Java EE 환경에서 표준적으로 사용하는 아키텍처
웹 애플리케이션의 각 구성요소가 명확하게 나뉘어 있어 유지보수와 협업 측면에서 장점 굿
1. MVC2 구조의 핵심 원리
MVC2는 모델, 뷰, 컨트롤러가 명확히 분리되어 있음
<역할 구분>
* Controller (컨트롤러)
- 사용자의 요청을 최초로 받아들이는 서블릿
- 요청 처리 및 흐름 제어 담당
- 모델로 데이터를 전달하고 받은 결과를 전달하는 역할
* Model (모델)
- 애플리케이션의 데이터 및 비즈니스 로직 처리
- 주로 Java Beans, DAO, DTO로 구성
- 데이터베이스와 직접적으로 상호작용 (CRUD)
* View (뷰)
- 사용자가 보게 되는 화면 (HTML/JSP 페이지)
- 데이터를 받아 사용자에게 표시하는 역할
- 컨트롤러에서 전달받은 데이터를 표현
2. MVC2 구조 예시 흐름
사용자 → 요청(HTTP request) → Controller(Servlet) → Model(Java Beans/DAO/DTO) → 데이터베이스
↓ 결과 데이터 ↓
View(JSP) → 사용자에게 응답(HTTP response)
* Controller (Servlet)
@WebServlet("/login")
public class LoginController extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String userid = req.getParameter("userid");
String userpw = req.getParameter("userpw");
// Model 호출
UserDAO userDAO = new UserDAO();
UserDTO user = userDAO.authenticate(userid, userpw);
if(user != null) {
req.setAttribute("user", user);
req.getRequestDispatcher("/welcome.jsp").forward(req, resp);
} else {
resp.sendRedirect("/login.jsp?error=1");
}
}
}
*Model(DAO & DTO)
- DTO
public class UserDTO {
private String userid;
private String name;
public String getUserid() { return userid; }
public void setUserid(String userid) { this.userid = userid; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
- DAO
public class UserDAO {
public UserDTO authenticate(String userid, String userpw) {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = DBConnection.getConnection();
ps = conn.prepareStatement("SELECT userid, name FROM users WHERE userid=? AND userpw=?");
ps.setString(1, userid);
ps.setString(2, userpw);
rs = ps.executeQuery();
if(rs.next()) {
UserDTO user = new UserDTO();
user.setUserid(rs.getString("userid"));
user.setName(rs.getString("name"));
return user;
}
} catch(Exception e) {
e.printStackTrace();
} finally {
DBConnection.close(conn, ps, rs);
}
return null;
}
}
* View (JSP)
<html>
<body>
<h1>환영합니다, ${user.name} 님!</h1>
</body>
</html>
3. MVC2에서의 필수 개념 심화 설명
* Servlet (서블릿)
HTTP 요청 및 응답 처리를 위한 Java 클래스
HttpServletRequest, HttpServletResponse 객체를 통해 요청과 응답 제어
* DAO
데이터 접근을 추상화하여 데이터 베이스 상호작용 (CRUD)을 수행
비즈니스 로직과 데이터 접근 로직 분리로 유지보수 용이
* DTO
계층 간 데이터 전송 역할을 수행하는 순수 자바 객체
데이터의 캡슐화 및 전달 목적
* JSP
동적 웹 페이지 생성 목적으로 사용되는 Java 기술
표현 계층을 처리하며, Java 코드와 HTML을 혼합하여 사용 가능
4. 실무 활용 팁
Controller는 최소한의 로직만 포함하고 비즈니스 로직은 Model에 위임하기
DAO는 인터페이스로 추상화하여 다양한 데이터베이스 구현체를 유연하게 교체할 수 있게 하기
JSP는 복잡한 로직을 최소화하고 표현 계층 역할만을 수행하게 하여 가독성을 높이기
'Programming Study > Java Spring' 카테고리의 다른 글
| 개발환경 세팅 (IntelliJ + JDK + Maven + Tomcat) (0) | 2025.06.18 |
|---|---|
| 스트림, IO Stream, 직렬화(Serializable), 역직렬화(Deserializable), 스레드 (3) | 2025.06.11 |
| Cookie, Session, Token(JWT) (2) | 2025.06.11 |
| Livekit란? webRTC, Servlet, EL (2) | 2025.06.11 |
| 서블릿(Servlet), WAS(Web Application Server), Web Server, JSP, REST API (1) | 2025.06.04 |