Initial commit

This commit is contained in:
2026-05-29 17:49:25 +09:00
commit 330105cb27
1081 changed files with 148694 additions and 0 deletions
@@ -0,0 +1 @@
= SQL Logging
@@ -0,0 +1,9 @@
= 로거(Logger) 관리
== 개요
시스템 Logger 내역을 조회 및 log level을 변경할 수 있다.
image::loggerMgmt.png[로거 관리]
<1> Logger name별 설정된 configuration 내역(log4j2.xml)을 조회할 수 있다.
<2> Logger name별로 log level 을 변경할 수 있다.
@@ -0,0 +1,70 @@
= 로그인 이력
== 개요
사용자가 시스템에 로그인한 이력을 조회
== Table
* 로그인 이력 : TN_CF_LOGIN_OUT
* 사용자 : TN_CF_USER
== API
.HistoryController.java
. 로그인 이력 목록 조회 +
GET /history/login-out-logs
Query ID : selectListLoginOut
== 화면
사용자가 시스템에 로그인한 이력을 조회
image::loginHistory.png[]
== LoginOutLogInterceptor
시스템에 사용자가 로그인/아웃을 하면 LoginOutLogInterceptor에 의해 사용자 정보가 저장된다.
LoginOutLogInterceptor는 LoginInterceptor의 구현클래스로 LoginInterceptor의 자세한 설명은 <<_로그인, 로그인>>의 **로그인/아웃 전,후 처리**를 참고한다.
[source, java]
----
@Override
public void postLogin(HttpServletRequest request, HttpServletResponse response, User user) {
LoginOut loginOut = new LoginOut();
if (StringUtils.isNotEmpty(user.getJwt())) {
loginOut.setToken(user.getJwt().substring(user.getJwt().lastIndexOf('.') + 1));
}
loginOut.setUserId(user.getUserId());
loginOut.setLoginTime(new Date());
loginOut.setUseIp(user.getRecentLoginIp());
loginOut.setReqType("WEB");
loginOutLogService.insertLogin(loginOut);
}
----
로그인 시 사용자 ID, 로그인 시간, IP 등을 TN_CF_LOGIN_OUT 테이블에 저장한다.
[source, java]
----
@Override
public void preLogout(HttpServletRequest request, HttpServletResponse response, User user) {
LoginOut loginOut = new LoginOut();
if (StringUtils.isNotEmpty(user.getJwt())) {
loginOut.setToken(user.getJwt().substring(user.getJwt().lastIndexOf('.') + 1));
}
loginOut.setUserId(user.getUserId());
loginOut.setLoginTime(user.getRecentLoginDatetime());
loginOut.setLogoutTime(new Date());
loginOut.setUseIp(webUtil.getClientIp(request));
loginOut.setReqType("WEB");
loginOutLogService.updateLogout(loginOut);
userService.updateUserJwt(Map.of("userId", user.getUserId(), "lastLogoutDate", new Date(), "jwt", ""));
}
----
로그아웃 전에는 TN_CF_LOGIN_OUT에 정보를 저장하는 것 외에 사용자의 jwt 값을 초기화 한다.
중복 로그인 방지를 위해 jwt값을 이용한다.
@@ -0,0 +1,24 @@
= 메뉴 사용 이력
== 개요
시스템에 접속한 사용자의 메뉴 사용 이력을 조회
== Table
* 메뉴 사용 이력 : TN_CF_MENU_USE_HISTORY
== API
.HistoryController.java
. 일별 메뉴 사용 이력 조회 +
GET /history/menu-use-by-date +
Query ID : selectMenuUseHistoryByDatePagingList
. 월별 메뉴 사용 이력 조회 +
GET /history/menu-use-by-month +
Query ID : selectMenuUseHistoryByMonthPagingList
== 화면
image::menuUserHistoty.png[]
=== 기능별 설명
- 엑셀다운로드 : 조회 조건과 동일한 조회 결과 값을 담은 엑셀 파일을 다운로드 하는 기능
@@ -0,0 +1,22 @@
= 메뉴 활용도
== 개요
메뉴 별로 메뉴 사용 이력을 분석해서 월별, 일별로 활용률을 계산한다.
== Table
* 공통코드 : TC_CF_COMM_CODE
* 메뉴사용주기 : TC_CF_MENU_USE_PERIOD
* 메뉴 : TN_CF_MENU
* 메뉴활용도 집계 : TS_CF_MENU_USE_MM
== API
.MenuUtilizationController.java
. 메뉴 활용도 목록 조회 +
GET /menuutilization/menu-utilizations +
Query ID : selectMenuUtilizationList
== 화면
메뉴에 대한 사용 주기, Hit, 활용도를 조회
image::menuUtilHistory.png[]
@@ -0,0 +1,22 @@
= 시스템 로깅
== 개요
로그인/아웃, 시스템 접속, 파일다운로드 등의 시스템 로그를 남기고 있다.
=== Login/out 로그
로그인 후와 로그아웃 전에 LoginOutLogInterceptor를 통해 로그를 남긴다.
NOTE: 로그인/아웃 전후에 추가할 로직이 있다면 LoginInterceptor 인터페이스를 상속받아 구현한다.
관련 테이블:: TN_CF_LOGIN_OUT
=== Access 로그
시스템 접속시 LoggingInterceptor를 통해 AccessLog를 남겨 db(또는 file)에 저장한다. +
일배치로 메뉴사용이력 및 메뉴활용도 데이터를 집계한다.
관련 테이블:: TN_CF_SYS_USE_LOG
=== File Download 로그
첨부파일, 엑셀파일 등을 다운로드시 fileManagerService의 saveFileDownloadLog 메서드를 호출하여 파일다운로드 로그를 남긴다.
관련 테이블:: TN_CF_SYS_USE_LOG
@@ -0,0 +1,24 @@
= 파일 다운로드 이력
== 개요
사용자가 엑셀 다운로드 하거나 이미지 파일이 있는 게시판을 이용했거나 첨부파일을 다운로드 한 목록을 보여준다.
== Table
* 시스템 사용 로그 : TN_CF_SYS_USE_LOG
* 사용자 : TN_CF_USER
== API
.HistoryController.java
. 파일 다운로드 이력 목록 조회 +
GET /history/file-download-logs +
Query ID : selectFileDownloadLogPagingList
* 파일 다운로드 이력의 LOG_FLAG는 TN_CF_SYS_USE_LOG 테이블 LOG_FLAG 컬럼의 '5' 이다.
== 화면
엑셀 다운로드 기능이 있는 특정 화면에서 엑셀 다운로드 실행에 대한 이력을 조회.
image::fileDownloadHistory.png[]
=== 기능별 설명
- 엑셀다운로드 : 조회 조건과 동일한 조회 결과 값을 담은 엑셀 파일을 다운로드 하는 기능