📚 Study/Servlet&JSP
Servlet이랑 JSP는 뭐가 다른데?
0_ch4n
2022. 5. 27. 16:06
반응형
✔️ 한줄 요약
- Servlet 은 HTML in JAVA 이다.
- JSP 는 JAVA in HTML 이다.
- JSP는 Servlet의 확장이므로 동일한 역할을 한다.
- 결국 둘 다 사용하는 MVC 패턴을 사용한다.
✔️ Servlet과 JSP의 차이
- Servlet
- 웹 기반의 요청에 대한 동적인 처리가 가능한 Server side에서 돌아가는 Java Program입니다.
- Java 코드 안에 HTML 코드가 들어가 있으며 하나의 클래스입니다.
- Java로 웹 개발을 하기 위한 CGI의 역할을 하는 표준
- 비즈니스 로직 처리, data processing, Controller에 적합합니다.
- 수정된 경우 다시 컴파일한 후 재배포하는 작업이 필요합니다.
- JSP
- Java 언어를 기반으로 하는 Server side 스크립트 언어입니다.
- HTML 코드 안에 Java 코드가 들어가 있습니다.
- Servlet을 보완하고 기술을 확장시킨 스크립트 방식의 표준으로 Servlet의 모든 기능과 추가 기능을 사용합니다.
- 화면 로직 처리, presentation, View에 적합합니다.
- 수정된 경우 재배포할 필요 없이 WAS가 알아서 처리해줍니다.
✔️ Servlet과 JSP의 관계
- 결국 Servlet과 JSP는 만드는 방법만 다를뿐 동일한 역할을 하고 각각 장, 단점을 갖습니다.
📌 Model 1
- JSP가 요청과 응답(Controller + View)을 모두 담당하고 DB 접근은 Java Bean(DTO, DAO)을 사용하는 형태입니다.
- 동작 과정
- JSP로 작성된 프로그램은 내부적으로 WAS에서 Servlet 파일로 변환
- JSP 태그를 분해하고 추출하여 다시 순수한 HTML 웹 페이지로 변환
- 클라이언트로 응답
- 특징
- 배우기 쉽고 개발 속도가 빠르다
- 프레젠테이션 로직(View)과 비즈니스 로직(Controller)가 혼재하므로 복잡해져 유지 보수가 어렵다
📌 Model 2
- JSP와 Servlet을 모두 사용하여 프레젠테이션 로직(View)과 비즈니스 로직(Controller)를 분리한 형태입니다.
- 특징
- 프레젠테이션 로직(View)는 HTML이 중심이 되는 JSP를 사용
- 비즈니스 로직(Controller)는 데이터를 다른 자바 클래스에게 넘겨주는 부분으로 Java 코드가 중심이 되는 Servlet을 사용
- Model은 Java Bean(DTO, DAO)을 통해 데이터베이스에 접근
- 유지보수가 용이
✔️ MVC 패턴으로 보는 Model2
- Model (Server class or Java Bean)
- 비즈니스 로직을 처리하는 모든 것이 모델에 속합니다.
- 컨트롤러로부터 특정 로직에 대한 처리 요청(게시판 글쓰기 등)이 들어오면 이를 수행하고 수행 결과를 컨트롤러에 반환합니다.
- request나 session 객체에 저장하기도 합니다.
- View (JSP)
- 클라이언트에 출력되는 화면을 말합니다.
- Model 1과는 달리 로직 처리를 위한 코드가 내포되어있지 않습니다.
- 요청 결과의 출력 뿐만 아니라 컨트롤러에 요청을 보내는 용도로도 사용됩니다.
- request나 session 객체에 저장된 정보를 토대로 화면을 출력합니다.
- Controller (Servlet)
- MVC 패턴의 모든 흐름제어를 맡습니다.
- 브라우저로 요청이 들어오면 어떤 요청이 들어오는지 분석하여 이 요청을 처리하기 위한 모델을 사용하여 처리합니다.
- 사용한 모델로부터 처리결과를 받으면 추가로 처리하거나 가공해야 할 정보가 있다면 처리 후 request나 session 객체에 저장하고, View를 선택하여 Forward나 redirect하여 클라이언트에 출력합니다.
📌 장점
- 출력을 위한 뷰 코드와 로직처리를 위하 자바 코드를 분리하기 때문에 Model 1에 비해 코드가 복잡하지 않습니다.
- View, Controller에 대한 분업이 용이합니다.
- 기능에 따라 분리되어 있기 때문에 유지보수가 용이합니다.
📌 단점
- 구조가 복잡하여 습득이 어렵고 작업량이 많습니다.
- Java에 대한 같은 이해도가 필요합니다.
✔️ 코드로 보는 MVC 패턴
- Controller(Servlet)에서 비즈니스 로직을 수행한 후 데이터를 dispatcher.forward()를 통해 View로 보냅니다.
- View(JSP)에서 데이터를 받아 출력만 합니다.
// Controller
@WebServlet(name = "mvcMemberSaveServlet", urlPatterns = "/servlet-mvc/members/save")
public class MvcMemberSaveServlet extends HttpServlet {
private final MemberRepository memberRepository = MemberRepository.getInstance();
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
final String username = request.getParameter("username");
final int age = Integer.parseInt(request.getParameter("age"));
final Member member = new Member(username, age);
memberRepository.save(member);
request.setAttribute("member", member);
final String viewPath = "/WEB-INF/views/save-result.jsp";
final RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
dispatcher.forward(request, response);
}
}
// View
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
성공
<ul>
<li>id=${member.id}
</li>
<li>username=${member.username}
</li>
<li>age=${member.age}
</li>
</ul>
<a href="/index.html">메인</a>
</body>
</html>
📄 참고
https://steady-coding.tistory.com/463
반응형