본문 바로가기
Back-end/Spring MVC 개념

5. JSP의 등장

by devraphy 2022. 2. 28.

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

댓글