WebJars는 CDN 방식을 주로 사용하는 Bootstrap이나 jQuery 같은 클라이언트 사이드 웹 라이브러리를 JAR 파일로 패키징하여, Maven이나 Gradle로 Java 라이브러리처럼 관리할 수 있게 해주는 서비스입니다.
프로젝트를 생성하는 방법은 다음과 같습니다.
프로젝트 생성이 완료되었습니다.
JSP 설정과 기본 프로젝트 구성 방법에 대해서는 이 링크를 참조하세요.
Webjars 공식 홈페이지(https://www.webjars.org/)에 접속합니다.

Classic만 체크한 후 jQuery 라이브러리를 검색합니다. 빌드툴은 Gradle을 선택합니다.

검색된 결과에서 Gradle 파일에 추가할 내용을 복사합니다.

이번에는 Classic만 체크한 후 Bootstrap 라이브러리를 검색합니다. 마찬가지로 빌드툴은 Gradle을 선택합니다.

검색된 결과에서 Gradle 파일에 추가할 내용을 복사합니다.

다음과 같이 build.gradle 파일에 Bootstrap CSS와 jQuery 사용을 위한 의존성을 추가합니다.
// WebJars에서 가져온 의존성 항목 추가
implementation 'org.webjars:jquery:3.7.1'
implementation 'org.webjars:bootstrap:5.3.3'
build.gradle 파일을 수정한 후에는 우클릭 > Gradle > Refresh Gradle Project 를 선택하여 해당 파일을 새로고침해야 변경사항이 적용됩니다.
JSP 파일에서 CSS와 JS 파일을 로딩하려면 <head> 영역에 이와 같이 추가합니다.
<!-- bootstrap 링크 -->
<link rel="stylesheet" href="/webjars/bootstrap/5.3.3/css/bootstrap.css" />
<script src="/webjars/bootstrap/5.3.3/js/bootstrap.bundle.js"></script>
<!-- jQuery 링크 -->
<script src="/webjars/jquery/3.7.1/jquery.js"></script>
경로는 Project And External Dependencies 폴더 하위의 bootstrap css 폴더와 jquery 폴더에서 확인 가능합니다.

필요한 라이브러리 파일을 찾아 우클릭 > Copy Qualified Name 을 선택하여 경로를 복사한 후 /webjars 부터 사용합니다.
뷰를 생성합니다. 다음과 같이 webapp/WEB-INF/views/home.jsp 파일을 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<!-- bootstrap 링크 -->
<link rel="stylesheet" href="/webjars/bootstrap/5.3.3/css/bootstrap.css" />
<script src="/webjars/bootstrap/5.3.3/js/bootstrap.bundle.js"></script>
<!-- jQuery 링크 -->
<script src="/webjars/jquery/3.7.1/jquery.js"></script>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>스프링 부트 프로젝트</h2>
<ul>
<li><a href="/">루트</a></li>
<li><a href="/json.do">simple-json 라이브러리 사용하기</a></li>
<li><a href="/jsonQuiz.do">퀴즈</a></li>
</ul>
<h2>Webjars - 부트스트랩</h2>
<button type="button" class="btn">Basic</button>
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-dark">Dark</button>
<button type="button" class="btn btn-light">Light</button>
<button type="button" class="btn btn-link">Link</button>
<h2>Webjars - jQuery</h2>
<button type="button" id="myBtn" class="btn btn-warning">
클릭하세요
</button>
<script>
$(function() {
$('#myBtn').click(function() {
alert("jQuery 동작하나요?");
});
});
</script>
</body>
</html>
이제 Bootstrap CSS와 jQuery가 적용된 것을 확인할 수 있습니다.
w3schools 홈페이지(https://www.w3schools.com/)을 참고하여 다음과 같이 webapp/WEB-INF/views/home.jsp 파일에 코드를 수정합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<!-- bootstrap 링크 -->
<link rel="stylesheet" href="/webjars/bootstrap/5.3.3/css/bootstrap.css" />
<script src="/webjars/bootstrap/5.3.3/js/bootstrap.bundle.js"></script>
<!-- jQuery 링크 -->
<script src="/webjars/jquery/3.7.1/jquery.js"></script>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>스프링 부트 프로젝트</h2>
<ul>
<li><a href="/">루트</a></li>
<li><a href="/json.do">simple-json 라이브러리 사용하기</a></li>
<li><a href="/jsonQuiz.do">퀴즈</a></li>
</ul>
<h2>Webjars - 부트스트랩</h2>
<button type="button" class="btn">Basic</button>
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-dark">Dark</button>
<button type="button" class="btn btn-light">Light</button>
<button type="button" class="btn btn-link">Link</button>
<h2>Webjars - jQuery</h2>
<button type="button" id="myBtn" class="btn btn-warning">
클릭하세요
</button>
<script>
$(function() {
$('#myBtn').click(function() {
alert("jQuery 동작하나요?");
});
});
</script>
<h2>BootStrap5의 Modal 구현하기</h2>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#myModal">
Open modal
</button>
</body>
<!-- The Modal - 댓글 수정폼 -->
<div class="modal" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<!-- Modal Header -->
<div class="modal-header">
<h4 class="modal-title">댓글 수정폼</h4>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<!-- Modal body -->
<div class="modal-body">
<textarea class="form-control" style="height: 100px;">내용을 입력합니다.
</textarea>
</div>
<!-- Modal footer -->
<div class="modal-footer">
<button type="submit" class="btn btn-primary">수정하기</button>
<button type="button" class="btn btn-danger" data-bs-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
</html>
이제 모달창을 사용할 수 있습니다.
다음과 같이 실행됩니다.

'클릭하세요' 버튼을 클릭하면 jQuery가 동작합니다.

'Open modal' 버튼을 클릭하면 모달창이 뜹니다.

이처럼 모달창을 추가하고 커스텀하여 사용할 수 있습니다.
대부분의 경우 앞선 방법으로 해결되지만, 잘 알려지지 않은 라이브러리나 특정 이유로 의존성 설정이 안 될 수도 있습니다. 이럴 때 사용할 수 있는 방법입니다.
메이븐저장소 홈페이지(https://mvnrepository.com/)에서 JSON.simple 라이브러리를 검색합니다.

Files 항목의 bundle 을 선택하여 다운로드합니다. 다운로드 한 파일은 프로젝트에 libs 폴더를 생성한 후 해당 폴더 하위에 복사합니다.
다음과 같이 build.gradle 파일에 의존성을 추가합니다.
// 이 프로젝트의 libs 폴더에 있는 모든 jar 파일을 라이브러리로 사용하겠다는 선언 문장 추가
implementation fileTree(dir: 'libs', include: ['*.jar'])
이제 JSON.simple 라이브러리를 사용할 수 있습니다.
뷰를 생성합니다. 다음과 같이 webapp/WEB-INF/views/home.jsp 파일을 작성합니다.
<h2>스프링 부트 프로젝트</h2>
<ul>
<li><a href="/">루트</a></li>
<li><a href="/json.do">simple-json 라이브러리 사용하기</a></li>
</ul>
컨트롤러를 생성합니다. 다음과 같이 com.edu.springboot.MainController.java 파일을 작성합니다.
package com.edu.springboot;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MainController {
@RequestMapping("/")
public String home() {
return "home";
}
/* 컨트롤러에서 매핑을 위한 메서드에서 @ResponseBody 어노테이션을 붙이면 반환되는 값을 즉시 웹브라우저에 출력한다.
* 이 어노테이션이 없다면 View의 경로를 반환하여 포워드 하게 된다. */
@RequestMapping("/json.do")
@ResponseBody
public String json() {
/* 외부라이브러리인 simple-json을 통해 사용할 수 있는 클래스로 JSON배열과 JSON객체를 만들어준다.
* JSONArray와 JSONObject의 사용법은 각각 List, Map 컬렉션과 완전히 동일하다. */
JSONArray arr = new JSONArray();
JSONObject obj = new JSONObject();
// JSON 배열에 데이터 추가
arr.add("손오공");
arr.add("저팔계");
arr.add("사오정");
// JSON 객체에 데이터 추가
obj.put("서유기", arr);
obj.put("result", 1);
// JSON을 String 형식으로 웹브라우저에 출력한다.
return obj.toJSONString();
}
}
다음과 같이 실행됩니다.

'simple-json 라이브러리 사용하기' 버튼을 클릭하면 JSON 배열을 포함한 JSON 객체가 출력됩니다.
