Bootstrap은 가장 널리 사용되는 CSS 프레임워크!
과거에는 Bootstrap 웹사이트에 가서, Bootstrap CSS 파일을 다운로드하고 그걸 static 폴더에 직접 넣어주어야 했다. 또 새로운 Bootstrap 버전이 나오면 이 과정을 반복해야 했다. 너무 복잡하고 번거로운 일이었다..
하지만! 이제는 webjars 라는 새로운 프로세스가 등장해, 수동으로 Bootstrap을 다운받을 필요없이 자동으로 할 수 있게 되었다.
pom.xml 파일에 의존성 주입을 통해 apache tomcat embed, jstl, glassfish를 직접 다운받을 필요가 없었듯이, Bootstrap 또한 webjars를 통해 비교적 쉽게 다운받을 수 있다.
<dependency>
<groupId>org.webjars</groupId>
<artifactId>bootstrap</artifactId>
<version>5.1.3</version>
</dependency>
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.6.0</version>
</dependency>
pom.xml에 변경이 있을 때마다, 기존의 실행되던 어플리케이션을 정지하고 다시 실행시켜야 한다는 사실을 잊지 말 것.
웹페이지를 로딩할 때는, 언제나 css 파일이 먼저 로딩될 것
webjars로부터 파일을 사용할 때는, 언제나 META-INT/resources/ 를 지정할 필요가 없다.
css 파일 위치 : head 시작 태그 아래에 <link href = "" rel = "stylesheet">
js 파일 위치 : body 종료 태그 바로 위에 <script src = "" ></script>
실제로 JSTL Core tag를 적용한 listTodos.jsp 파일에 webjars를 이용한 bootstrap css를 적용한 코드는 다음과 같다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<link href = "webjars/bootstrap/5.1.3/css/bootstrap.min.css" rel = "stylesheet">
<title>List Todos Page</title>
</head>
<body>
<div>Welcome ${name}</div>
<div>Your todos</div>
<table>
<thead>
<tr>
<th>id</th>
<th>Description</th>
<th>Deadline</th>
<th>is Done?</th>
</tr>
</thead>
<tbody>
<c:forEach items = "${todos}" var = "todo">
<tr>
<td>${todo.id}</td>
<td>${todo.description}</td>
<td>${todo.deadline}</td>
<td>${todo.done}</td>
</tr>
</c:forEach>
</tbody>
</table>
<script src = "webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script>
<script src = "webjars/jquery/3.6.0/jquery.min.js"></script>
</body>
</html>
실제로 listTodos.jsp에 위 코드와 같이 css파일과 js파일을 로딩한 결과, 어떤 변화가 있는지 체크해보겠다.
개발자도구 - Networks - Doc 탭에서 보는 Http request와 Http response를 보고, All 탭에서 본 다운로드받은 js, css 파일들을 확인해보았다.
/list-todos URL로 들어온 GET메서드의 request를 TodoController의 listAllTodos()메서드가 잡는다.
해당 listAllTodos메서드에서 return한 뷰 이름인 listTodos.jsp를 ViewResolver에서 찾아준다. 해당 과정은 Spring 시리즈에서 정리한 Spring MVC의 작동흐름 : DispatcherServlet과 FrontController와 같이 보면 이해가 쉽다.
서버인 jsp에서는 다음과 같은 Http response 코드를 작업해서 HTML 코드를 렌더링해서 브라우저에 보여준다. 해당 Http response의 코드는 listTodos.jsp 코드와 동일한 것을 확인할 수 있다.
또한 이번에는 Network탭이 아닌 All 탭에 가서 보니, list-todos 네트워크뿐만 아니라, 앞서 jsp코드에 로드했던 bootstrap.min.css와 bootstrap.min.js, jquery.min.js 모두 브라우저에 잘 다운로드받을 것을 확인할 수 있었다!
Bootstrap.css에서는 body 태그 하위의 모든 콘텐츠에, <div class = "container"></div>
를 추가해주는 것이 권고사항이다.
Bootstrap은 table 태그에도 많은 class를 제공해준다. <table class = "table">
위의 2가지 상황을 적용한 최종 코드와 실행결과는 다음과 같다.
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<link href = "webjars/bootstrap/5.1.3/css/bootstrap.min.css" rel = "stylesheet">
<title>List Todos Page</title>
</head>
<body>
<div class = "container">
<h1>Your Todos</h1>
<table class = "table">
<thead>
<tr>
<th>id</th>
<th>Description</th>
<th>Deadline</th>
<th>is Done?</th>
</tr>
</thead>
<tbody>
<c:forEach items = "${todos}" var = "todo">
<tr>
<td>${todo.id}</td>
<td>${todo.description}</td>
<td>${todo.deadline}</td>
<td>${todo.done}</td>
</tr>
</c:forEach>
</tbody>
</table>
<script src="webjars/bootstrap/5.1.3/js/bootstrap.min.js"></script>
<script src="webjars/jquery/3.6.0/jquery.min.js"></script>
</div>
</body>
</html>
이 시리즈는 Udemy 강의의 내용을 정리한 것입니다.
https://www.udemy.com/course/spring-boot-and-spring-framework-korean/