ํ์บ๋ฆฐ๋(FullCalendar) JS๋ฅผ ์ด์ฉํ์ฌ ์บ๋ฆฐ๋ ๋ง๋ค๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ์ ์คํ์์ค FullCalendar๋ ๋ค์ํ ์์์ ์ ๊ณตํฉ๋๋ค. ScriptTag, ES6 Build, TypeScript, React Connector(Next ์ง์), Vue Connector(Next ์ง์), Angular Connector ๋ฑ ๋ค์ํ ์์์ ์ง์ํ์ง๋ง ๋ณธ ์์ฑ์๊ฐ ์๊ฐํ ๋ฐฉ๋ฒ์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ์์ํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๊ณ ์ ํฉ๋๋ค.
๊ฐ๋ฐ ํ๊ฒฝ
IDE Tool | STS 3.9.15(Eclipse 4.16) |
SpringFramework | 5.3.25 |
JDK | 1.8 |
Apache-Tomcat | 8.5 |
FullCalendar JS | fullcalendar-6.1.14 |
ORM | Mybatis |
Database | Oracle Database 11g XE |
FullCalendar JS๋ฅผ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๊ฐ๋ฐ ์ค์ ์ฒ๋ผ STS 3.9.15, SpringFramework๋ 5.3.25, JDK 1.8, ์๋ฒ๋ Apache-Tomcat 8.5๋ฅผ ํ์ฉํด ํ์บ๋ฆฐ๋๋ฅผ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก FullCalendar JS๋ฅผ ํ์ฉํด ํ์บ๋ฆฐ๋๋ฅผ ๋์ฐ๋๋ฐ์๋ ์ ๊ฐ๋ฐ ํ๊ฒฝ์ฒ๋ผ ๋ชจ๋ ํ์ํ ์คํฉ์ ์๋๋ค. ๊ธฐ๋ณธ์ ์ธ Dynamic Web Project ๋ง์ผ๋ก๋ ์ถฉ๋ถํ ๋์ธ ์ ์๋ค. ํ์ง๋ง, ์ถํ์ ์ผ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ๋ง๋ค๊ธฐ ์ํด์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฐ๋ํด์ผํ๊ณ ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํ ๋น ๋ฅธ ๊ฐ๋ฐ์ ํ๊ธฐ ์ํด์ ๋ค๋ฅธ ๊ฐ๋ฐ ์คํ๋ ์ถ๊ฐํ์๋ค.
์คํฌ๋ฆฝํธ ํ๊ทธ๋ก ์ด๊ธฐํ
HTML ํ์ด์ง์ <head></head> ํ๊ทธ ๋ด ํ์ํ ํ๊ทธ๋ฅผ ์๋์ผ๋ก ํฌํจ์ํจ ํ ๋ธ๋ผ์ฐ์ ์ ์ญ์ ํตํด ๋ฌ๋ ฅ์ ์ด๊ธฐํํ ์ ์๋ค. FullCalendar์ ์ฌ์ ๊ตฌ์ถ๋ ๋ฒ๋ค ์ค ํ๋๋ฅผ ํ์ฉ(์ ์ฒด CDN)ํ๊ฑฐ๋ ๊ฐ๋ณ ํ๋ฌ๊ทธ์ธ์ ํ์ฉํ์ฌ FullCalendar๋ฅผ ์ด๊ธฐํํ ์ ์๋ค.
1. FullCalendar JS๋ฅผ ์ฌ์ฉํ ์ ์๋๋ก CDN ๋๋ FullCalendar JS ํน์ ๋ฒ์ ์ ์์ง ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์์ JSํ์ผ์ ๋ฑ๋กํฉ๋๋ค.
[FullCalendar JS CDN์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ]
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.14/index.global.min.js"></script>
[FullCalendar JS ์์ง ํ์ผ์ ์ด์ฉํ ๋ฐฉ๋ฒ]
<script src="/resources/js/index.global.min.js"></script>
FullCalendar ๋ฒ๋คํ์ผ์ธ 'index.global.js' or 'index.global.min.js' ์๋ ๋ค์๊ณผ ๊ฐ์ ํจํค์ง๊ฐ ํฌํจ๋์ด ์๋ค.
- @fullcalendar/core
- @fullcalendar/interaction (๋ ์ง ์ ํ, ์ด๋ฒคํธ ๋๋๊ทธ ๋ฐ ํฌ๊ธฐ ์กฐ์ )
- @fullcalendar/daygrid (์ ๋ฐ dayGrid ๋ณด๊ธฐ์ ๊ฒฝ์ฐ)
- @fullcalendar/timegrid (timeGrid ๋ทฐ์ ๊ฒฝ์ฐ)
- @fullcalendar/list (๋ชฉ๋ก ๋ณด๊ธฐ์ ๊ฒฝ์ฐ)
- @fullcalendar/multimonth (๋ค๊ฐ์ ๋ณด๊ธฐ์ ๊ฒฝ์ฐ)
FullCalendar JS์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ๋ฒ๋ค์ ๊ฒฝ์ฐ, ์ 6๊ฐ์ง์ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์๋ค๋ฉด, ๋ ๋ง์ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์๋ ๋ฒ๋ค์ ํ๋ฆฌ๋ฏธ์ ๋ฒ๋ค์ด ์๋ค. ํ๋ฆฌ๋ฏธ์ ๋ฒ๋ค์ ๊ธฐ๋ณธ ๋ฒ๋ค ํฌํจ ์ด 13๊ฐ์ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์๋ค. ์๋ฌด๋๋ ๊ธฐ๋ณธ ๋ฒ๋ค๋ณด๋ค๋ ๋ ๋ง์ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์์ด ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ๋ง๋ค ์ ์๋ค.
2. bodyํ๊ทธ ์์ calendar๋ฅผ ์ถ๋ ฅํ div๋ฅผ ๋ง๋ค์ด์ค๋๋ค.
<body>
<div id='calendar'></div>
</body>
3. scriptํ๊ทธ ์์ calendar๋ฅผ ๋์ธ ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ์ ๋ฃ๋๋ค.
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView: 'dayGridMonth'
});
calendar.render();
});
</script>
4. id๊ฐ calendar์ธ div์์ญ ์์ FullCalendar๊ฐ ๋ง๋ค์ด์ ธ ์๋ ๋ชจ์ต์ ํ์ธํ ์ ์๋ค.
[FullCalendar JS ์ ์ฉ Source]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- FullCalendar JS ์์ง ํ์ผ์ ์ด์ฉํ ๋ฐฉ๋ฒ -->
<!-- <script type="text/javascript" src="/resources/js/index.global.min.js"></script> -->
<!-- FullCalendar JS CDN์ ์ด์ฉํ ๋ฐฉ๋ฒ -->
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@6.1.14/index.global.min.js"></script>
</head>
<body>
<div id="calendar"></div>
</body>
<script>
document.addEventListener('DOMContentLoaded', function() {
var calendarEl = document.getElementById('calendar');
var calendar = new FullCalendar.Calendar(calendarEl, {
initialView : 'dayGridMonth'
});
calendar.render();
});
</script>
</html>
[FullCalendar JS ์ ์ฉ View]
๊ธฐ๋ณธ์ ์ผ๋ก FullCalendar JS๋ CDN, ๋ฒ์ ๋ณ ์์ถํ์ผ, ๋ฑ์ ์ ๊ณตํ์ฌ ์บ๋ฆฐ๋๋ฅผ ๋ง๋ค์ ์๋๋ก ์ ๊ณตํ๋ค. ์ด๋ ์ฌ์ฉํ๊ฒ ๋ ๋ฒ๋ค ํ์ผ์ธ '/fullcalendar/index.global.js'๋ ๊ธฐ๋ณธ ๋ฒ๋ค์ด ์๊ณ ํ๋ฆฌ๋ฏธ์ ๋ฒ์ ๊ทธ๋ฆฌ๊ณ ๊ฐ๋ณ ํ๋ฌ๊ทธ์ธ์ผ๋ก ์กด์ฌํ๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก๋ ๊ธฐ๋ณธ ๋ฒ๋ค์ ํด๋นํ๋ 'index.global.js'๋ฅผ ์ด์ฉํ๋ฉด ๋๊ณ ๋ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณต ๋ฐ๊ธธ ์ํ๋ค๋ฉด ํ๋ฆฌ๋ฏธ์ ๋ฒ๋ค์ ํด๋นํ๋๋ฐ ' /fullcalendar-scheduler/index.global.js'๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
FullCalendar JS๋ฅผ ์๊ฐํ๋ ๋ด์ฉ์, FullCalendar ๊ณต์ ํํ์ด์ง์ ๋ด์ฉ์ ์ ๊ทน ์ฐธ๊ณ ํ์ฌ ์์ฑ๋ ๊ธ์์ ๋ช ์ํฉ๋๋ค. ๋ชจ๋ ๋ด์ฉ์ ๊ณต์ ํํ์ด์ง ๋ฉ์ธ ๋ด์ฉ ๋ฐ Documents ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ์์ต๋๋ค.
@Junesker