0. 개요
- 이전 포스팅에서 Servlet의 동작원리와 기본 사용법을 배웠다.
- 이번 포스팅에서는 JSP에 대해서 알아보자.
1. JSP의 등장
- Servlet은 동적 페이지를 구현하는 것이 매우 불편하다.
- Servlet은 Java 코드 내부에 HTML을 문자열로 만들어 반환하기 때문이다.
- 즉, HTML을 일일이 작성해야 하는 부분으로 인해 Servlet을 이용한 동적 페이지를 구현하는데 한계가 있다.
- 이와같은 이유로 JSP가 등장하게 된다.
a) Template Engine
- 위에서 설명한 불편함으로 인해 template engine의 필요성을 느끼게 된다.
- template engine이란, HTML 내부에 Java 코드를 넣는 방식을 사용하는 웹 페이지다.
- 대표적으로 JSP, Thymeleaf, Freemarker, Velocity 등이 template engine 기술이다.
2. JSP 기본 사용법
a) 라이브러리 추가
- JSP를 사용하기 위해서는 첫번째로 아래의 라이브러리를 추가해야한다.
- build.gradle 과 같이 프로젝트 빌드 파일에 라이브러리를 추가한다.
implementation 'org.apache.tomcat.embed:tomcat-embed-jasper'
implementation 'javax.servlet:jstl'
b) JSP 태그
- HTML 내부에서 Java 코드를 사용할 수 있는 것이 JSP의 역할이자 기능이다.
- 그러므로 JSP를 사용한다는 것을 HTML에게 알려야 하는데, 이를 아래의 태그를 통해 할 수 있다.
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
c) JSP에서 Java를 사용하는 방법
- 우선 아래의 코드를 살펴보자.
<%@ page import="hello.servlet.basic.domain.member.MemberRepository" %>
<%@ page import="hello.servlet.basic.domain.member.Member" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
MemberRepository memberRepository = MemberRepository.getInstance();
List<Member> members = memberRepository.findAll();
%>
<html>
<head>
<title>Title</title>
</head>
<body>
<a href="/index.html">메인</a>
<table>
<thead>
<th>id</th>
<th>username</th>
<th>age</th>
</thead>
<tbody>
<%
for (Member member : members) {
out.write(" <tr>");
out.write(" <td>" + member.getId() + "</td>");
out.write(" <td>" + member.getUsername() + "</td>");
out.write(" <td>" + member.getAge() + "</td>");
out.write(" </tr>");
}
%>
</tbody>
</table>
</body>
</html>
- 위의 코드를 보면 어느정도 JSP를 사용하는 방법에 대해 감이 올 것이다.
- 기본적인 문법은 Java를 그대로 사용하기 때문에 이해하는데 어려움이 없을 것이다.
- 다만 Java를 사용하기 위한 표현방법에 대해서 알아야 한다. 간단하게 알아보자.
d) Java를 표현하는 방법
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!-- 1. import 선언 -->
<%@ import ~ %>
<!-- 2. java 코드를 작성하는 태그 -->
<% %>
<!-- 3. java를 그대로 출력하는 태그 -->
<%= %>
- HTML 내부에서 Java를 작성하기 위해 사용되는 태그는 위의 예시와 같다.
- JSP의 기본적인 문법은 그렇게 어려운 것이 많지 않으니, 필요하다면 직접 찾아보는 것이 좋겠다.
2. JSP를 사용하지 않는 이유
- 최초의 JSP가 등장했을 때에는 엄청나게 인기를 끌었다.
- HTML 내부에서 Java를 사용할 수 있다는 것 자체가 혁신이니까 말이다.
- JSP를 이용하므로 Server에서 data를 HTML 내부에 삽입하여 동적 페이지를 원활하게 생성 및 관리할 수 있었다.
- 그러나 Servlet, JSP 마찬가지로 해결하지 못한 고질적인 문제 한가지가 있다.
a) Servlet과 JSP의 고질적인 문제
- Servlet은 Java 내부에 HTML을 작성할 수 있다.
- 반대로, JSP는 HTML 내부에 Java를 작성할 수 있다.
- 여기에는 한가지 공통점이자 문제점이 존재한다.
- 하나의 객체가 여러 가지의 역할을 담당한다는 것이다.
- Servlet의 경우, 하나의 컨트롤러에서 비즈니스 로직과 페이지 생성을 처리한다.
- JSP의 경우, 하나의 페이지에서 페이지 생성과 비즈니스 로직을 처리한다.
- 하나의 대상이 두가지 역할을 수행하는 것이다.
- 웹 컨텐츠에 대한 소모가 증가하면서, 하나의 JSP에서 처리해야하는 데이터가 증가했다.
- 그로인해 하나의 웹페이지에 비즈니스 로직과 view 로직이 복잡하게 얽히기 시작했다.
- 코드가 길어지고, 비즈니스 로직과 view 로직이 섞여 코드가 지저분해졌다.
- 결과적으로 유지보수의 문제가 발생하게 된다.
c) 해결방안
- 그렇다면 이러한 문제를 해결하기 위해서는 어떻게 해야할까?
- 간단하다. 역할을 분리하는 것이다.
- 이와 같은 이유로 JSP와 Servlet을 사용하여 front와 back을 구분하는 최초의 프레임워크가 등장한다.
- 다음 포스팅에서는 이에 대해 알아보도록 하자.
'Back-end > Spring MVC 개념' 카테고리의 다른 글
7. MVC 1의 동작원리와 한계점 (0) | 2022.03.02 |
---|---|
6. MVC 1의 등장 (0) | 2022.03.01 |
4. Servlet - 요청/응답 처리방법 (0) | 2022.02.25 |
3. Servlet - 기본 사용 방법 (0) | 2022.02.24 |
2. Servlet의 등장 (0) | 2022.02.23 |
댓글