4-2. ⚡ 핵심 기능 고급기능
4.6 통계 및 로그
4.6.1 접속 통계(구글,옵션)
구글 Analytics(GA4)를 이용하여 사이트 방문자에 대한 다양한 통계 정보를 수집하고 분석하는 기능을 제공합니다.
주요 기능
- 일/월/요일/시간대별 방문자 통계
- 사이트/메뉴별 방문 통계
- 브라우저/OS 통계
통계 데이터 수집 방식
⚙️ 구글 Analytics 설정
관리자페이지를 통한 구글 Analytics 설정
📊 대시보드 시각화
대시보드를 통한 시각화
주요 클래스
humanframe.backoffice.controller.stats.AdminStatsController: 구글 통계 관리 컨트롤러humanframe.core.service.GoogleAnalyticsService: 구글 통계 관리 서비스
[코드 위치] /WEB-INF/jsp/theme/developers/layout/base_layout.jsp 페이지의 일부
<c:if test="${!empty curSiteVO.googleKey }">
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=${curSiteVO.googleKey}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '${curSiteVO.googleKey}');
</script>
</c:if>
4.6.2 메뉴 통계
사이트 메뉴에 대한 방문자수,페이지뷰 등 통계 정보를 제공합니다.
주요 기능
- 년/월/일별 기간에 따른 메뉴 방문 통계
- 그래프 및 엑셀 다운로드
통계 데이터 수집 방식
📝 로그 기록
사용자 접속 시 로그 기록
⏰ 스케줄러 실행
통계 데이터 생성 스케줄러 실행
📊 시각화
메뉴 통계 메뉴 통한 시각화
주요 클래스
humanframe.backoffice.controller.stats.AdminStatsMenuController: 메뉴 통계 관리 컨트롤러humanframe.backoffice.service.StatsMenuService: 메뉴 통계 관리 서비스humanframe.backoffice.dao.StatsMenuDAO: 메뉴 통계 관리 DAOhumanframe.backoffice.scheduler.statsMenuSchedulerBatch: 메뉴 통계 데이터 생성 스케줄러
[코드 위치] humanframe.backoffice.scheduler.statsMenuSchedulerBatch
@Service("statsMenuScheduling")
public class statsMenuSchedulerBatch {
@Resource(name="statsMenuService")
private StatsMenuService statsMenuService;
public void statsMenuMonth() throws Exception{
String day = getYesterdayYmd();
StatsMenuVO statsMenuVO = new StatsMenuVO();
statsMenuVO.setStatsYyyy(day.substring(0,4));
statsMenuVO.setStatsMm(day.substring(4,6));
statsMenuService.deleteStatsMenuMonth(statsMenuVO);
int result = statsMenuService.createStatsMenuMonth(statsMenuVO);
}
}
4.6.3 로그 관리
시스템 로그 및 사용자 활동 로그를 관리하는 기능을 제공합니다.
주요 기능
- 시스템 로그 관리
- 사용자 활동 로그 관리
- 오류 로그 관리
- 보안 로그 관리
- 로그 검색 및 필터링
주요 클래스
humanframe.backoffice.aop.aspect.admin.AdminLogAspect: 로그 기록 AOPhumanframe.backoffice.controller.mng.AdminMngrController: 로그 관리 컨트롤러humanframe.backoffice.service.MngLogService: 로그 관리 서비스humanframe.backoffice.dao.MngLogDAO: 로그 관리 DAO
[코드 위치] humanframe.backoffice.aop.aspect.admin.AdminLogAspect
@Aspect
@Order(2)
@Component
public class AdminLogAspect {
@Resource(name = "mngLogService")
private MngLogService mngLogService;
// 관리자 권한 체크
@Pointcut("execution(* humanframe.backoffice..Admin*Controller.form(..))"
+ "|| execution(* humanframe.backoffice..Admin*Controller.list(..))"
+ "|| execution(* humanframe.backoffice..Admin*Controller.view(..))"
+ "|| execution(* humanframe.backoffice..Admin*Controller.action(..))"
+ "|| execution(* humanframe.backoffice..Admin*Controller.logout(..))")
private void checkAdminLog() {}
@Before(value = "checkAdminLog()")
private void beforecheckAdminLog(
JoinPoint joinPoint)throws Exception {
// ... 중간 생략 (로그 저장 로직) ...
}
}
4.7 스케줄러
4.7.1 배치 작업 설정
주기적으로 실행되어야 하는 작업을 설정하고 관리하는 기능을 제공합니다.
주요 기능
- 배치 작업 등록/수정/삭제
- 실행 주기 설정
- 작업 상태 모니터링
- 작업 이력 관리
[코드 위치] humanframe/spring/context-scheduler.xml
<bean id="bbsCreateTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="bbsCreateJob" />
<property name="cronExpression" value="0 */10 * * * ?" />
</bean>
<bean id="statsMenuYearTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="statsMenuYearCreateJob" />
<property name="cronExpression" value="0 0 0 1 1 ?" />
</bean>
<bean id="statsMenuMonthTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail" ref="statsMenuMonthCreateJob" />
<property name="cronExpression" value="0 0 0 1 * ?" />
</bean>
4.7.2 주기적 작업 관리
홍익인간CMS에서 기본적으로 제공하는 주기적 작업들을 관리합니다.
주요 작업
- 메뉴 통계 데이터 생성
- 미니게시판 JSON 데이터 생성
주요 클래스
humanframe.backoffice.scheduler.statsMenuSchedulerBatch: 메뉴 통계 생성humanframe.backoffice.scheduler.BbsSchedulerBatch: 미니게시판 관련 배치 작업
[코드 위치] humanframe.backoffice.scheduler.BbsSchedulerBatch
public class BbsSchedulerBatch extends HumanAbstractController {
@Resource(name="bbsMiniService")
private BbsMiniService bbsMiniService;
/**
* 미니게시판 JSON 데이터 생성
*/
public void bbsCreate() throws Exception {
int result = 0;
List<Map<String, Object>> bbsMiniAllList = bbsMiniService.selectMiniListAll();
if(!bbsMiniAllList.isEmpty()) {
// JSON 파일 생성
}
Map<String, Object> resultObjectMap = new HashMap<String, Object>();
resultObjectMap.put("count", result);
logger.info("##### Json " +result+ "건 생성 완료");
logger.info("##### Json Create End");
}
}
4.8 서버 환경 및 시스템 기능
4.8.1 개발 서버 환경
홍익인간CMS는 다음과 같은 서버 환경에서 동작합니다:
WAS
Apache Tomcat-9.0.80
JDK
OpenJDK-1.8.0.252
4.8.2 주요 시스템 기능
홍익인간CMS는 다음과 같은 주요 시스템 기능을 제공합니다:
암호화
- AES256, SHA-256 알고리즘 지원
- 개인정보 및 비밀번호 암호화
스케줄링
- Quartz 기반 스케줄러
- context-scheduler.xml에서 설정
메일 기능
- SMTP 기반 메일 발송
- 템플릿 기반 메일 내용 구성
엑셀 업로드/다운로드
- Apache POI 라이브러리 활용
- 대용량 데이터 처리 지원
- JSP Excel 다운로드 (HTML Table 방식) 혼용
파일 업로드/다운로드
- 다중 파일 업로드
- 파일 타입 및 크기 제한
- 다운로드 권한 관리
웹에디터
- SMART, KUKUDOCS, EDITORPLUS 지원
- 이미지 업로드 및 관리 기능
레이아웃
- Apache Tiles (버전 3.0.5) 기반 레이아웃 관리
- 템플릿 기반 페이지 구성
4.9 유틸리티 클래스
홍익인간CMS는 다양한 유틸리티 클래스를 제공하여 개발 편의성을 높입니다.
주요 유틸리티 클래스
FileUtil
파일 쓰기/읽기 처리, 파일 확장자 검증
String fileString = FileUtil.readFile(filePath);
HumanComUtil
공통 유틸리티, Bean 객체 직접 얻기
MngrSiteService mngrSiteService = (MngrSiteService)HumanComUtil.getBean("mngrSiteService");
HumanCryptoUtil
암호화/복호화 기능, ARIA+Base64 알고리즘 지원
String encryptedText = HumanCryptoUtil.encrypt(plainText);
String plainText = HumanCryptoUtil.decrypt(encryptedText);
HumanHttpUtil
HTTP 요청/응답 처리, REST API 호출
String response = HumanHttpUtil.getHttpForm(url, paramMap);
HumanMailUtil
메일 발송 기능, 템플릿 기반 메일 내용 구성
HumanMailUtil.sendMail(from, to, subject, content);
HumanReqUtil
HTTP 요청 분석 유틸리티, 실제 클라이언트 IP 주소 추출
String ip = HumanReqUtil.getIp(request);
HumanStringUtil
문자열 처리, 인코딩 변환
String stringDate = HumanStringUtil.convertDateFormat(date, "yyyy-MM-dd" );
HumanUriUtil
사이트정보/메뉴정보를 바탕으로 Uri 생성
String formUri = HumanUriUtil.getCurrUri(curSite, curMenu);
LoginManager
로그인 세션 관리
LoginManager loginManager = LoginManager.getInstance();
loginManager.setSession(session, mngrVO.getMngrId());
4.10 Tag Library
홍익인간CMS는 다양한 태그 라이브러리를 제공하여 JSP 페이지 개발을 용이하게 합니다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://tiles.apache.org/tags-tiles" prefix="tiles" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="f" %>
<%@ taglib uri="/WEB-INF/tld/double-submit" prefix="double-submit" %>
<%@ taglib uri="/WEB-INF/tld/cms.tld" prefix="cms" %>
<%@ taglib uri="/WEB-INF/tld/cms-function.tld" prefix="cmsFn" %>
<%@ taglib uri="/WEB-INF/tld/cms-button.tld" prefix="cmsBtn" %>
<%@ taglib uri="/WEB-INF/tld/cms-button2.tld" prefix="cmsBtn2" %>
주요 태그 라이브러리
cms.tld
기본 CMS 태그, 페이징, CCL 관련 태그
<cms:paging listVO="${listVO}"
firstIcon="<i class='fa fa-angle-double-left'></i>"
prevIcon="<i class='fa fa-angle-left'></i>"
nextIcon="<i class='fa fa-angle-right'></i>"
lastIcon="<i class='fa fa-angle-double-right'></i>"
cssClass="pagination pull-right"/>
cms-button.tld
게시판 버튼 관련 태그, 권한에 따른 버튼 표시 제어
<cmsBtn:list admin="true" cssClass="btn btn-default">목록</cmsBtn:list>
cms-button2.tld
관리자 일반 버튼 관련 태그, 권한에 따른 버튼 표시 제어
<cmsBtn2:btn btnTy="save" path="${curPath}" mngrSession="${mngrSession }" >저장</cmsBtn2:btn>
cms-function.tld
유틸리티 함수, 문자열 처리, 날짜 처리 등
${cmsFn:convertDate(item.value, 'yyyy.MM.dd') }
double-submit.tld
중복 제출 방지 태그, 세션 기반 토큰 관리, CSRF 방지, 다중 폼 지원
<button type="submit" class="btn btn-primary hidden-xs">계정 신청</button>
<double-submit:preventer/>
4.11 관리자 페이지 주요 기능별 관련 소스
홍익인간CMS의 관리자 페이지는 다양한 기능을 제공하며, 각 기능별로 관련된 소스 코드를 이해하는 것이 중요합니다. 이 섹션에서는 관리자 페이지의 주요 기능별 관련 소스 코드 구조를 설명합니다.
4.11.1 로그인 및 인증 관련 소스
관리자 로그인 및 인증 관련 소스 코드는 다음과 같습니다.
주요 클래스
| 구분 | 클래스명 | 설명 |
|---|---|---|
| 컨트롤러 | humanframe.backoffice.controller.login.AdminLoginController |
로그인 컨트롤러 |
| 유틸 | humanframe.backoffice.util.LoginManager |
로그인 관리 유틸 |
| 인터셉터 | humanframe.backoffice.interceptor.CMSAdminInterceptor |
관리자 인터셉터 |
| 세션 | humanframe.backoffice.session.MngrSession |
관리자 세션 |
주요 JSP 파일
/WEB-INF/jsp/admin/login/login.jsp: 로그인 페이지/WEB-INF/jsp/admin/login/mngrReqForm.jsp: 관리자 계정 신청 페이지
인증 처리 흐름
로그인 요청 → AdminLoginController → LoginManager → 인증 처리 → MngrSession 생성 → 메인 페이지 이동
4.11.2 메뉴 관리 관련 소스
관리자 메뉴 관리 기능 관련 소스 코드는 다음과 같습니다.
주요 클래스
| 구분 | 클래스명 |
|---|---|
| 컨트롤러 | humanframe.backoffice.controller.mng.AdminMngMenuController |
| 서비스 | humanframe.backoffice.service.impl.MngMenuServiceImpl |
| DAO | humanframe.backoffice.dao.MngMenuDAO |
| VO | humanframe.backoffice.vo.MngMenuVO |
주요 파일
- JSP:
/WEB-INF/jsp/admin/site/menu/form.jsp(메뉴 등록/수정 폼) - JSP:
/WEB-INF/jsp/admin/site/menu/popup(메뉴 관련 팝업 디렉토리) - SQL 매퍼:
human-mng-menu.xml
4.11.3 게시판 관리 관련 소스
게시판 관리 기능 관련 소스 코드는 다음과 같습니다.
주요 컨트롤러
| 컨트롤러 | 설명 |
|---|---|
AdminBbsController |
게시판 관리 |
AdminBbsSettingController |
게시판 설정 |
AdminBbsType1Controller |
일반형 게시판 |
AdminBbsType2Controller |
답글형 게시판 |
AdminBbsType3Controller |
이미지 게시판 |
AdminBbsType4Controller |
동영상 게시판 |
AdminBbsType5Controller |
Q&A 게시판 |
AdminBbsType6Controller |
FAQ 게시판 |
AdminBbsType7Controller |
일정형 게시판 |
AdminBbsType8Controller |
링크형 게시판 |
주요 서비스 및 DAO
- 서비스:
BbsSettingServiceImpl,BbsTypeServiceImpl - DAO:
BbsSettingDAO,BbsTypeDAO - VO:
BbsSettingVO,BbsTypeVO,BbsType1VO
주요 파일
- JSP:
/WEB-INF/jsp/admin/bbs/list.jsp(게시판 목록) - JSP:
/WEB-INF/jsp/admin/bbs/setting_form.jsp(게시판 등록/수정 폼) - JSP:
/WEB-INF/jsp/admin/bbs/type1/list.jsp(일반형 게시판 목록) - SQL 매퍼:
human-bbs-st.xml,human-bbs-type.xml,human-bbs-type1.xml
4.11.4 회원 관리 관련 소스
주요 클래스
- 컨트롤러:
humanframe.backoffice.controller.mber.AdminMberController - 서비스:
humanframe.backoffice.service.impl.MberServiceImpl - DAO:
humanframe.backoffice.dao.MberDAO - VO:
humanframe.backoffice.vo.MberVO
주요 파일
- JSP:
/WEB-INF/jsp/admin/mber/list.jsp,form.jsp,view.jsp - SQL 매퍼:
human-mber.xml
4.11.5 콘텐츠 관리 관련 소스
주요 클래스
- 컨트롤러:
humanframe.backoffice.controller.cntnts.AdminCntntsController - 서비스:
humanframe.backoffice.service.impl.CntntsServiceImpl - DAO:
humanframe.backoffice.dao.CntntsDAO - VO:
humanframe.backoffice.vo.CntntsVO
주요 파일
- JSP:
/WEB-INF/jsp/admin/cntnts/list.jsp,form.jsp,view.jsp - SQL 매퍼:
human-cntnts.xml,human-cntnts-hist.xml
4.11.6 배너 관리 관련 소스
주요 클래스
- 컨트롤러:
humanframe.backoffice.controller.banner.AdminBannerController - 서비스:
humanframe.backoffice.service.impl.BannerServiceImpl - DAO:
humanframe.backoffice.dao.BannerDAO - VO:
humanframe.backoffice.vo.BannerVO
주요 파일
- JSP:
/WEB-INF/jsp/admin/banner/list.jsp,form.jsp,view.jsp - SQL 매퍼:
human-banner.xml
4.11.7 팝업 관리 관련 소스
주요 클래스
- 컨트롤러:
humanframe.backoffice.controller.popup.AdminPopupController - 서비스:
humanframe.backoffice.service.impl.PopupServiceImpl - DAO:
humanframe.backoffice.dao.PopupDAO - VO:
humanframe.backoffice.vo.PopupVO
주요 파일
- JSP:
/WEB-INF/jsp/admin/popup/list.jsp,form.jsp,view.jsp - SQL 매퍼:
human-popup.xml
4.11.8 메뉴 통계 관리 관련 소스
주요 클래스
- 컨트롤러:
humanframe.backoffice.controller.stats.AdminStatsMenuController - 서비스:
humanframe.backoffice.service.impl.StatsMenuServiceImpl - DAO:
humanframe.backoffice.dao.StatsMenuDAO - VO:
humanframe.backoffice.vo.StatsMenuVO - 스케줄러:
humanframe.backoffice.scheduler.statsMenuSchedulerBatch
주요 파일
- JSP:
/WEB-INF/jsp/admin/stats/menu/list.jsp,excel.jsp - SQL 매퍼:
human-stats_menu.xml
4.11.9 시스템 관리 관련 소스
시스템 관리 기능 관련 소스 코드는 다음과 같습니다.
주요 컨트롤러
| 컨트롤러 | 설명 |
|---|---|
AdminCodeController |
코드 관리 |
AdminMngrController |
관리자 관리 |
AdminMngAuthorController |
권한 관리 |
AdminMngMenuController |
시스템메뉴 관리 |
주요 서비스
CodeServiceImpl: 코드 관리 서비스MngrServiceImpl: 관리자 관리 서비스MngAuthorServiceImpl: 권한 관리 서비스MngMenuServiceImpl: 시스템메뉴 관리 서비스
주요 파일
- JSP:
/WEB-INF/jsp/admin/mng/code/form.jsp(코드 관리) - JSP:
/WEB-INF/jsp/admin/mng/mngr/list.jsp(관리자 목록) - JSP:
/WEB-INF/jsp/admin/mng/author/list.jsp(권한 목록) - JSP:
/WEB-INF/jsp/admin/mng/menu/form.jsp(시스템메뉴 목록) - SQL 매퍼:
human-code.xml,human-mngr.xml,human-mng-author.xml,human-mng-menu.xml