OPEN SOURCE/FullCalendar

[FullCalendar] ํ’€์บ˜๋ฆฐ๋”(FullCalendar) ๋งŒ๋“ค๊ธฐ / ๊ธฐ๋ณธ ํ’€์บ˜๋ฆฐ๋” ์‚ฌ์šฉ๋ฐฉ๋ฒ•

Junesker 2024. 6. 14. 12:37
๋ฐ˜์‘ํ˜•

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค FullCalendar

 

 

 

 

 

ํ’€์บ˜๋ฆฐ๋”(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 ๋งŒ๋“ค๊ธฐ

 

 

 

 

 


๊ธฐ๋ณธ์ ์œผ๋กœ FullCalendar JS๋Š” CDN, ๋ฒ„์ „๋ณ„ ์••์ถ•ํŒŒ์ผ, ๋“ฑ์„ ์ œ๊ณตํ•˜์—ฌ ์บ˜๋ฆฐ๋”๋ฅผ ๋งŒ๋“ค์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•œ๋‹ค. ์ด๋•Œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋  ๋ฒˆ๋“ค ํŒŒ์ผ์ธ '/fullcalendar/index.global.js'๋Š” ๊ธฐ๋ณธ ๋ฒˆ๋“ค์ด ์žˆ๊ณ  ํ”„๋ฆฌ๋ฏธ์—„ ๋ฒ„์ „ ๊ทธ๋ฆฌ๊ณ  ๊ฐœ๋ณ„ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์กด์žฌํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ๋Š” ๊ธฐ๋ณธ ๋ฒˆ๋“ค์— ํ•ด๋‹นํ•˜๋Š” 'index.global.js'๋ฅผ ์ด์šฉํ•˜๋ฉด ๋˜๊ณ  ๋” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต ๋ฐ›๊ธธ ์›ํ•œ๋‹ค๋ฉด ํ”„๋ฆฌ๋ฏธ์—„ ๋ฒˆ๋“ค์— ํ•ด๋‹นํ•˜๋Š”๋ฐ ' /fullcalendar-scheduler/index.global.js'๋ฅผ ์ด์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

 

 

 

FullCalendar JS๋ฅผ ์†Œ๊ฐœํ•˜๋Š” ๋‚ด์šฉ์€, FullCalendar ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ๋‚ด์šฉ์„ ์ ๊ทน ์ฐธ๊ณ ํ•˜์—ฌ ์ž‘์„ฑ๋œ ๊ธ€์ž„์„ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๋‚ด์šฉ์€ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ๋ฉ”์ธ ๋‚ด์šฉ ๋ฐ Documents ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

@Junesker


 

๋ฐ˜์‘ํ˜•