자바시리즈 3 - JSP의 등장, MVC 아키텍쳐

Taeseon Kim·2023년 4월 5일
0

Servlet이 등장한 이후, 위와 같이 html 태그를 한줄 씩 작성하여 response를 작성했다. 하지만 손이 너무 많이 가는 방식이라고 판단되어 큰 틀의 html을 미리 짜놓고, 그 안의 동적 요소만 인자값에 따라 달라지는 templete을 만들게 된다.

하지만 templete을 사용하는 방법 또한 손이 너무 많이 갈 뿐 아니라, html내용이 변함에 따라 전체적으로 모두 개편해야 하는 상황이 발생하게 된다.

JSP

지난 포스팅에서 다뤘던 Servlet이 자바 코드에 html을 담는 개념이었다면,
JSP는 html에 자바 코드를 담은 형태로 이루어지는 기술이다.
자바 코드를 사용하기 위해 JSTL이라는 형식을 사용해 html태그 사이에 JSTL태그가 섞여 들어가게 된다.
물론 html 형식에 자바 코드를 담은 형태로 이루어지지만, 실제로는 JVM에서 동작하는 자바 클래스이다.

따라서 JSP 요청이 오게 되면, Servlet을 통해 자바 클래스로 변환된 후, JSTL 문법을 추출하여 처리하고, 순수한 html코드로 만들어 response 객체에 담기게 된다.

그래서 jsp를 사용한 프로젝트의 html을 보게 되면,

위 페이지의 경우, <ul>태그 안에 <li>태그를 <c:forEach>태그로 동적 생성한 코드이다. 하지만 결국 우리가 브라우저로 볼 수 있는 결과물 html에서는 JSTL문법의 흔적 없이 순수한 <li>들 만을 볼 수 있다.

JSP의 작동 원리는 다음과 같다. 이전 포스팅에서 Web Server와 WAS의 개념을 보고 오면 이해가 빠를 것이다. 이전 포스팅 보러가기

  1. Web Server로 JSP 요청이 들어온다.
  2. WAS는 JSP에 관한 Servlet을 메모리에 올리고 쓰레드를 생성한다.
  3. 해당 쓰레드에서 요청에 필요한 로직을 처리한다.
  4. 처리 중 JSP의 JSTL 문법을 해체하여 로직을 통해 나온 데이터를 더해 순수한 html코드로 변환하여 response로 내보낸다.
  5. WAS는 나온 response를 HttpServletResponse 객체의 형태로 바꾸어 Web Server로 내보낸다.
  6. 쓰레드를 종료하고, 요청에 관한 HttpServletRequest 객체와 HttpServletResponse 객체를 제거한다.
  7. Web Server는 HttpServletResponse를 클라이언트에 보낸다.

MVC Architecture

위와 같은 방식으로 JSP를 통해 화면을 구성하는 방법이 일반화되면서, 웹 시장은 Servlet, JSP를 함께 활용하는 현재의 SSR 환경이 갖추어지게 된다.

MVC 모델의 본질은 관심사의 분리에 있다. 컴퓨터가 데이터를 인식하고 처리하는 방식과 사람이 세상을 인식하는 방식을 분리하는 것, 즉 비즈니스 로직과 화면을 분리하고, 이 둘을 이어주는 부분을 만들자는 것이 MVC 모델이다.

Servlet과 JSP를 사용하는 컨텐츠는 다음과 같은 구조를 갖는다.

  • Controller는 User로부터 요청을 받고, Model에 명령한다.
  • Model은 Controller로부터 명령을 받아 상태를 수정한다.
  • View는 사용자에게 보여줄 정보를 Model로부터 받아 화면을 구성한다.

이 시점에서 비즈니스 로직을 처리하는 Servlet과 DB를 담당하는 개발자(Model), 퍼블리싱과 JSP를 처리하는 개발자의 역할(View)이 나뉘게 된다.

profile
공부하여 이해가 된 것만 정리합니다.

0개의 댓글