[Spring MVC] #1 Servlet, JSP, MVC 패턴

Jaeyoo (유재형)·2022년 1월 30일
1

SpringMVC

목록 보기
1/12
post-thumbnail
post-custom-banner

Spring MVC 를 왜 사용하는지 알기위해 그 전에 주로 사용했던 Servlet, JSP, MVC 패턴에 대해 정리를 해보려한다.
(김영한님의 스프링 MVC강의를 참고했다.)


1. Servlet


Servlet이란

자바를 사용해서 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양 이라고하는데 웹 서버의 성능을 향상 시키기 위해 사용되는 자바 클래스의 일종이다.

Servlet 사용하는 이유

쉽게 예시를 들어 설명하면
HTML Form으로 데이터를 전송하면 웹 브라우저가 HTTP 메시지를 생성해 서버로 보낸다.

POST /save HTTP/1.1
Host: localhost:8080
Content-Type: application/x-www-form-urlencoded

username=kim&age=20

HTTP 메시지는 단순히 String 이기때문에 일일이 다 파싱을 해주어야한다.
그리고 네트워크 연결과 응답 생성등 다양한 일들을 모두 해주어야하는데

만약 서블릿을 사용하지않는다면 아래의 모든 사항을 개발자가 직접 구현해야한다.

  • 서버 TCP/IP 연결 대기, 소켓 연결
  • HTTP 요청 메시지 파싱해서 읽기
  • HTTP method, URL 확인
  • Content-Type 확인
  • 쿼리 파라미터 사용할수있도록 HTTP 메시지 바디 파싱
  • 비즈니스 로직 실행
  • HTTP 응답 메시지 생성
  • TCP/IP에 응답 전달, 소켓 종료

이렇게 많은 일을 개발자가 반복적으로 하는것을 막기위해 서블릿이 등장했다.

개발자는 비즈니스 로직 부분만 신경쓰면되고 나머지는 서블릿이 처리해줘서 개발자가 HTTP 스펙을 굉장히 편리하게 사용할 수 있게 해줬다.

서블릿 컨테이너

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라함
  • 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
  • 서블릿 객체는 싱글톤으로 관리
  • 동시 요청을 위한 멀티 쓰레드 처리 지원

서블릿의 단점

간단한 내용의 HTML을 보내는데도 굉장히 지져분하다.

@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html")
public class ResponseHtmlServlet extends HttpServlet {

   @Override
   protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //content-type
       response.setContentType("text/html");
       response.setCharacterEncoding("utf-8");

       PrintWriter writer = response.getWriter();
       writer.println("<html>");
       writer.println("<body>");
       writer.println(" <div>안녕?</div>");
       writer.println("</body>");
       writer.println("</html>");
   }
}

2. JSP


템플릿 엔진 사용

  • 서블릿으로 HTML을 표현하기 매우 까다롭다.
  • HTML에 동적으로 변경해야될 부분만 자바로 하는게 더 편리할것같다.(템플릿 엔진이 나온 이유)
  • 템플릿 엔진은 HTML 문서에 필요한 부분만 자바 코드를 적용해 동적으로 변경 가능
  • 템플릿 엔진에는 JSP, 타임리프 등등이 있다.
  • 과거에는 JSP 많이 사용했지만 지금은 타임리프를 많이 사용한다.

JSP란?

  • Java Server Pages의 약자로 HTML에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹페이지를 생성하는 언어이다.
  • 실행시 서블릿으로 변환된후 실행되므로 서블릿과 유사하지만 HTML 표준에 따라 작성되므로 웹 디자인에 편하다.

JSP 단점

  • 서블릿에 비해 HTML을 작성하기 편하지만 코드에 비지니스 로직과 뷰 영역이 섞여 있다.
  • JSP가 너무 많은 역할을 해 유지보수가 힘들다.

Servlet과 JSP 각각의 단점을 보완하기위해 MVC 패턴을 사용하게 되었다.


3. MVC 패턴


MVC

: 컨트롤러와 뷰로 역할을 분리

  • Controller
    • HTTP 요청을 받아서 파라미터 검증
    • 비즈니스 로직 실행
    • 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다.
  • Model
    • 뷰에 출력할 데이터를 담아둔다.
    • 뷰가 필요한 데이터를 모두 모델에 담아서 전달해줘서 뷰는 비즈니스 로직이나 데이터 접근을 몰라도 화면 렌더링하는일에 집중할수있다.
  • View
    • 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중
    • HTML을 생성하는 일

여기에 컨트롤러의 역할을 분리해 서비스를 추가할수있다.

  • Service
    • 컨트롤러에 비즈니스로직을넣으면 컨트롤러가 너무 많은 일을하게된다.
    • 별도로 서비스라는 계층을 만들어서 처리
    • 컨트롤러는 서비스를 호출하는 담당
    • 비즈니스 로직을 변경하면 호출하는 컨트롤러의 코드도 변경될수있다.

<그림>

profile
기록과 반복
post-custom-banner

2개의 댓글

comment-user-thumbnail
2022년 5월 10일

유재형님 안녕하세요. 혹시 괜찮으시다면, 스프링 mvc 이미지 다운로드 받아서 사용해도 될까요?

1개의 답글