Init
commit
8abfcba617
@ -0,0 +1,32 @@
|
||||
# ---> Java
|
||||
# Compiled class file
|
||||
*.class
|
||||
|
||||
# Log file
|
||||
*.log
|
||||
|
||||
# BlueJ files
|
||||
*.ctxt
|
||||
|
||||
# Mobile Tools for Java (J2ME)
|
||||
.mtj.tmp/
|
||||
|
||||
# Package Files #
|
||||
*.jar
|
||||
*.war
|
||||
*.nar
|
||||
*.ear
|
||||
*.zip
|
||||
*.tar.gz
|
||||
*.rar
|
||||
|
||||
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
|
||||
hs_err_pid*
|
||||
replay_pid*
|
||||
|
||||
/.junie/
|
||||
/logs/
|
||||
/build/
|
||||
/.idea/
|
||||
/.gradle/
|
||||
/.idea/
|
||||
@ -0,0 +1,12 @@
|
||||
create table qrtz_blob_triggers
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
TRIGGER_NAME varchar(200) not null comment '트리거 이름',
|
||||
TRIGGER_GROUP varchar(200) not null comment '트리거 그룹',
|
||||
BLOB_DATA blob null comment '트리거와 관련된 바이너리 데이터 (직렬화된 객체 등)',
|
||||
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
constraint qrtz_blob_triggers_ibfk_1
|
||||
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
)
|
||||
comment 'Quartz BLOB 트리거 정보 - 바이너리 데이터를 가진 트리거';
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
create table qrtz_calendars
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
CALENDAR_NAME varchar(200) not null comment '캘린더 이름 (고유 식별자)',
|
||||
CALENDAR blob not null comment '캘린더 데이터 (직렬화된 Calendar 객체)',
|
||||
primary key (SCHED_NAME, CALENDAR_NAME)
|
||||
)
|
||||
comment 'Quartz 캘린더 정보 - 트리거 실행 제외 기간 정의';
|
||||
|
||||
@ -0,0 +1,13 @@
|
||||
create table qrtz_cron_triggers
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
TRIGGER_NAME varchar(200) not null comment '트리거 이름',
|
||||
TRIGGER_GROUP varchar(200) not null comment '트리거 그룹',
|
||||
CRON_EXPRESSION varchar(200) not null comment 'Cron 표현식 (예: "0 0 12 * * ?" - 매일 정오)',
|
||||
TIME_ZONE_ID varchar(80) null comment '시간대 ID (예: "Asia/Seoul", NULL이면 시스템 기본 시간대)',
|
||||
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
constraint qrtz_cron_triggers_ibfk_1
|
||||
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
)
|
||||
comment 'Quartz Cron 트리거 정보 - Cron 표현식 기반 복잡한 스케줄링';
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
create table qrtz_fired_triggers
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
ENTRY_ID varchar(95) not null comment '실행 엔트리 고유 ID',
|
||||
TRIGGER_NAME varchar(200) not null comment '트리거 이름',
|
||||
TRIGGER_GROUP varchar(200) not null comment '트리거 그룹',
|
||||
INSTANCE_NAME varchar(200) not null comment '실행 중인 스케줄러 인스턴스 이름',
|
||||
FIRED_TIME bigint(13) not null comment '실제 실행 시간 (Unix timestamp)',
|
||||
SCHED_TIME bigint(13) not null comment '예정된 실행 시간 (Unix timestamp)',
|
||||
PRIORITY int not null comment '실행 우선순위',
|
||||
STATE varchar(16) not null comment '실행 상태 (EXECUTING, COMPLETE, BLOCKED, ERROR, PAUSED_BLOCKED)',
|
||||
JOB_NAME varchar(200) null comment '연결된 작업 이름',
|
||||
JOB_GROUP varchar(200) null comment '연결된 작업 그룹',
|
||||
IS_NONCONCURRENT varchar(1) null comment '동시 실행 방지 여부 (Y/N)',
|
||||
REQUESTS_RECOVERY varchar(1) null comment '복구 요청 여부 (Y/N)',
|
||||
primary key (SCHED_NAME, ENTRY_ID)
|
||||
)
|
||||
comment 'Quartz 실행된 트리거 정보 - 현재 실행 중이거나 실행된 트리거 상태 추적';
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
create table qrtz_job_details
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름 (여러 스케줄러 인스턴스 구분용)',
|
||||
JOB_NAME varchar(200) not null comment '작업 이름 (작업의 고유 식별자)',
|
||||
JOB_GROUP varchar(200) not null comment '작업 그룹 (작업들을 논리적으로 그룹화)',
|
||||
DESCRIPTION varchar(250) null comment '작업에 대한 설명',
|
||||
JOB_CLASS_NAME varchar(250) not null comment '실제 작업을 수행할 Java 클래스의 전체 경로',
|
||||
IS_DURABLE varchar(1) not null comment '작업 영구성 여부 (Y/N) - 스케줄러 재시작 후에도 유지할지 결정',
|
||||
IS_NONCONCURRENT varchar(1) not null comment '동시 실행 방지 여부 (Y/N) - 같은 작업의 중복 실행 방지',
|
||||
IS_UPDATE_DATA varchar(1) not null comment '데이터 업데이트 여부 (Y/N) - 작업 실행 시 데이터 업데이트 허용',
|
||||
REQUESTS_RECOVERY varchar(1) not null comment '복구 요청 여부 (Y/N) - 스케줄러 장애 시 복구 대상 여부',
|
||||
JOB_DATA blob null comment '작업 실행 시 전달할 데이터 (직렬화된 객체)',
|
||||
primary key (SCHED_NAME, JOB_NAME, JOB_GROUP)
|
||||
)
|
||||
comment 'Quartz 작업 상세 정보 저장 테이블 - 스케줄링될 작업의 메타데이터와 설정 정보';
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
create table qrtz_locks
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
LOCK_NAME varchar(40) not null comment '락 이름 (TRIGGER_ACCESS, JOB_ACCESS, CALENDAR_ACCESS 등)',
|
||||
primary key (SCHED_NAME, LOCK_NAME)
|
||||
)
|
||||
comment 'Quartz 스케줄러 락 정보 - 클러스터 환경에서 동기화를 위한 락 관리';
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
create table qrtz_paused_trigger_grps
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
TRIGGER_GROUP varchar(200) not null comment '일시 중지된 트리거 그룹 이름',
|
||||
primary key (SCHED_NAME, TRIGGER_GROUP)
|
||||
)
|
||||
comment 'Quartz 일시 중지된 트리거 그룹 - 일시 중지된 트리거 그룹 정보';
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
create table qrtz_scheduler_state
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
INSTANCE_NAME varchar(200) not null comment '스케줄러 인스턴스 고유 이름',
|
||||
LAST_CHECKIN_TIME bigint(13) not null comment '마지막 체크인 시간 (Unix timestamp)',
|
||||
CHECKIN_INTERVAL bigint(13) not null comment '체크인 간격 (밀리초 단위)',
|
||||
primary key (SCHED_NAME, INSTANCE_NAME)
|
||||
)
|
||||
comment 'Quartz 스케줄러 상태 정보 - 클러스터 환경에서 인스턴스 상태 관리';
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
create table qrtz_simple_triggers
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
TRIGGER_NAME varchar(200) not null comment '트리거 이름',
|
||||
TRIGGER_GROUP varchar(200) not null comment '트리거 그룹',
|
||||
REPEAT_COUNT bigint(7) not null comment '반복 횟수 (-1: 무제한, 0: 1회만, 양수: 지정 횟수)',
|
||||
REPEAT_INTERVAL bigint(12) not null comment '반복 간격 (밀리초 단위)',
|
||||
TIMES_TRIGGERED bigint(10) not null comment '지금까지 실행된 횟수',
|
||||
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
constraint qrtz_simple_triggers_ibfk_1
|
||||
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
)
|
||||
comment 'Quartz 단순 트리거 정보 - 고정 간격으로 반복 실행하는 트리거';
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
create table qrtz_simprop_triggers
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
TRIGGER_NAME varchar(200) not null comment '트리거 이름',
|
||||
TRIGGER_GROUP varchar(200) not null comment '트리거 그룹',
|
||||
STR_PROP_1 varchar(512) null comment '문자열 속성 1',
|
||||
STR_PROP_2 varchar(512) null comment '문자열 속성 2',
|
||||
STR_PROP_3 varchar(512) null comment '문자열 속성 3',
|
||||
INT_PROP_1 int null comment '정수 속성 1',
|
||||
INT_PROP_2 int null comment '정수 속성 2',
|
||||
LONG_PROP_1 bigint null comment '긴 정수 속성 1',
|
||||
LONG_PROP_2 bigint null comment '긴 정수 속성 2',
|
||||
DEC_PROP_1 decimal(13, 4) null comment '소수점 속성 1 (13자리, 소수점 4자리)',
|
||||
DEC_PROP_2 decimal(13, 4) null comment '소수점 속성 2 (13자리, 소수점 4자리)',
|
||||
BOOL_PROP_1 varchar(1) null comment '불린 속성 1 (Y/N)',
|
||||
BOOL_PROP_2 varchar(1) null comment '불린 속성 2 (Y/N)',
|
||||
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
constraint qrtz_simprop_triggers_ibfk_1
|
||||
foreign key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP) references qrtz_triggers (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
|
||||
)
|
||||
comment 'Quartz 속성 기반 트리거 정보 - 다양한 데이터 타입의 속성을 가진 트리거';
|
||||
|
||||
@ -0,0 +1,27 @@
|
||||
create table qrtz_triggers
|
||||
(
|
||||
SCHED_NAME varchar(120) not null comment '스케줄러 이름',
|
||||
TRIGGER_NAME varchar(200) not null comment '트리거 이름 (트리거의 고유 식별자)',
|
||||
TRIGGER_GROUP varchar(200) not null comment '트리거 그룹 (트리거들을 논리적으로 그룹화)',
|
||||
JOB_NAME varchar(200) not null comment '연결된 작업 이름 (QRTZ_JOB_DETAILS 참조)',
|
||||
JOB_GROUP varchar(200) not null comment '연결된 작업 그룹 (QRTZ_JOB_DETAILS 참조)',
|
||||
DESCRIPTION varchar(250) null comment '트리거에 대한 설명',
|
||||
NEXT_FIRE_TIME bigint(13) null comment '다음 실행 예정 시간 (Unix timestamp)',
|
||||
PREV_FIRE_TIME bigint(13) null comment '이전 실행 시간 (Unix timestamp)',
|
||||
PRIORITY int null comment '트리거 우선순위 (높을수록 우선 실행)',
|
||||
TRIGGER_STATE varchar(16) not null comment '트리거 상태 (WAITING, ACQUIRED, EXECUTING, COMPLETE, PAUSED, BLOCKED, ERROR)',
|
||||
TRIGGER_TYPE varchar(8) not null comment '트리거 타입 (SIMPLE, CRON, CALENDAR, BLOB, SIMPROP)',
|
||||
START_TIME bigint(13) not null comment '트리거 시작 시간 (Unix timestamp)',
|
||||
END_TIME bigint(13) null comment '트리거 종료 시간 (Unix timestamp, NULL이면 무제한)',
|
||||
CALENDAR_NAME varchar(200) null comment '연결된 캘린더 이름 (QRTZ_CALENDARS 참조)',
|
||||
MISFIRE_INSTR smallint(2) null comment '미스파이어 처리 지침 (실행 시간을 놓쳤을 때의 처리 방법)',
|
||||
JOB_DATA blob null comment '트리거 실행 시 전달할 데이터 (직렬화된 객체)',
|
||||
primary key (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
|
||||
constraint qrtz_triggers_ibfk_1
|
||||
foreign key (SCHED_NAME, JOB_NAME, JOB_GROUP) references qrtz_job_details (SCHED_NAME, JOB_NAME, JOB_GROUP)
|
||||
)
|
||||
comment 'Quartz 트리거 정보 저장 테이블 - 작업 실행 조건과 스케줄 정의';
|
||||
|
||||
create index SCHED_NAME
|
||||
on qrtz_triggers (SCHED_NAME, JOB_NAME, JOB_GROUP);
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_answer_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_batch_file_data_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_batch_file_data_success_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
-- 배치 파일 재처리 ID 시퀀스
|
||||
CREATE SEQUENCE seq_batch_file_retry_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 99999999
|
||||
CYCLE;
|
||||
@ -0,0 +1,7 @@
|
||||
CREATE SEQUENCE seq_batch_job_log_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
@ -0,0 +1,6 @@
|
||||
CREATE SEQUENCE seq_batch_zip_file_detail_log_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 99999999
|
||||
CYCLE;
|
||||
@ -0,0 +1,6 @@
|
||||
CREATE SEQUENCE seq_batch_zip_file_process_log_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 99999999
|
||||
CYCLE;
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_bbs_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_comment_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_excel_sample_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_file_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9999999999999999
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_html_edit_file_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,7 @@
|
||||
CREATE SEQUENCE seq_login_log_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9999999999999999
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_menu_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9999999999999999
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_notice_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_notification_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_notification_target_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
CREATE SEQUENCE seq_notification_target_setting_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 99999999
|
||||
CACHE 1;
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_post_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_schedule_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9223372036854775807
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
CREATE SEQUENCE seq_user_id
|
||||
START WITH 1000
|
||||
INCREMENT BY 1
|
||||
MINVALUE 1
|
||||
MAXVALUE 9999999999999999
|
||||
CACHE 1000
|
||||
CYCLE;
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
CREATE TABLE TB_BATCH_FILE_DATA
|
||||
(
|
||||
FILE_DATA_ID VARCHAR(20) NOT NULL COMMENT '파일데이터ID'
|
||||
PRIMARY KEY,
|
||||
FILE_NM VARCHAR(255) NOT NULL COMMENT '파일 명',
|
||||
LINE_NUMBER INT NOT NULL COMMENT '라인 번호',
|
||||
COLUMN1 VARCHAR(100) NULL COMMENT '컬럼1',
|
||||
COLUMN2 VARCHAR(100) NULL COMMENT '컬럼2',
|
||||
COLUMN3 VARCHAR(100) NULL COMMENT '컬럼3',
|
||||
COLUMN4 VARCHAR(100) NULL COMMENT '컬럼4',
|
||||
COLUMN5 VARCHAR(100) NULL COMMENT '컬럼5',
|
||||
RAW_DATA TEXT NULL COMMENT '원시 데이터',
|
||||
PROCESS_STATUS VARCHAR(20) DEFAULT 'SUCCESS' NULL COMMENT '처리 상태(SUCCESS/ERROR)',
|
||||
ERROR_MESSAGE TEXT NULL COMMENT '에러 메시지',
|
||||
PROCESS_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '처리 일시',
|
||||
REG_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '등록 일시',
|
||||
RGTR VARCHAR(20) NULL COMMENT '등록자',
|
||||
MDFCN_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL ON UPDATE CURRENT_TIMESTAMP() COMMENT '수정 일시',
|
||||
MDFR VARCHAR(20) NULL COMMENT '수정자'
|
||||
)
|
||||
COMMENT '배치파일처리데이터' COLLATE = UTF8MB4_UNICODE_CI;
|
||||
|
||||
CREATE INDEX IDX_FILE_NM
|
||||
ON TB_BATCH_FILE_DATA (FILE_NM);
|
||||
|
||||
CREATE INDEX IDX_PROCESS_DTTM
|
||||
ON TB_BATCH_FILE_DATA (PROCESS_DTTM);
|
||||
|
||||
CREATE INDEX IDX_PROCESS_STATUS
|
||||
ON TB_BATCH_FILE_DATA (PROCESS_STATUS);
|
||||
@ -0,0 +1,29 @@
|
||||
CREATE TABLE TB_BATCH_FILE_DATA_SUCCESS
|
||||
(
|
||||
SUCCESS_DATA_ID VARCHAR(20) NOT NULL COMMENT '성공데이터ID'
|
||||
PRIMARY KEY,
|
||||
FILE_NM VARCHAR(255) NOT NULL COMMENT '파일 명',
|
||||
LINE_NUMBER INT NOT NULL COMMENT '라인 번호',
|
||||
COLUMN1 VARCHAR(100) NULL COMMENT '컬럼1',
|
||||
COLUMN2 VARCHAR(100) NULL COMMENT '컬럼2',
|
||||
COLUMN3 VARCHAR(100) NULL COMMENT '컬럼3',
|
||||
COLUMN4 VARCHAR(100) NULL COMMENT '컬럼4',
|
||||
COLUMN5 VARCHAR(100) NULL COMMENT '컬럼5',
|
||||
RAW_DATA TEXT NULL COMMENT '원시 데이터',
|
||||
PROCESS_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '처리 일시',
|
||||
REG_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '등록 일시',
|
||||
RGTR VARCHAR(20) NULL COMMENT '등록자',
|
||||
MDFCN_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL ON UPDATE CURRENT_TIMESTAMP() COMMENT '수정 일시',
|
||||
MDFR VARCHAR(20) NULL COMMENT '수정자'
|
||||
)
|
||||
COMMENT '배치파일처리성공데이터' COLLATE = UTF8MB4_UNICODE_CI;
|
||||
|
||||
CREATE INDEX IDX_COLUMN1
|
||||
ON TB_BATCH_FILE_DATA_SUCCESS (COLUMN1);
|
||||
|
||||
CREATE INDEX IDX_FILE_NM
|
||||
ON TB_BATCH_FILE_DATA_SUCCESS (FILE_NM);
|
||||
|
||||
CREATE INDEX IDX_PROCESS_DTTM
|
||||
ON TB_BATCH_FILE_DATA_SUCCESS (PROCESS_DTTM);
|
||||
|
||||
@ -0,0 +1,33 @@
|
||||
CREATE TABLE TB_BATCH_FILE_RETRY
|
||||
(
|
||||
RETRY_ID VARCHAR(20) NOT NULL COMMENT '재처리ID'
|
||||
PRIMARY KEY,
|
||||
ORIGINAL_FILE_NM VARCHAR(255) NOT NULL COMMENT '원본 파일명(파일명이 동일할경우 정확한 처리를위해 TIMESTAMP 추가)',
|
||||
RETRY_FILE_NM VARCHAR(255) NOT NULL COMMENT '재 처리 파일명',
|
||||
RETRY_CNT INT DEFAULT 1 NOT NULL COMMENT '재시도 횟수',
|
||||
MAX_RETRY_CNT INT DEFAULT 3 NOT NULL COMMENT '최대 재시도 횟수',
|
||||
RETRY_STATUS VARCHAR(20) DEFAULT 'PENDING' NOT NULL COMMENT '재처리 상태(PENDING/PROCESSING/SUCCESS/FAILED/EXCEEDED)',
|
||||
ERROR_TYPE VARCHAR(50) NULL COMMENT '에러 유형(FORMAT_ERROR/DATA_ERROR/SYSTEM_ERROR)',
|
||||
ERROR_MESSAGE TEXT NULL COMMENT '에러 메시지',
|
||||
RETRY_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '재처리 일시',
|
||||
NEXT_RETRY_DTTM DATETIME NULL COMMENT '다음 재처리 예정일시',
|
||||
COMPLETED_DTTM DATETIME NULL COMMENT '완료 일시',
|
||||
REG_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '등록 일시',
|
||||
RGTR VARCHAR(20) NULL COMMENT '등록자',
|
||||
MDFCN_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL ON UPDATE CURRENT_TIMESTAMP() COMMENT '수정일시',
|
||||
MDFR VARCHAR(20) NULL COMMENT '수정자'
|
||||
)
|
||||
COMMENT '배치파일재처리이력' COLLATE = UTF8MB4_UNICODE_CI;
|
||||
|
||||
CREATE INDEX IDX_NEXT_RETRY_DTTM
|
||||
ON TB_BATCH_FILE_RETRY (NEXT_RETRY_DTTM);
|
||||
|
||||
CREATE INDEX IDX_ORIGINAL_FILE_NM
|
||||
ON TB_BATCH_FILE_RETRY (ORIGINAL_FILE_NM);
|
||||
|
||||
CREATE INDEX IDX_RETRY_DTTM
|
||||
ON TB_BATCH_FILE_RETRY (RETRY_DTTM);
|
||||
|
||||
CREATE INDEX IDX_RETRY_STATUS
|
||||
ON TB_BATCH_FILE_RETRY (RETRY_STATUS);
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
CREATE TABLE TB_BATCH_JOB_EXECUTION
|
||||
(
|
||||
EXECUTION_ID VARCHAR(36) NOT NULL COMMENT '실행 ID (UUID) - 배치 작업 실행의 고유 식별자'
|
||||
PRIMARY KEY,
|
||||
JOB_NM VARCHAR(200) NOT NULL COMMENT '작업 이름 - 실행된 배치 작업의 이름',
|
||||
JOB_GROUP VARCHAR(200) NOT NULL COMMENT '작업 그룹 - 실행된 배치 작업의 그룹',
|
||||
START_DTTM DATETIME NOT NULL COMMENT '시작 일시 - 배치 작업 실행 시작 시점',
|
||||
END_DTTM DATETIME NULL COMMENT '종료 일시 - 배치 작업 실행 완료 시점 (실행 중이면 NULL)',
|
||||
STATUS_CD VARCHAR(20) NOT NULL COMMENT '상태 (STARTED, COMPLETED, FAILED) - 현재 실행 상태',
|
||||
EXIT_CD VARCHAR(20) NULL COMMENT '종료 코드 - 성공(COMPLETED) 또는 실패(FAILED) 구분',
|
||||
EXIT_MESSAGE TEXT NULL COMMENT '종료 메시지 - 에러 발생 시 상세 메시지 또는 성공 메시지',
|
||||
REG_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NOT NULL COMMENT '등록 일시',
|
||||
SERVER_INFO VARCHAR(1000) NULL COMMENT '실행서버 정보'
|
||||
)
|
||||
COMMENT '배치 작업 실행 결과 저장 테이블 - 배치 작업의 실행 이력과 결과 추적';
|
||||
|
||||
CREATE INDEX IDX_BATCH_JOB_NM
|
||||
ON TB_BATCH_JOB_EXECUTION (JOB_NM)
|
||||
COMMENT '작업 이름 인덱스 - 작업별 조회 성능 향상';
|
||||
|
||||
CREATE INDEX IDX_BATCH_JOB_START_DTTM
|
||||
ON TB_BATCH_JOB_EXECUTION (START_DTTM)
|
||||
COMMENT '시작 시간 인덱스 - 시간별 조회 성능 향상';
|
||||
|
||||
CREATE INDEX IDX_BATCH_JOB_STATUS_CD
|
||||
ON TB_BATCH_JOB_EXECUTION (STATUS_CD)
|
||||
COMMENT '상태 인덱스 - 상태별 조회 성능 향상';
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
create table tb_batch_job_info
|
||||
(
|
||||
JOB_ID varchar(36) not null comment '작업 ID (UUID) - 배치 작업의 고유 식별자'
|
||||
primary key,
|
||||
JOB_NM varchar(200) not null comment '작업 이름 - 배치 작업의 이름 (사용자가 정의)',
|
||||
JOB_GROUP varchar(200) not null comment '작업 그룹 - 배치 작업의 그룹 (논리적 분류)',
|
||||
JOB_CLASS varchar(250) not null comment '작업 클래스 - 실제 작업을 수행할 Java 클래스의 전체 경로',
|
||||
CRON_EXPRESSION varchar(200) not null comment 'Cron 표현식 - 작업 실행 스케줄 정의 (예: "0 0 2 * * ?" - 매일 새벽 2시)',
|
||||
JOB_DC varchar(500) null comment '작업 설명 - 배치 작업에 대한 상세 설명',
|
||||
STATUS_CD varchar(20) default 'ACTIVE' not null comment '상태 (ACTIVE, PAUSED, DELETED) - 작업의 현재 상태',
|
||||
LAST_EXECUTION_ID varchar(36) null comment '마지막 실행 ID - 가장 최근에 실행된 배치 작업의 실행 ID',
|
||||
REG_DTTM datetime default current_timestamp() not null comment '등록 일시',
|
||||
MDFCN_DTTM datetime default current_timestamp() not null on update current_timestamp() comment '수정 일시 - 작업 정보 수정 시점 (자동 업데이트)',
|
||||
constraint UK_BATCH_JOB_NM_GROUP
|
||||
unique (JOB_NM, JOB_GROUP) comment '작업 이름+그룹 유니크 제약 - 동일한 이름과 그룹 조합 방지'
|
||||
)
|
||||
comment '배치 작업 정보 저장 테이블 - 배치 작업의 기본 정보와 스케줄링 설정 관리';
|
||||
|
||||
create index IDX_BATCH_JOB_INFO_STATUS_CD
|
||||
on tb_batch_job_info (STATUS_CD)
|
||||
comment '상태 인덱스 - 상태별 조회 성능 향상';
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
-- 배치 작업 로그 ID 시퀀스 생성
|
||||
CREATE SEQUENCE IF NOT EXISTS seq_batch_job_log_id START WITH 1 INCREMENT BY 1;
|
||||
|
||||
create table tb_batch_job_log
|
||||
(
|
||||
LOG_ID varchar(20) comment '로그 ID - 로그 레코드의 고유 식별자 (시퀀스 기반)'
|
||||
primary key,
|
||||
EXECUTION_ID varchar(36) not null comment '실행 ID (TB_BATCH_JOB_EXECUTION.EXECUTION_ID) - 연결된 배치 작업 실행',
|
||||
LOG_DTTM datetime not null comment '로그 일시 - 로그가 발생한 정확한 시점',
|
||||
LOG_LEVEL varchar(10) not null comment '로그 레벨 (INFO, WARN, ERROR) - 로그의 중요도 수준',
|
||||
LOG_MESSAGE text not null comment '로그 메시지 - 실제 로그 내용 (상세 정보, 에러 메시지 등)',
|
||||
REG_DTTM datetime default current_timestamp() not null comment '등록 일시 - 레코드 생성 시점',
|
||||
constraint tb_batch_job_log_ibfk_1
|
||||
foreign key (EXECUTION_ID) references tb_batch_job_execution (EXECUTION_ID)
|
||||
)
|
||||
comment '배치 작업 실행 로그 저장 테이블 - 배치 작업 실행 과정의 상세 로그 기록';
|
||||
|
||||
create index IDX_BATCH_LOG_EXECUTION_ID
|
||||
on tb_batch_job_log (EXECUTION_ID)
|
||||
comment '실행 ID 인덱스 - 특정 실행의 로그 조회 성능 향상';
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
-- 배치 작업 파라미터 ID 시퀀스 생성
|
||||
CREATE SEQUENCE IF NOT EXISTS seq_batch_job_param_id START WITH 1 INCREMENT BY 1;
|
||||
|
||||
create table tb_batch_job_param
|
||||
(
|
||||
PARAM_ID varchar(20) comment '파라미터 ID - 파라미터 레코드의 고유 식별자 (시퀀스 기반)'
|
||||
primary key,
|
||||
JOB_ID varchar(36) not null comment '작업 ID (TB_BATCH_JOB_INFO.JOB_ID) - 연결된 배치 작업',
|
||||
PARAM_NM varchar(100) not null comment '파라미터 이름 - 파라미터의 식별자',
|
||||
PARAM_VALUE varchar(500) null comment '파라미터 값 - 실제 파라미터 데이터',
|
||||
PARAM_TYPE varchar(50) not null comment '파라미터 타입 (STRING, NUMBER, DATE, BOOLEAN) - 데이터 타입 정의',
|
||||
REG_DTTM datetime default current_timestamp() not null comment '등록 일시 - 파라미터 등록 시점',
|
||||
MDFCN_DTTM datetime default current_timestamp() not null on update current_timestamp() comment '수정 일시 - 파라미터 수정 시점 (자동 업데이트)',
|
||||
constraint tb_batch_job_param_ibfk_1
|
||||
foreign key (JOB_ID) references tb_batch_job_info (JOB_ID)
|
||||
)
|
||||
comment '배치 작업 파라미터 저장 테이블 - 배치 작업 실행 시 필요한 파라미터 정보 관리';
|
||||
|
||||
create index IDX_BATCH_PARAM_JOB_ID
|
||||
on tb_batch_job_param (JOB_ID)
|
||||
comment '작업 ID 인덱스 - 특정 작업의 파라미터 조회 성능 향상';
|
||||
|
||||
@ -0,0 +1,36 @@
|
||||
CREATE TABLE TB_BATCH_ZIP_FILE_DETAIL_LOG
|
||||
(
|
||||
DETAIL_LOG_ID VARCHAR(20) NOT NULL COMMENT '상세 로그 ID'
|
||||
PRIMARY KEY,
|
||||
LOG_ID VARCHAR(20) NOT NULL COMMENT '로그 ID',
|
||||
FILE_NM VARCHAR(255) NOT NULL COMMENT '파일 명',
|
||||
FILE_PATH VARCHAR(500) NOT NULL COMMENT '파일 경로',
|
||||
FILE_SIZE BIGINT DEFAULT 0 NULL COMMENT '파일 크기(BYTES)',
|
||||
FILE_TYPE VARCHAR(50) NULL COMMENT '파일 타입',
|
||||
IMAGE_YN CHAR DEFAULT 'N' NULL COMMENT '이미지 여부(Y/N)',
|
||||
CORRUPTED_YN CHAR DEFAULT 'N' NULL COMMENT '손상 여부(Y/N)',
|
||||
PROCESS_STATUS VARCHAR(20) DEFAULT 'SUCCESS' NULL COMMENT '처리 상태(SUCCESS/ERROR)',
|
||||
ERROR_MESSAGE TEXT NULL COMMENT '에러 메시지',
|
||||
PROCESS_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '처리 일시',
|
||||
REG_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '등록 일시',
|
||||
RGTR VARCHAR(20) NULL COMMENT '등록자',
|
||||
MDFCN_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL ON UPDATE CURRENT_TIMESTAMP() COMMENT '수정 일시',
|
||||
MDFR VARCHAR(20) NULL COMMENT '수정자',
|
||||
CONSTRAINT FK_BATCH_ZIP_DETAIL_LOG_ID
|
||||
FOREIGN KEY (LOG_ID) REFERENCES TB_BATCH_ZIP_FILE_PROCESS_LOG (LOG_ID)
|
||||
ON DELETE CASCADE
|
||||
)
|
||||
COMMENT 'ZIP파일처리상세로그' COLLATE = UTF8MB4_UNICODE_CI;
|
||||
|
||||
CREATE INDEX IDX_FILE_NM
|
||||
ON TB_BATCH_ZIP_FILE_DETAIL_LOG (FILE_NM);
|
||||
|
||||
CREATE INDEX IDX_IMAGE_YN
|
||||
ON TB_BATCH_ZIP_FILE_DETAIL_LOG (IMAGE_YN);
|
||||
|
||||
CREATE INDEX IDX_LOG_ID
|
||||
ON TB_BATCH_ZIP_FILE_DETAIL_LOG (LOG_ID);
|
||||
|
||||
CREATE INDEX IDX_PROCESS_STATUS
|
||||
ON TB_BATCH_ZIP_FILE_DETAIL_LOG (PROCESS_STATUS);
|
||||
|
||||
@ -0,0 +1,34 @@
|
||||
CREATE TABLE TB_BATCH_ZIP_FILE_PROCESS_LOG
|
||||
(
|
||||
LOG_ID VARCHAR(20) NOT NULL COMMENT '로그ID'
|
||||
PRIMARY KEY,
|
||||
ZIP_FILE_NM VARCHAR(255) NOT NULL COMMENT 'ZIP 파일 명',
|
||||
ZIP_FILE_PATH VARCHAR(500) NOT NULL COMMENT 'ZIP 파일 경로',
|
||||
EXTRACT_PATH VARCHAR(500) NULL COMMENT '압축해제 경로',
|
||||
ARCHIVE_PATH VARCHAR(500) NULL COMMENT '원본보관 경로',
|
||||
TOTAL_FILE_CNT INT DEFAULT 0 NULL COMMENT '총 파일수',
|
||||
SUCCESS_FILE_CNT INT DEFAULT 0 NULL COMMENT '성공 파일 수',
|
||||
ERROR_FILE_CNT INT DEFAULT 0 NULL COMMENT '실패 파일 수',
|
||||
IMAGE_FILE_CNT INT DEFAULT 0 NULL COMMENT '이미지 파일 수',
|
||||
NON_IMAGE_FILE_CNT INT DEFAULT 0 NULL COMMENT '비 이미지 파일 수',
|
||||
CORRUPTED_FILE_CNT INT DEFAULT 0 NULL COMMENT '손상 파일 수',
|
||||
PROCESS_STATUS VARCHAR(20) DEFAULT 'PROCESSING' NULL COMMENT '처리 상태(PROCESSING/SUCCESS/ERROR)',
|
||||
ERROR_MESSAGE TEXT NULL COMMENT '에러 메시지',
|
||||
START_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '시작 일시',
|
||||
END_DTTM DATETIME NULL COMMENT '종료 일시',
|
||||
REG_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL COMMENT '등록 일시',
|
||||
RGTR VARCHAR(20) NULL COMMENT '등록자',
|
||||
MDFCN_DTTM DATETIME DEFAULT CURRENT_TIMESTAMP() NULL ON UPDATE CURRENT_TIMESTAMP() COMMENT '수정 일시',
|
||||
MDFR VARCHAR(20) NULL COMMENT '수정자'
|
||||
)
|
||||
COMMENT 'ZIP파일처리로그' COLLATE = UTF8MB4_UNICODE_CI;
|
||||
|
||||
CREATE INDEX IDX_PROCESS_STATUS
|
||||
ON TB_BATCH_ZIP_FILE_PROCESS_LOG (PROCESS_STATUS);
|
||||
|
||||
CREATE INDEX IDX_START_DTTM
|
||||
ON TB_BATCH_ZIP_FILE_PROCESS_LOG (START_DTTM);
|
||||
|
||||
CREATE INDEX IDX_ZIP_FILE_NM
|
||||
ON TB_BATCH_ZIP_FILE_PROCESS_LOG (ZIP_FILE_NM);
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
create table tb_bbs_comment
|
||||
(
|
||||
COMMENT_ID varchar(20) not null comment '댓글 ID'
|
||||
primary key,
|
||||
POST_ID varchar(20) not null comment '게시물 ID',
|
||||
CONTENT text not null comment '내용',
|
||||
PARENT_COMMENT_ID varchar(20) null comment '부모 댓글 ID',
|
||||
DEPTH int default 0 null comment '댓글 깊이 (0: 원댓글, 1: 대댓글)',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
constraint fk_bbs_comment_post
|
||||
foreign key (POST_ID) references tb_bbs_post (POST_ID)
|
||||
)
|
||||
comment '댓글';
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
create table tb_bbs_config
|
||||
(
|
||||
BBS_ID varchar(20) not null comment '게시판 ID'
|
||||
primary key,
|
||||
BBS_NM varchar(100) not null comment '게시판 이름',
|
||||
BBS_TYPE_CD varchar(20) not null comment '게시판 종류 (코드 테이블 참조)',
|
||||
BBS_DC varchar(200) null comment '게시판 설명',
|
||||
UPLOAD_YN varchar(1) default 'N' not null comment '업로드 가능 여부',
|
||||
UPLOAD_FILE_CNT int default 0 null comment '업로드 파일 개수',
|
||||
COMMENT_YN varchar(1) default 'N' not null comment '댓글 기능 사용 여부',
|
||||
TUI_EDITOR_YN varchar(1) default 'N' not null comment 'TUI 에디터 사용 여부',
|
||||
NOTICE_YN varchar(1) default 'N' not null comment '상단 고정 사용 여부',
|
||||
USE_YN varchar(1) default 'Y' not null comment '사용 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment '게시판 설정';
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
create table tb_bbs_file
|
||||
(
|
||||
FILE_ID varchar(20) not null comment '파일 ID'
|
||||
primary key,
|
||||
POST_ID varchar(20) not null comment '게시물 ID',
|
||||
ORIGINAL_FILE_NM varchar(200) not null comment '원본 파일명',
|
||||
STORED_FILE_NM varchar(200) not null comment '저장 파일명',
|
||||
FILE_PATH varchar(200) not null comment '파일 경로',
|
||||
FILE_SIZE bigint not null comment '파일 크기',
|
||||
FILE_EXT varchar(10) not null comment '파일 확장자',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
constraint fk_bbs_file_post
|
||||
foreign key (POST_ID) references tb_bbs_post (POST_ID)
|
||||
)
|
||||
comment '게시판 파일';
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
create table tb_bbs_notice_sample
|
||||
(
|
||||
NOTICE_ID varchar(20) not null comment '게시판 ID'
|
||||
primary key,
|
||||
TITLE varchar(200) not null comment '제목',
|
||||
CONTENT text not null comment '내용',
|
||||
WRITER_NM varchar(50) not null comment '작성자 이름',
|
||||
VIEW_CNT int default 0 null comment '조회수',
|
||||
NOTICE_YN varchar(1) default 'N' null comment '상단 고정 여부',
|
||||
USE_YN varchar(1) default 'Y' not null comment '사용 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment '게시판';
|
||||
|
||||
@ -0,0 +1,17 @@
|
||||
create table tb_bbs_notice_sample_file
|
||||
(
|
||||
FILE_ID varchar(20) not null comment '파일 ID'
|
||||
primary key,
|
||||
NOTICE_ID varchar(20) not null comment '게시판 ID',
|
||||
ORIGINAL_FILE_NM varchar(200) not null comment '원본 파일명',
|
||||
STORED_FILE_NM varchar(200) not null comment '저장 파일명',
|
||||
FILE_PATH varchar(200) not null comment '파일 경로',
|
||||
FILE_SIZE bigint not null comment '파일 크기',
|
||||
FILE_EXT varchar(10) not null comment '파일 확장자',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
constraint fk_bbs_notice_file_notice
|
||||
foreign key (NOTICE_ID) references tb_bbs_notice_sample (NOTICE_ID)
|
||||
)
|
||||
comment '게시판 파일';
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
create table tb_bbs_post
|
||||
(
|
||||
POST_ID varchar(20) not null comment '게시물 ID'
|
||||
primary key,
|
||||
BBS_ID varchar(20) not null comment '게시판 ID',
|
||||
TITLE varchar(200) not null comment '제목',
|
||||
CONTENT text not null comment '내용',
|
||||
WRITER_NM varchar(50) not null comment '작성자 이름',
|
||||
VIEW_CNT int default 0 null comment '조회수',
|
||||
NOTICE_YN varchar(1) default 'N' null comment '상단 고정 여부',
|
||||
EMAIL_YN varchar(1) default 'N' null comment '이메일 발송 여부',
|
||||
EMAIL varchar(100) null comment '이메일 주소',
|
||||
ANSWER_STATUS_CD varchar(20) null comment '답변 상태 (WAITING: 대기중, COMPLETED: 답변완료), CODE_GROUP_ID:BBS_ANSWER_STATUS_CD',
|
||||
USE_YN varchar(1) default 'Y' not null comment '사용 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
constraint fk_bbs_post_config
|
||||
foreign key (BBS_ID) references tb_bbs_config (BBS_ID)
|
||||
)
|
||||
comment '게시물';
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
create table tb_bbs_post_answer
|
||||
(
|
||||
ANSWER_ID varchar(20) not null comment '답변 ID'
|
||||
primary key,
|
||||
POST_ID varchar(20) not null comment '게시물 ID',
|
||||
CONTENT text not null comment '답변 내용',
|
||||
ANSWER_DTTM datetime null comment '답변 일시',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
WRITER_NM varchar(50) not null comment '작성자 명',
|
||||
constraint uk_bbs_post_answer_post_id
|
||||
unique (POST_ID),
|
||||
constraint fk_bbs_post_answer_post
|
||||
foreign key (POST_ID) references tb_bbs_post (POST_ID)
|
||||
)
|
||||
comment '게시물 답변';
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
create table tb_calendar_schedule
|
||||
(
|
||||
SCHEDULE_ID varchar(20) not null comment '일정 ID'
|
||||
primary key,
|
||||
CATEGORY_CD varchar(20) not null comment '범주 코드',
|
||||
TITLE varchar(200) not null comment '제목',
|
||||
PLACE varchar(200) null comment '장소',
|
||||
CONTENT text null comment '내용',
|
||||
START_DTTM datetime not null comment '시작 일시',
|
||||
END_DTTM datetime not null comment '종료 일시',
|
||||
PARTICIPANTS varchar(500) null comment '참여자',
|
||||
ALL_DAY_YN varchar(1) default 'N' not null comment '종일 여부(Y/N)',
|
||||
PRIVATE_YN varchar(1) default 'N' not null comment '비공개 여부(Y/N)',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment '일정 정보';
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
create table tb_cd_detail
|
||||
(
|
||||
CD_GROUP_ID varchar(20) not null comment '코드 그룹 ID',
|
||||
CD_ID varchar(20) not null comment '코드 ID',
|
||||
CD_NM varchar(100) not null comment '코드 이름',
|
||||
CD_DC varchar(200) null comment '코드 설명',
|
||||
SORT_ORDR int default 0 null comment '정렬 순서',
|
||||
USE_YN varchar(1) not null comment '사용 여부',
|
||||
ATTRIBUTE1 varchar(200) null comment '속성1',
|
||||
ATTRIBUTE2 varchar(200) null comment '속성2',
|
||||
ATTRIBUTE3 varchar(200) null comment '속성3',
|
||||
ATTRIBUTE4 varchar(200) null comment '속성4',
|
||||
ATTRIBUTE5 varchar(200) null comment '속성5',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
primary key (CD_GROUP_ID, CD_ID),
|
||||
constraint fk_cd_detail_group
|
||||
foreign key (CD_GROUP_ID) references tb_cd_group (CD_GROUP_ID)
|
||||
)
|
||||
comment '코드 상세';
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
create table tb_cd_group
|
||||
(
|
||||
CD_GROUP_ID varchar(20) not null comment '코드 그룹 ID'
|
||||
primary key,
|
||||
CD_GROUP_NM varchar(100) not null comment '코드 그룹 이름',
|
||||
CD_GROUP_DC varchar(200) null comment '코드 그룹 설명',
|
||||
USE_YN varchar(1) not null comment '사용 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment '코드 그룹';
|
||||
|
||||
@ -0,0 +1,22 @@
|
||||
create table tb_common_html_editor_file
|
||||
(
|
||||
FILE_ID varchar(20) not null comment '파일 ID'
|
||||
primary key,
|
||||
MODULE_ID varchar(50) null comment '모듈 ID (선택적)',
|
||||
ORIGINAL_FILE_NM varchar(200) not null comment '원본 파일명',
|
||||
STORED_FILE_NM varchar(200) not null comment '저장 파일명',
|
||||
FILE_PATH varchar(200) not null comment '파일 경로',
|
||||
FILE_SIZE bigint not null comment '파일 크기',
|
||||
FILE_EXT varchar(10) not null comment '파일 확장자',
|
||||
FILE_TYPE varchar(20) not null comment '파일 타입 (image, video, etc)',
|
||||
USE_YN varchar(1) default 'Y' not null comment '사용 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment 'HTML 에디터 파일';
|
||||
|
||||
create index IDX_HTML_EDITOR_FILE_MODULE
|
||||
on tb_common_html_editor_file (MODULE_ID);
|
||||
|
||||
@ -0,0 +1,16 @@
|
||||
create table tb_excel_sample
|
||||
(
|
||||
excel_sample_id varchar(20) not null
|
||||
primary key,
|
||||
excel_clmn1 bigint null,
|
||||
excel_clmn2 datetime null,
|
||||
excel_clmn3 varchar(100) null,
|
||||
excel_clmn4 varchar(100) null,
|
||||
excel_clmn5 varchar(100) null,
|
||||
excel_clmn6 varchar(100) null,
|
||||
excel_clmn7 varchar(100) null,
|
||||
excel_clmn8 varchar(100) null,
|
||||
excel_clmn9 varchar(100) null,
|
||||
excel_clmn10 varchar(100) null
|
||||
);
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
create table tb_group
|
||||
(
|
||||
GROUP_ID varchar(20) not null comment '그룹 ID'
|
||||
primary key,
|
||||
GROUP_NM varchar(100) not null comment '그룹 이름',
|
||||
GROUP_DC varchar(200) null comment '그룹 설명',
|
||||
SORT_ORDR int default 0 null comment '정렬 순서',
|
||||
USE_YN varchar(1) not null comment '사용 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment '그룹';
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
create table tb_group_role
|
||||
(
|
||||
GROUP_ID varchar(20) not null comment '그룹 ID',
|
||||
ROLE_ID varchar(20) not null comment '역할 ID',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
primary key (GROUP_ID, ROLE_ID),
|
||||
constraint fk_group_role_group
|
||||
foreign key (GROUP_ID) references tb_group (GROUP_ID),
|
||||
constraint fk_group_role_role
|
||||
foreign key (ROLE_ID) references tb_role (ROLE_ID)
|
||||
)
|
||||
comment '그룹-역할 매핑';
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
-- 로그인 로그 ID 시퀀스 생성
|
||||
CREATE SEQUENCE IF NOT EXISTS seq_login_log_id START WITH 1 INCREMENT BY 1;
|
||||
|
||||
create table tb_login_log
|
||||
(
|
||||
LOG_ID varchar(20) comment '로그 ID - 시퀀스 기반'
|
||||
primary key,
|
||||
USER_ID varchar(20) null comment '사용자 ID',
|
||||
USER_ACNT varchar(20) null comment '사용자 계정',
|
||||
LOGIN_DTTM datetime not null comment '로그인 시간',
|
||||
IP_ADDR varchar(50) null comment 'IP 주소',
|
||||
SUCCESS_YN varchar(1) not null comment '성공 여부',
|
||||
FAIL_REASON varchar(100) null comment '실패 사유',
|
||||
LOGIN_TYPE varchar(20) default 'WEB' null comment '로그인 유형',
|
||||
SESSION_ID varchar(100) null comment '세션 ID',
|
||||
USER_AGENT varchar(500) null comment '사용자 에이전트',
|
||||
DEVICE_INFO varchar(100) null comment '접속 디바이스 정보',
|
||||
REG_DTTM datetime default current_timestamp() null comment '등록 일시'
|
||||
)
|
||||
comment '로그인 로그';
|
||||
|
||||
create index IDX_TB_LOGIN_LOG_LOGIN_DTTM
|
||||
on tb_login_log (LOGIN_DTTM);
|
||||
|
||||
create index IDX_TB_LOGIN_LOG_SUCCESS_YN
|
||||
on tb_login_log (SUCCESS_YN);
|
||||
|
||||
create index IDX_TB_LOGIN_LOG_USER_ID
|
||||
on tb_login_log (USER_ID);
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
create table tb_menu
|
||||
(
|
||||
MENU_ID varchar(20) not null comment '메뉴 ID'
|
||||
primary key,
|
||||
MENU_NM varchar(100) not null comment '메뉴 이름',
|
||||
MENU_DC varchar(200) null comment '메뉴 설명',
|
||||
UPPER_MENU_ID varchar(20) null comment '상위 메뉴 ID',
|
||||
MENU_LEVEL int not null comment '메뉴 레벨',
|
||||
SORT_ORDR int not null comment '정렬 순서',
|
||||
MENU_URL varchar(200) null comment '메뉴 URL',
|
||||
URL_PATTERN varchar(2000) null comment 'URL 패턴',
|
||||
MENU_ICON varchar(100) null comment '메뉴 아이콘',
|
||||
USE_YN varchar(1) not null comment '사용 여부',
|
||||
VIEW_YN varchar(1) default 'Y' not null comment '화면 표시 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
constraint fk_menu_upper
|
||||
foreign key (UPPER_MENU_ID) references tb_menu (MENU_ID)
|
||||
)
|
||||
comment '메뉴';
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
create table tb_notification
|
||||
(
|
||||
NOTIFICATION_ID varchar(20) not null comment '알림 ID'
|
||||
primary key,
|
||||
NOTIFICATION_TYPE_CD varchar(20) not null comment '알림 유형 (SCHEDULE: 일정, QUESTION: 질문, ANSWER: 답변)',
|
||||
TARGET_ID varchar(36) not null comment '대상 ID (일정 ID, 게시물 ID 등) 배치때문에 길게 잡음',
|
||||
TITLE varchar(200) not null comment '알림 제목',
|
||||
CONTENT varchar(500) null comment '알림 내용',
|
||||
URL varchar(500) null comment '이동 URL',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment '공통 알림';
|
||||
|
||||
create index idx_notification_target_id
|
||||
on tb_notification (TARGET_ID);
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
create table tb_notification_target
|
||||
(
|
||||
NOTIFICATION_ID varchar(20) not null comment '알림 ID',
|
||||
USER_ID varchar(20) not null comment '사용자 ID',
|
||||
READ_YN varchar(1) default 'N' not null comment '확인 여부(Y/N)',
|
||||
READ_DTTM datetime null comment '확인 일시',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
primary key (NOTIFICATION_ID, USER_ID),
|
||||
constraint fk_notification_target_notification
|
||||
foreign key (NOTIFICATION_ID) references tb_notification (NOTIFICATION_ID),
|
||||
constraint fk_notification_target_user
|
||||
foreign key (USER_ID) references tb_user (USER_ID)
|
||||
)
|
||||
comment '알림 대상자';
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
create table tb_notification_target_setting
|
||||
(
|
||||
SETTING_ID varchar(20) not null comment '설정 ID'
|
||||
primary key,
|
||||
SETTING_TYPE varchar(50) not null comment '설정 구분 (QNA_MANAGER, BATCH_MANAGER 등)',
|
||||
USER_ID varchar(20) not null comment '사용자 ID',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
constraint fk_notification_target_setting_user
|
||||
foreign key (USER_ID) references tb_user (USER_ID)
|
||||
)
|
||||
comment '알림 대상자 설정';
|
||||
|
||||
create index idx_notification_target_setting_type
|
||||
on tb_notification_target_setting (SETTING_TYPE);
|
||||
|
||||
create index idx_notification_target_setting_user
|
||||
on tb_notification_target_setting (USER_ID);
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
create table tb_role
|
||||
(
|
||||
ROLE_ID varchar(20) not null comment '역할 ID'
|
||||
primary key,
|
||||
ROLE_NM varchar(100) not null comment '역할 이름',
|
||||
ROLE_DC varchar(200) null comment '역할 설명',
|
||||
SORT_ORDR int default 0 null comment '정렬 순서',
|
||||
USE_YN varchar(1) not null comment '사용 여부',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자'
|
||||
)
|
||||
comment '역할';
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
create table tb_role_menu
|
||||
(
|
||||
ROLE_ID varchar(20) not null comment '역할 ID',
|
||||
MENU_ID varchar(20) not null comment '메뉴 ID',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
primary key (ROLE_ID, MENU_ID),
|
||||
constraint fk_role_menu_menu
|
||||
foreign key (MENU_ID) references tb_menu (MENU_ID),
|
||||
constraint fk_role_menu_role
|
||||
foreign key (ROLE_ID) references tb_role (ROLE_ID)
|
||||
)
|
||||
comment '역할-메뉴 매핑';
|
||||
|
||||
@ -0,0 +1,44 @@
|
||||
create table tb_user
|
||||
(
|
||||
USER_ID varchar(20) not null comment '사용자 ID'
|
||||
primary key,
|
||||
USER_ACNT varchar(20) not null comment '사용자 계정',
|
||||
USER_NM varchar(50) not null comment '사용자 이름',
|
||||
PASSWD varchar(200) not null comment '비밀번호',
|
||||
PASSWD_HINT varchar(100) null comment '비밀번호 힌트',
|
||||
PASSWD_NSR varchar(100) null comment '비밀번호 힌트 답',
|
||||
EMP_NO varchar(20) null comment '사원 번호',
|
||||
GENDER varchar(1) null comment '성별',
|
||||
ZIP varchar(6) null comment '우편번호',
|
||||
ADDR varchar(150) null comment '주소',
|
||||
DADDR varchar(150) null comment '상세주소',
|
||||
AREA_NO varchar(10) null comment '지역 번호',
|
||||
EML_ADDR varchar(50) null comment '이메일 주소',
|
||||
ORG_CD varchar(20) null comment '조직 CD',
|
||||
USER_GROUP_ID varchar(20) null comment '그룹 ID',
|
||||
NSTT_CD varchar(8) not null comment '소속기관 코드',
|
||||
POS_NM varchar(60) null comment '직위 이름',
|
||||
CRTFC_DN varchar(20) null comment '인증 DN값',
|
||||
USER_STATUS_CD varchar(20) not null comment '사용자 상태',
|
||||
FXNO varchar(20) null comment '팩스번호',
|
||||
TELNO varchar(20) null comment '전화번호',
|
||||
MBL_TELNO varchar(20) null comment '휴대 전화번호',
|
||||
BRDT varchar(20) null comment '생년월일',
|
||||
DEPT_CD varchar(7) null comment '부서 코드',
|
||||
USE_YN varchar(1) not null comment '사용 여부',
|
||||
RSDNT_NO varchar(200) null comment '주민등록 번호',
|
||||
PASSWD_INIT_YN varchar(1) default 'N' null comment '비밀번호 초기화 여부',
|
||||
LOCK_YN varchar(1) null comment '잠김 여부',
|
||||
LOCK_CNT int not null comment '잠김 횟수',
|
||||
LOCK_DTTM datetime null comment '잠김 일시',
|
||||
REG_DTTM datetime null comment '등록 일시',
|
||||
RGTR varchar(20) null comment '등록자',
|
||||
MDFCN_DTTM datetime null comment '수정 일시',
|
||||
MDFR varchar(20) null comment '수정자',
|
||||
constraint tb_user_unique
|
||||
unique (USER_ACNT),
|
||||
constraint fk_user_group
|
||||
foreign key (USER_GROUP_ID) references tb_group (GROUP_ID)
|
||||
)
|
||||
comment '사용자';
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
create table tb_user_session
|
||||
(
|
||||
SESSION_ID varchar(100) not null comment '세션 ID'
|
||||
primary key,
|
||||
USER_ID varchar(20) not null comment '사용자 ID',
|
||||
USER_ACNT varchar(20) null comment '사용자 계정',
|
||||
LOGIN_DTTM datetime default current_timestamp() not null comment '로그인 시간',
|
||||
LAST_ACCESS_DTTM datetime default current_timestamp() not null comment '마지막 접속 시간',
|
||||
IP_ADDR varchar(50) null comment 'IP 주소',
|
||||
USER_AGENT varchar(500) null comment '사용자 에이전트'
|
||||
)
|
||||
comment '사용자 세션 정보';
|
||||
|
||||
create index IDX_TB_USER_SESSION_LOGIN_DTTM
|
||||
on tb_user_session (LOGIN_DTTM);
|
||||
|
||||
create index IDX_TB_USER_SESSION_USER_ID
|
||||
on tb_user_session (USER_ID);
|
||||
|
||||
@ -0,0 +1,320 @@
|
||||
# 통합 데이터베이스 컬럼 단어사전
|
||||
|
||||
## 한글 → 영문 약어 변환표
|
||||
|
||||
| 한글 | 영문 약어 | 전체 영문 | 의미 |
|
||||
|------|-----------|-----------|------|
|
||||
| 접속 | ACCESS | ACCESS | 접속 |
|
||||
| 계정 | ACNT | ACCOUNT | 계정 |
|
||||
| 주소 | ADDR | ADDRESS | 주소 |
|
||||
| 에이전트 | AGENT | AGENT | 에이전트 |
|
||||
| 전체 | ALL | ALL | 전체, 모든 |
|
||||
| 답변 | NSR | ANSWER | 답변 |
|
||||
| 보관 | ARCHIVE | ARCHIVE | 보관, 아카이브 |
|
||||
| 지역 | AREA | AREA | 지역 |
|
||||
| 속성 | ATTRIBUTE | ATTRIBUTE | 속성 |
|
||||
| 배치 | BATCH | BATCH | 배치 |
|
||||
| 게시판 | BBS | BBS | 게시판 (Bulletin Board System) |
|
||||
| 생년월일 | BRDT | BIRTH_DATE | 생년월일 |
|
||||
| 달력 | CALENDAR | CALENDAR | 달력 |
|
||||
| 범주 | CATEGORY | CATEGORY | 범주, 카테고리 |
|
||||
| 코드 | CD | CODE | 코드 |
|
||||
| 클래스 | CLASS | CLASS | 클래스 |
|
||||
| 컬럼 | CLMN | COLUMN | 컬럼 |
|
||||
| 개수 | CNT | COUNT | 개수, 수량 |
|
||||
| 댓글 | COMMENT | COMMENT | 댓글 |
|
||||
| 완료 | COMPLETED | COMPLETED | 완료된 |
|
||||
| 설정 | CONFIG | CONFIG | 설정 |
|
||||
| 내용 | CONTENT | CONTENT | 내용 |
|
||||
| 손상 | CORRUPTED | CORRUPTED | 손상된 |
|
||||
| 크론 | CRON | CRON | 크론 (스케줄링) |
|
||||
| 인증 | CRTFC | CERTIFICATE | 인증 |
|
||||
| 상세주소 | DADDR | DETAIL_ADDRESS | 상세주소 |
|
||||
| 데이터 | DATA | DATA | 데이터 |
|
||||
| 일 | DAY | DAY | 일 |
|
||||
| 설명 | DC | DESCRIPTION | 설명 |
|
||||
| 깊이 | DEPTH | DEPTH | 깊이 |
|
||||
| 부서 | DEPT | DEPARTMENT | 부서 |
|
||||
| 상세 | DETAIL | DETAIL | 상세 |
|
||||
| 디바이스 | DEVICE | DEVICE | 디바이스 |
|
||||
| 일시 | DTTM | DATE_TIME | 일시 |
|
||||
| 에디터 | EDITOR | EDITOR | 에디터 |
|
||||
| 이메일 | EML | EMAIL | 이메일 |
|
||||
| 사원 | EMP | EMPLOYEE | 사원 |
|
||||
| 종료 | END | END | 종료 |
|
||||
| 에러 | ERROR | ERROR | 에러 |
|
||||
| 엑셀 | EXCEL | EXCEL | 엑셀 |
|
||||
| 초과 | EXCEEDED | EXCEEDED | 초과된 |
|
||||
| 실행 | EXECUTION | EXECUTION | 실행 |
|
||||
| 종료 | EXIT | EXIT | 종료 |
|
||||
| 표현식 | EXPRESSION | EXPRESSION | 표현식 |
|
||||
| 확장자 | EXT | EXTENSION | 확장자 |
|
||||
| 추출 | EXTRACT | EXTRACT | 추출 |
|
||||
| 실패 | FAILED | FAILED | 실패한 |
|
||||
| 팩스번호 | FXNO | FAX_NUMBER | 팩스번호 |
|
||||
| 파일 | FILE | FILE | 파일 |
|
||||
| 성별 | GENDER | GENDER | 성별 |
|
||||
| 그룹 | GROUP | GROUP | 그룹 |
|
||||
| 힌트 | HINT | HINT | 힌트 |
|
||||
| 아이콘 | ICON | ICON | 아이콘 |
|
||||
| 식별자 | ID | ID | 식별자 |
|
||||
| 이미지 | IMAGE | IMAGE | 이미지 |
|
||||
| 정보 | INFO | INFORMATION | 정보 |
|
||||
| 초기화 | INIT | INITIALIZE | 초기화 |
|
||||
| 작업 | JOB | JOB | 작업 |
|
||||
| 마지막 | LAST | LAST | 마지막 |
|
||||
| 레벨 | LEVEL | LEVEL | 레벨 |
|
||||
| 라인 | LINE | LINE | 라인 |
|
||||
| 잠김 | LOCK | LOCK | 잠김 |
|
||||
| 로그 | LOG | LOG | 로그 |
|
||||
| 로그인 | LOGIN | LOGIN | 로그인 |
|
||||
| 최대 | MAX | MAX | 최대 |
|
||||
| 휴대 | MBL | MOBILE | 휴대 |
|
||||
| 수정 | MDFCN | MODIFICATION | 수정 |
|
||||
| 수정자 | MDFR | MODIFIER | 수정자 |
|
||||
| 메뉴 | MENU | MENU | 메뉴 |
|
||||
| 메시지 | MESSAGE | MESSAGE | 메시지 |
|
||||
| 모듈 | MODULE | MODULE | 모듈 |
|
||||
| 이름 | NM | NAME | 이름 |
|
||||
| 다음 | NEXT | NEXT | 다음 |
|
||||
| 번호 | NO | NUMBER | 번호 |
|
||||
| 비 | NON | NON | 비, 아닌 |
|
||||
| 공지 | NOTICE | NOTICE | 공지 |
|
||||
| 소속기관 | NSTT | INSTITUTE | 소속기관 |
|
||||
| 알림 | NOTIFICATION | NOTIFICATION | 알림 |
|
||||
| 순서 | ORDR | ORDER | 순서 |
|
||||
| 조직 | ORG | ORGANIZATION | 조직 |
|
||||
| 원본 | ORIGINAL | ORIGINAL | 원본 |
|
||||
| 매개변수 | PARAM | PARAMETER | 매개변수 |
|
||||
| 부모 | PARENT | PARENT | 부모 |
|
||||
| 참여자 | PARTICIPANTS | PARTICIPANTS | 참여자 |
|
||||
| 비밀번호 | PASSWD | PASSWORD | 비밀번호 |
|
||||
| 경로 | PATH | PATH | 경로 |
|
||||
| 패턴 | PATTERN | PATTERN | 패턴 |
|
||||
| 대기중 | PENDING | PENDING | 대기중 |
|
||||
| 장소 | PLACE | PLACE | 장소 |
|
||||
| 직위 | POS | POSITION | 직위 |
|
||||
| 게시물 | POST | POST | 게시물 |
|
||||
| 비공개 | PRIVATE | PRIVATE | 비공개 |
|
||||
| 처리 | PROCESS | PROCESS | 처리 |
|
||||
| 처리중 | PROCESSING | PROCESSING | 처리중 |
|
||||
| 원시 | RAW | RAW | 원시 |
|
||||
| 확인 | READ | READ | 확인 |
|
||||
| 사유 | REASON | REASON | 사유 |
|
||||
| 등록 | REG | REGISTRATION | 등록 |
|
||||
| 재시도 | RETRY | RETRY | 재시도 |
|
||||
| 등록자 | RGTR | REGISTRANT | 등록자 |
|
||||
| 역할 | ROLE | ROLE | 역할 |
|
||||
| 주민등록 | RSDNT | RESIDENT | 주민등록 |
|
||||
| 샘플 | SAMPLE | SAMPLE | 샘플 |
|
||||
| 일정 | SCHEDULE | SCHEDULE | 일정 |
|
||||
| 시퀀스 | SEQ | SEQUENCE | 시퀀스 |
|
||||
| 서버 | SERVER | SERVER | 서버 |
|
||||
| 세션 | SESSION | SESSION | 세션 |
|
||||
| 설정 | SETTING | SETTING | 설정 |
|
||||
| 크기 | SIZE | SIZE | 크기 |
|
||||
| 정렬 | SORT | SORT | 정렬 |
|
||||
| 시작 | START | START | 시작 |
|
||||
| 상태 | STATUS | STATUS | 상태 |
|
||||
| 저장 | STORED | STORED | 저장된 |
|
||||
| 성공 | SUCCESS | SUCCESS | 성공 |
|
||||
| 대상 | TARGET | TARGET | 대상 |
|
||||
| 전화번호 | TELNO | TELEPHONE_NUMBER | 전화번호 |
|
||||
| 제목 | TITLE | TITLE | 제목 |
|
||||
| 총 | TOTAL | TOTAL | 총 |
|
||||
| 타입 | TYPE | TYPE | 타입 |
|
||||
| 유니크키 | UK | UNIQUE_KEY | 유니크 키 |
|
||||
| 업로드 | UPLOAD | UPLOAD | 업로드 |
|
||||
| 상위 | UPPER | UPPER | 상위 |
|
||||
| 사용 | USE | USE | 사용 |
|
||||
| 사용자 | USER | USER | 사용자 |
|
||||
| 값 | VALUE | VALUE | 값 |
|
||||
| 화면 | VIEW | VIEW | 화면, 표시 |
|
||||
| 대기중 | WAITING | WAITING | 대기중 |
|
||||
| 작성자 | WRITER | WRITER | 작성자 |
|
||||
| 예아니오 | YN | YES_NO | 예/아니오 |
|
||||
| 우편번호 | ZIP | ZIP | 우편번호 |
|
||||
|
||||
## 영문 약어 사전
|
||||
|
||||
| 영문 약어 | 전체 영문 | 한글 의미 | 설명 |
|
||||
|-----------|-----------|----------|------|
|
||||
| ACCESS | ACCESS | 접속 | 접속 |
|
||||
| ACNT | ACCOUNT | 계정 | 계정 |
|
||||
| ADDR | ADDRESS | 주소 | 주소 |
|
||||
| AGENT | AGENT | 에이전트 | 에이전트 |
|
||||
| ALL | ALL | 전체 | 전체, 모든 |
|
||||
| ANSWER | ANSWER | 답변 | 답변 |
|
||||
| ARCHIVE | ARCHIVE | 보관 | 보관, 아카이브 |
|
||||
| AREA | AREA | 지역 | 지역 |
|
||||
| ATTRIBUTE | ATTRIBUTE | 속성 | 속성 |
|
||||
| BATCH | BATCH | 배치 | 배치 |
|
||||
| BBS | BBS | 게시판 | 게시판 (Bulletin Board System) |
|
||||
| BRDT | BIRTH_DATE | 생년월일 | 생년월일 |
|
||||
| CALENDAR | CALENDAR | 달력 | 달력 |
|
||||
| CATEGORY | CATEGORY | 범주 | 범주, 카테고리 |
|
||||
| CD | CODE | 코드 | 코드 |
|
||||
| CLASS | CLASS | 클래스 | 클래스 |
|
||||
| CLMN | COLUMN | 컬럼 | 컬럼 |
|
||||
| CNT | COUNT | 개수 | 개수, 수량 |
|
||||
| COMMENT | COMMENT | 댓글 | 댓글 |
|
||||
| COMPLETED | COMPLETED | 완료 | 완료된 |
|
||||
| CONFIG | CONFIG | 설정 | 설정 |
|
||||
| CONTENT | CONTENT | 내용 | 내용 |
|
||||
| CORRUPTED | CORRUPTED | 손상 | 손상된 |
|
||||
| CRON | CRON | 크론 | 크론 (스케줄링) |
|
||||
| CRTFC | CERTIFICATE | 인증 | 인증 |
|
||||
| DADDR | DETAIL_ADDRESS | 상세주소 | 상세주소 |
|
||||
| DATA | DATA | 데이터 | 데이터 |
|
||||
| DAY | DAY | 일 | 일 |
|
||||
| DC | DESCRIPTION | 설명 | 설명 |
|
||||
| DEPTH | DEPTH | 깊이 | 깊이 |
|
||||
| DEPT | DEPARTMENT | 부서 | 부서 |
|
||||
| DETAIL | DETAIL | 상세 | 상세 |
|
||||
| DEVICE | DEVICE | 디바이스 | 디바이스 |
|
||||
| DN | DN | DN | DN |
|
||||
| DTTM | DATE_TIME | 일시 | 일시 |
|
||||
| EDITOR | EDITOR | 에디터 | 에디터 |
|
||||
| EML | EMAIL | 이메일 | 이메일 |
|
||||
| EMP | EMPLOYEE | 사원 | 사원 |
|
||||
| END | END | 종료 | 종료 |
|
||||
| ERROR | ERROR | 에러 | 에러 |
|
||||
| EXCEL | EXCEL | 엑셀 | 엑셀 |
|
||||
| EXCEEDED | EXCEEDED | 초과 | 초과된 |
|
||||
| EXECUTION | EXECUTION | 실행 | 실행 |
|
||||
| EXIT | EXIT | 종료 | 종료 |
|
||||
| EXPRESSION | EXPRESSION | 표현식 | 표현식 |
|
||||
| EXT | EXTENSION | 확장자 | 확장자 |
|
||||
| EXTRACT | EXTRACT | 추출 | 추출 |
|
||||
| FAILED | FAILED | 실패 | 실패한 |
|
||||
| FILE | FILE | 파일 | 파일 |
|
||||
| FXNO | FAX_NUMBER | 팩스번호 | 팩스번호 |
|
||||
| GENDER | GENDER | 성별 | 성별 |
|
||||
| GROUP | GROUP | 그룹 | 그룹 |
|
||||
| HINT | HINT | 힌트 | 힌트 |
|
||||
| ICON | ICON | 아이콘 | 아이콘 |
|
||||
| ID | ID | 식별자 | 식별자 |
|
||||
| IMAGE | IMAGE | 이미지 | 이미지 |
|
||||
| INFO | INFORMATION | 정보 | 정보 |
|
||||
| INIT | INITIALIZE | 초기화 | 초기화 |
|
||||
| IP | IP | IP | IP |
|
||||
| JOB | JOB | 작업 | 작업 |
|
||||
| LAST | LAST | 마지막 | 마지막 |
|
||||
| LEVEL | LEVEL | 레벨 | 레벨 |
|
||||
| LINE | LINE | 라인 | 라인 |
|
||||
| LOCK | LOCK | 잠김 | 잠김 |
|
||||
| LOG | LOG | 로그 | 로그 |
|
||||
| LOGIN | LOGIN | 로그인 | 로그인 |
|
||||
| MAX | MAX | 최대 | 최대 |
|
||||
| MBL | MOBILE | 휴대 | 휴대 |
|
||||
| MDFCN | MODIFICATION | 수정 | 수정 |
|
||||
| MDFR | MODIFIER | 수정자 | 수정자 |
|
||||
| MENU | MENU | 메뉴 | 메뉴 |
|
||||
| MESSAGE | MESSAGE | 메시지 | 메시지 |
|
||||
| MODULE | MODULE | 모듈 | 모듈 |
|
||||
| NEXT | NEXT | 다음 | 다음 |
|
||||
| NM | NAME | 이름 | 이름 |
|
||||
| NO | NUMBER | 번호 | 번호 |
|
||||
| NON | NON | 비 | 비, 아닌 |
|
||||
| NOTICE | NOTICE | 공지 | 공지 |
|
||||
| NOTIFICATION | NOTIFICATION | 알림 | 알림 |
|
||||
| NSR | ANSWER | 답 | 답 |
|
||||
| NSTT | INSTITUTE | 소속기관 | 소속기관 |
|
||||
| ORDR | ORDER | 순서 | 순서 |
|
||||
| ORG | ORGANIZATION | 조직 | 조직 |
|
||||
| ORIGINAL | ORIGINAL | 원본 | 원본 |
|
||||
| PARAM | PARAMETER | 매개변수 | 매개변수 |
|
||||
| PARENT | PARENT | 부모 | 부모 |
|
||||
| PARTICIPANTS | PARTICIPANTS | 참여자 | 참여자 |
|
||||
| PASSWD | PASSWORD | 비밀번호 | 비밀번호 |
|
||||
| PATH | PATH | 경로 | 경로 |
|
||||
| PATTERN | PATTERN | 패턴 | 패턴 |
|
||||
| PENDING | PENDING | 대기중 | 대기중 |
|
||||
| PLACE | PLACE | 장소 | 장소 |
|
||||
| POS | POSITION | 직위 | 직위 |
|
||||
| POST | POST | 게시물 | 게시물 |
|
||||
| PRIVATE | PRIVATE | 비공개 | 비공개 |
|
||||
| PROCESS | PROCESS | 처리 | 처리 |
|
||||
| PROCESSING | PROCESSING | 처리중 | 처리중 |
|
||||
| RAW | RAW | 원시 | 원시 |
|
||||
| READ | READ | 확인 | 확인 |
|
||||
| REASON | REASON | 사유 | 사유 |
|
||||
| REG | REGISTRATION | 등록 | 등록 |
|
||||
| RETRY | RETRY | 재시도 | 재시도 |
|
||||
| RGTR | REGISTRANT | 등록자 | 등록자 |
|
||||
| ROLE | ROLE | 역할 | 역할 |
|
||||
| RSDNT | RESIDENT | 주민등록 | 주민등록 |
|
||||
| SAMPLE | SAMPLE | 샘플 | 샘플 |
|
||||
| SCHEDULE | SCHEDULE | 일정 | 일정 |
|
||||
| SEQ | SEQUENCE | 시퀀스 | 시퀀스 |
|
||||
| SERVER | SERVER | 서버 | 서버 |
|
||||
| SESSION | SESSION | 세션 | 세션 |
|
||||
| SETTING | SETTING | 설정 | 설정 |
|
||||
| SIZE | SIZE | 크기 | 크기 |
|
||||
| SORT | SORT | 정렬 | 정렬 |
|
||||
| START | START | 시작 | 시작 |
|
||||
| STATUS | STATUS | 상태 | 상태 |
|
||||
| STORED | STORED | 저장 | 저장된 |
|
||||
| SUCCESS | SUCCESS | 성공 | 성공 |
|
||||
| TARGET | TARGET | 대상 | 대상 |
|
||||
| TELNO | TELEPHONE_NUMBER | 전화번호 | 전화번호 |
|
||||
| TITLE | TITLE | 제목 | 제목 |
|
||||
| TOTAL | TOTAL | 총 | 총 |
|
||||
| TUI | TUI | TUI | TUI (Toast UI) |
|
||||
| TYPE | TYPE | 타입 | 타입 |
|
||||
| UK | UNIQUE_KEY | 유니크키 | 유니크 키 |
|
||||
| UPLOAD | UPLOAD | 업로드 | 업로드 |
|
||||
| UPPER | UPPER | 상위 | 상위 |
|
||||
| URL | URL | URL | URL |
|
||||
| USE | USE | 사용 | 사용 |
|
||||
| USER | USER | 사용자 | 사용자 |
|
||||
| VALUE | VALUE | 값 | 값 |
|
||||
| VIEW | VIEW | 화면 | 화면, 표시 |
|
||||
| WAITING | WAITING | 대기중 | 대기중 |
|
||||
| WRITER | WRITER | 작성자 | 작성자 |
|
||||
| YN | YES_NO | 예아니오 | 예/아니오 |
|
||||
| ZIP | ZIP | 우편번호 | 우편번호 |
|
||||
|
||||
## 일반적인 접미사 패턴
|
||||
|
||||
| 접미사 | 의미 | 예시 |
|
||||
|--------|------|------|
|
||||
| _ID | 식별자 | USER_ID, MENU_ID |
|
||||
| _CD | 코드 | TYPE_CD, STATUS_CD |
|
||||
| _NM | 이름 | USER_NM, FILE_NM |
|
||||
| _DC | 설명 | MENU_DC, ROLE_DC |
|
||||
| _DTTM | 일시 | REG_DTTM, MDFCN_DTTM |
|
||||
| _YN | 예/아니오 | USE_YN, DEL_YN |
|
||||
| _CNT | 개수 | LOGIN_CNT, RETRY_CNT |
|
||||
| _NO | 번호 | EMP_NO, TELNO |
|
||||
| _ORDR | 순서 | SORT_ORDR, MENU_ORDR |
|
||||
| _ADDR | 주소 | HOME_ADDR, WORK_ADDR |
|
||||
| _PATH | 경로 | FILE_PATH, MENU_PATH |
|
||||
| _SIZE | 크기 | FILE_SIZE, IMAGE_SIZE |
|
||||
| _TYPE | 타입 | FILE_TYPE, USER_TYPE |
|
||||
| _STATUS | 상태 | PROCESS_STATUS, LOGIN_STATUS |
|
||||
|
||||
## 주요 컬럼 네이밍 규칙
|
||||
|
||||
1. **기본 구조**: `[접두사_]주요단어[_접미사]`
|
||||
2. **복합어**: 언더스코어(_)로 구분
|
||||
3. **일시**: 반드시 `_DTTM` 사용
|
||||
4. **여부**: 반드시 `_YN` 사용
|
||||
5. **등록/수정**: `REG_DTTM`, `MDFCN_DTTM`, `RGTR`, `MDFR` 패턴 사용
|
||||
6. **ID**: 테이블명에서 `tb_` 제거 후 `_ID` 추가
|
||||
|
||||
## 테이블 참조 정보
|
||||
|
||||
- **tb_common_html_editor_file**: 파일 관리
|
||||
- **tb_excel_sample**: 엑셀 샘플 데이터
|
||||
- **tb_group**: 그룹 정보
|
||||
- **tb_group_role**: 그룹-역할 매핑
|
||||
- **tb_login_log**: 로그인 로그
|
||||
- **tb_menu**: 메뉴 정보
|
||||
- **tb_notification**: 알림 정보
|
||||
- **tb_notification_target**: 알림 대상자
|
||||
- **tb_notification_target_setting**: 알림 대상자 설정
|
||||
- **tb_role**: 역할 정보
|
||||
- **tb_role_menu**: 역할-메뉴 매핑
|
||||
- **tb_user**: 사용자 정보
|
||||
- **tb_user_session**: 사용자 세션 정보
|
||||
@ -0,0 +1,4 @@
|
||||
INSERT INTO xitframework.tb_batch_job_info (JOB_ID, JOB_NM, JOB_GROUP, JOB_CLASS, CRON_EXPRESSION, JOB_DC, STATUS_CD, LAST_EXECUTION_ID, REG_DTTM, MDFCN_DTTM) VALUES ('2542ecde-3547-4d98-b1fb-75ca32799b27', 'SampleFileReadBatchJob', 'SampleGroup', 'go.kr.project.batch.job.SampleFileReadBatchJob', '0 0 * * * ?', '', 'ACTIVE', 'a5667923-52bb-4d8d-9f01-0d3452ccccb6', '2025-07-21 09:55:22', '2025-07-23 11:59:58');
|
||||
INSERT INTO xitframework.tb_batch_job_info (JOB_ID, JOB_NM, JOB_GROUP, JOB_CLASS, CRON_EXPRESSION, JOB_DC, STATUS_CD, LAST_EXECUTION_ID, REG_DTTM, MDFCN_DTTM) VALUES ('5d284aaa-cfe5-4b05-860f-e9108b80d63c', 'ZipFileProcessBatchJob', 'SampleGroup', 'go.kr.project.batch.job.ZipFileProcessBatchJob', '0 0 * * * ?', '', 'ACTIVE', '92f51b4d-80d9-4c27-9555-e998d2d6ff7b', '2025-07-21 09:55:45', '2025-07-23 11:59:58');
|
||||
INSERT INTO xitframework.tb_batch_job_info (JOB_ID, JOB_NM, JOB_GROUP, JOB_CLASS, CRON_EXPRESSION, JOB_DC, STATUS_CD, LAST_EXECUTION_ID, REG_DTTM, MDFCN_DTTM) VALUES ('a27623bf-ef70-41ed-9886-736af9e3d3e0', 'SampleBatchJob3', 'SampleGroup', 'go.kr.project.batch.job.SampleBatchJob3', '0 0/1 * * * ?', '', 'DELETED', null, '2025-07-21 09:55:59', '2025-07-21 10:07:33');
|
||||
INSERT INTO xitframework.tb_batch_job_info (JOB_ID, JOB_NM, JOB_GROUP, JOB_CLASS, CRON_EXPRESSION, JOB_DC, STATUS_CD, LAST_EXECUTION_ID, REG_DTTM, MDFCN_DTTM) VALUES ('d40d571f-f48a-4481-b88e-545c224aa6e2', 'SampleErrorFileRetryBatchJob', 'SampleGroup', 'go.kr.project.batch.job.SampleErrorFileRetryBatchJob', '0 0 * * * ?', '', 'ACTIVE', 'ca01ef92-32a3-4ac8-9c2a-6e5e18e82c12', '2025-07-21 09:55:32', '2025-07-23 11:59:58');
|
||||
@ -0,0 +1,4 @@
|
||||
INSERT INTO xitframework.tb_bbs_config (BBS_ID, BBS_NM, BBS_TYPE_CD, BBS_DC, UPLOAD_YN, UPLOAD_FILE_CNT, COMMENT_YN, TUI_EDITOR_YN, NOTICE_YN, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBSC00000001', '공지사항', 'NOTICE', '공지사항 TEST', 'Y', 2, 'N', 'Y', 'Y', 'Y', '2025-05-27 10:37:51', 'ADMIN', '2025-07-18 09:41:29', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_bbs_config (BBS_ID, BBS_NM, BBS_TYPE_CD, BBS_DC, UPLOAD_YN, UPLOAD_FILE_CNT, COMMENT_YN, TUI_EDITOR_YN, NOTICE_YN, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBSC00000040', 'FAQ', 'FAQ', 'FAQ', 'Y', 10, 'N', 'Y', 'N', 'Y', '2025-06-02 11:30:11', 'ADMIN', '2025-06-05 13:22:52', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_bbs_config (BBS_ID, BBS_NM, BBS_TYPE_CD, BBS_DC, UPLOAD_YN, UPLOAD_FILE_CNT, COMMENT_YN, TUI_EDITOR_YN, NOTICE_YN, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBSC00000041', '질문과 답변', 'QNA', '질문과 답변', 'Y', 5, 'N', 'Y', 'N', 'Y', '2025-06-02 17:07:37', 'ADMIN', '2025-07-18 15:37:40', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_bbs_config (BBS_ID, BBS_NM, BBS_TYPE_CD, BBS_DC, UPLOAD_YN, UPLOAD_FILE_CNT, COMMENT_YN, TUI_EDITOR_YN, NOTICE_YN, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBSC00000100', '일반 게시판', 'NORMAL', '일반 게시판-1', 'Y', 2, 'Y', 'Y', 'Y', 'Y', '2025-06-05 15:14:48', 'ADMIN', '2025-07-23 09:12:29', 'ADMIN');
|
||||
@ -0,0 +1,55 @@
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXEC_STATUS_CD', 'COMPLETED', '완료됨', '배치 작업 실행이 성공적으로 완료된 상태', 2, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXEC_STATUS_CD', 'FAILED', '실패함', '배치 작업 실행 중 오류가 발생한 상태', 3, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXEC_STATUS_CD', 'PARTIALLY_COMPLETED', '부분완료', '배치 작업 실행이 일부 성공하고 일부 실패한 상태', 5, 'N', null, null, null, null, null, '2025-06-20 14:12:15', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXEC_STATUS_CD', 'STARTED', '시작됨', '배치 작업 실행이 시작된 상태', 1, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXEC_STATUS_CD', 'VETOED', '거부됨', '배치 작업 실행이 거부된 상태', 4, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXIT_CD', 'COMPLETED', '성공 종료', '배치 작업이 성공적으로 종료됨', 1, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXIT_CD', 'FAILED', '실패 종료', '배치 작업이 오류로 인해 실패 종료됨', 2, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXIT_CD', 'PARTIALLY_COMPLETED', '부분 완료', '배치 작업이 일부 성공하고 일부 실패하여 부분적으로 완료됨', 4, 'Y', null, null, null, null, null, '2025-06-20 14:32:25', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXIT_CD', 'UNKNOWN', '알 수 없음', '배치 작업의 종료 상태를 알 수 없음', 3, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_JOB_STATUS_CD', 'ACTIVE', '활성', '배치 작업이 활성화된 상태', 1, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_JOB_STATUS_CD', 'DELETED', '삭제됨', '배치 작업이 삭제된 상태', 3, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_JOB_STATUS_CD', 'PAUSED', '일시 중지', '배치 작업이 일시 중지된 상태', 2, 'Y', null, null, null, null, null, '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_ANSWER_STATUS_CD', 'COMPLETED', '답변완료', '게시물 답변 상태 - 답변완료', 2, 'Y', null, null, null, null, null, '2025-06-04 12:27:54', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_ANSWER_STATUS_CD', 'WAITING', '대기중', '게시물 답변 상태 - 대기중', 1, 'Y', null, null, null, null, null, '2025-06-04 12:27:54', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_POST_TYPE_CD', 'A', '답변', '게시물 유형 - 답변', 2, 'Y', null, null, null, null, null, '2025-06-04 12:27:54', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_POST_TYPE_CD', 'Q', '질문', '게시물 유형 - 질문', 1, 'Y', null, null, null, null, null, '2025-06-04 12:27:54', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_TYPE_CD', 'FAQ', 'FAQ', 'FAQ 게시판', 4, 'Y', null, null, null, null, null, '2025-05-26 16:43:38', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_TYPE_CD', 'NORMAL', '일반', '자료실 게시판', 1, 'Y', null, null, null, null, null, '2025-05-26 16:43:33', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_TYPE_CD', 'NOTICE', '공지사항', '공지사항 게시판', 2, 'Y', null, null, null, null, null, '2025-05-26 16:43:35', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_TYPE_CD', 'QNA', '질문과답변', '질문과답변 게시판 (답변 시 이메일 발송)', 3, 'Y', null, null, null, null, null, '2025-05-26 16:43:36', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', 'DEPT001', '경영지원부', '경영지원부', 1, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', 'DEPT002', '인사부', '인사부', 2, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', 'DEPT003', '개발부', '개발부', 3, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', 'DEPT004', '마케팅부', '마케팅부', 4, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', 'DEPT005', '영업부', '영업부', 5, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', 'DEPT006', '연구부', '연구부', 6, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', 'DEPT007', '품질관리부', '품질관리부', 7, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTIFICATION_TYPE_CD', 'ANSWER', '답변', '답변 관련 알림', 3, 'Y', null, null, null, null, null, '2025-06-23 17:37:59', 'SYSTEM', '2025-06-23 17:37:59', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTIFICATION_TYPE_CD', 'BATCH_FAILURE', '배치실패', '배치 실패 알림', 4, 'Y', null, null, null, null, null, '2025-07-15 13:41:19', 'ADMIN', null, null);
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTIFICATION_TYPE_CD', 'QUESTION', '질문', '질문 관련 알림', 2, 'Y', null, null, null, null, null, '2025-06-23 17:37:59', 'SYSTEM', '2025-06-23 17:37:59', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTIFICATION_TYPE_CD', 'SCHEDULE', '일정', '일정 관련 알림', 1, 'Y', null, null, null, null, null, '2025-06-23 17:37:59', 'SYSTEM', '2025-06-23 17:37:59', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NSTT_CD', 'NSTT001', '본사', '본사', 1, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NSTT_CD', 'NSTT002', '지역사무소', '지역사무소', 2, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NSTT_CD', 'NSTT003', '연구소', '연구소', 3, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NSTT_CD', 'NSTT004', '해외지사', '해외지사', 4, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NSTT_CD', 'NSTT005', '협력업체', '협력업체', 5, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ORG_CD', 'ORG001', '본사 조직', '본사 조직', 1, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ORG_CD', 'ORG002', '지역 조직', '지역 조직', 2, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ORG_CD', 'ORG003', '연구 조직', '연구 조직', 3, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ORG_CD', 'ORG004', '해외 조직', '해외 조직', 4, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ORG_CD', 'ORG005', '협력 조직', '협력 조직', 5, 'Y', null, null, null, null, null, '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('SCHEDULE_CATEGORY_CD', 'BUSINESS_TRIP', '출장', '출장 관련 일정', 2, 'Y', 'rgba(111, 66, 193, 0.7)', null, null, null, null, '2025-06-13 10:36:55', 'SYSTEM', '2025-06-13 15:50:23', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('SCHEDULE_CATEGORY_CD', 'IMPORTANT', '중요', '중요 일정', 5, 'Y', 'rgba(255, 159, 67, 0.7)', null, null, null, null, '2025-06-13 10:36:55', 'SYSTEM', '2025-06-13 15:32:58', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('SCHEDULE_CATEGORY_CD', 'MEETING', '회의', '회의 관련 일정', 4, 'Y', 'rgba(46, 139, 87, 0.7)', null, null, null, null, '2025-06-13 10:36:55', 'SYSTEM', '2025-06-13 16:10:03', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('SCHEDULE_CATEGORY_CD', 'VACATION', '휴가', '휴가 관련 일정', 3, 'Y', 'rgba(23, 162, 184, 0.7)', null, null, null, null, '2025-06-13 10:36:55', 'SYSTEM', '2025-06-13 15:50:23', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('SCHEDULE_CATEGORY_CD', 'WORK', '업무', '업무 관련 일정', 1, 'Y', 'rgba(55, 136, 216, 0.7)', null, null, null, null, '2025-06-13 10:36:55', 'SYSTEM', '2025-06-13 15:32:25', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD', 'TTT_TEST_CD1_1_1', '테스트 코드1', '1', 1, 'Y', null, null, null, null, null, '2025-07-09 13:56:19', 'ADMIN', '2025-07-21 10:33:44', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD', 'TTT_TEST_CD2_1_1', '테스트 코드2', '2', 2, 'Y', null, null, null, null, null, '2025-07-09 13:56:19', 'ADMIN', '2025-07-21 10:33:44', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD', 'TTT_TEST_CD3_1_1', '테스트 코드3', '3', 3, 'Y', null, null, null, null, null, '2025-07-09 13:56:19', 'ADMIN', '2025-07-21 10:33:49', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD2', 'TTT_TEST_CD1_1_1', '테스트 코드1', '1', 1, 'Y', null, null, null, null, null, '2025-07-11 16:21:46', 'ADMIN', '2025-07-18 09:39:27', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD2', 'TTT_TEST_CD2_1_1', '테스트 코드2', '2', 2, 'Y', null, null, null, null, null, '2025-07-11 16:21:46', 'ADMIN', '2025-07-21 13:35:00', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD2', 'TTT_TEST_CD3_1_1', '테스트 코드3', '3', 3, 'Y', null, null, null, null, null, '2025-07-11 16:21:46', 'ADMIN', '2025-07-21 13:35:00', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER_STATUS_CD', 'ACTIVE', '활성', '활성 상태의 사용자', 1, 'Y', null, null, null, null, null, '2025-05-13 14:24:50', 'SYSTEM', '2025-05-13 14:24:50', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER_STATUS_CD', 'DELETED', '삭제', '삭제된 상태의 사용자', 4, 'Y', null, null, null, null, null, '2025-05-13 14:24:50', 'SYSTEM', '2025-05-13 14:24:50', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_detail (CD_GROUP_ID, CD_ID, CD_NM, CD_DC, SORT_ORDR, USE_YN, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ATTRIBUTE4, ATTRIBUTE5, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER_STATUS_CD', 'INACTIVE', '비활성', '비활성 상태의 사용자', 2, 'Y', null, null, null, null, null, '2025-05-13 14:24:50', 'SYSTEM', '2025-05-13 14:24:50', 'SYSTEM');
|
||||
@ -0,0 +1,14 @@
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXEC_STATUS_CD', '배치 작업 실행 상태', '배치 작업 실행의 상태 코드', 'Y', '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_EXIT_CD', '배치 작업 실행 종료 코드', '배치 작업 실행의 종료 코드', 'Y', '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BATCH_JOB_STATUS_CD', '배치 작업 정보 상태', '배치 작업 정보의 상태 코드', 'Y', '2025-06-18 13:24:51', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_ANSWER_STATUS_CD', '게시물 답변 상태', '답변 상태 (WAITING: 대기중, COMPLETED: 답변완료)', 'Y', '2025-06-04 12:27:54', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_POST_TYPE_CD', '게시물 유형', '게시물 유형 (Q: 질문, A: 답변)', 'Y', '2025-06-04 12:27:54', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('BBS_TYPE_CD', '게시판 종류', '게시판 종류를 관리하는 코드 그룹', 'Y', '2025-05-26 16:43:32', 'SYSTEM', null, null);
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('DEPT_CD', '부서 코드', '부서를 나타내는 코드', 'Y', '2025-05-13 14:44:53', 'SYSTEM', '2025-07-21 13:38:37', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NOTIFICATION_TYPE_CD', '알림 유형', '공통 알림 시스템의 알림 유형 코드', 'Y', '2025-06-23 17:37:59', 'SYSTEM', '2025-06-23 17:37:59', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('NSTT_CD', '소속기관 코드', '소속기관을 나타내는 코드', 'Y', '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ORG_CD', '조직 코드', '조직을 나타내는 코드', 'Y', '2025-05-13 14:44:53', 'SYSTEM', '2025-05-13 14:44:53', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('SCHEDULE_CATEGORY_CD', '일정 범주', '일정 관리 시스템의 일정 범주 코드', 'Y', '2025-06-13 10:36:55', 'SYSTEM', '2025-06-13 10:36:55', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD', '테스트 코드', '', 'N', '2025-07-09 13:55:39', 'ADMIN', '2025-07-21 14:33:41', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('TEST_CD2', '테스트 코드', '', 'Y', '2025-07-11 16:21:03', 'ADMIN', '2025-07-21 13:39:29', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_cd_group (CD_GROUP_ID, CD_GROUP_NM, CD_GROUP_DC, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER_STATUS_CD', '사용자 상태', '사용자의 상태 코드', 'Y', '2025-05-13 14:24:50', 'SYSTEM', '2025-05-13 14:24:50', 'SYSTEM');
|
||||
@ -0,0 +1,6 @@
|
||||
INSERT INTO xitframework.tb_group (GROUP_ID, GROUP_NM, GROUP_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('GROUP_ADMIN', '관리자 그룹', '시스템 관리 권한을 가진 사용자 그룹', 5, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-05-15 10:09:55', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group (GROUP_ID, GROUP_NM, GROUP_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('GROUP_APPROVER', '업무 승인 담당자 그룹', '업무 승인 권한을 가진 사용자 그룹', 4, 'Y', '2025-05-16 12:44:14', 'SYSTEM', '2025-05-16 12:44:14', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group (GROUP_ID, GROUP_NM, GROUP_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('GROUP_SYSTEM', '시스템 관리자 그룹-XIT', '모든 시스템 권한을 가진 사용자 그룹(XIT)', 999, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-07-21 13:40:13', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group (GROUP_ID, GROUP_NM, GROUP_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('GROUP_USER', '일반 사용자 그룹', '일반 사용자 권한을 가진 사용자 그룹', 2, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-06-04 16:34:22', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group (GROUP_ID, GROUP_NM, GROUP_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('GROUP_VISITOR', '방문자 그룹', '방문자 권한을 가진 사용자 그룹', 1, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-05-15 10:09:55', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group (GROUP_ID, GROUP_NM, GROUP_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('GROUP_WORKER', '업무 담당자 그룹', '업무 처리 권한을 가진 사용자 그룹', 3, 'Y', '2025-05-16 12:44:12', 'SYSTEM', '2025-07-18 15:37:11', 'SYSTEM');
|
||||
@ -0,0 +1,8 @@
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_ADMIN', 'ROLE_ADMIN', '2025-05-16 12:41:59', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_APPROVER', 'ROLE_APPROVER', '2025-05-30 14:45:09', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_APPROVER', 'ROLE_USER', '2025-07-21 13:40:34', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_APPROVER', 'ROLE_WORKER', '2025-07-09 14:04:57', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_SYSTEM', 'ROLE_SYSTEM', '2025-05-16 12:42:00', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_USER', 'ROLE_USER', '2025-05-16 12:41:56', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_USER', 'ROLE_WORKER', '2025-07-18 15:36:42', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_group_role (GROUP_ID, ROLE_ID, REG_DTTM, RGTR) VALUES ('GROUP_WORKER', 'ROLE_WORKER', '2025-05-16 12:44:20', 'SYSTEM');
|
||||
@ -0,0 +1,30 @@
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000001', '홈', '시스템 홈 메뉴', 'ROOT', 1, 1, '/main.do', '/main.do', 'home', 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-30 14:40:46', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000002', '게시판 관리', '공통 관리 메뉴', 'ROOT', 1, 500, '', '', 'edit-3', 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-06-04 14:01:04', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000003', '시스템 관리', '시스템 관리 메뉴', 'ROOT', 1, 900, '', '', 'settings', 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-30 14:41:20', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000005', '코드 통합 관리', '코드 마스터와 코드 상세를 한 화면에서 관리', 'MENU00000003', 2, 1, '/system/code/integrated/manage.do', '/system/code/**/*.do,/system/code/**/*.ajax', null, 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-20 15:07:54', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000006', '사용자 관리', '사용자 관리 메뉴', 'MENU00000003', 2, 2, '/system/user/list.do', '/system/user/**/*.do,/system/user/**/*.ajax', null, 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-16 12:49:48', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000007', '그룹 관리', '그룹 관리 메뉴', 'MENU00000003', 2, 3, '/system/group/list.do', '/system/group/**/*.do,/system/group/**/*.ajax', null, 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-16 12:49:48', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000008', '역할 관리', '역할 관리 메뉴', 'MENU00000003', 2, 4, '/system/role/list.do', '/system/role/**/*.do,/system/role/**/*.ajax', null, 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-16 12:49:48', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000009', '메뉴 관리', '메뉴 관리 메뉴', 'MENU00000003', 2, 5, '/system/menu/list.do', '/system/menu/**/*.do,/system/menu/**/*.ajax', null, 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-16 12:49:48', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000010', '권한 관리', '권한 관리 메뉴', 'MENU00000003', 2, 6, '/system/auth/main.do', '/system/auth/**/*.do,/system/auth/**.ajax,/system/auth/**/*.ajax', null, 'Y', 'Y', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-16 12:49:48', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000011', '공통', '공통', 'ROOT', 1, 100, '', '/common/**/*.do,/common/**/*.ajax', 'package', 'Y', 'N', '2025-05-15 14:03:38', 'SYSTEM', '2025-05-30 14:42:10', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000052', '마이페이지', '마이페이지', 'ROOT', 1, 90, '/mypage.do', '/mypage.do,/mypage/**/*.do,/mypage/**/*.ajax', 'shield', 'Y', 'N', '2025-05-21 09:33:38', 'SYSTEM', '2025-07-08 10:05:50', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000053', '로그인 로그', '', 'MENU00000003', 2, 6, '/system/loginLog/list.do', '/system/loginLog/**/*.do,/system/loginLog/**/*.ajax', '', 'Y', 'Y', '2025-05-22 15:06:30', 'ADMIN', '2025-07-08 14:12:03', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000054', '게시판 설정', '게시판 설정, 게시판 타입별 생성 수정 삭제', 'MENU00000002', 2, 1, '/bbs/manage/config/list.do', '/bbs/manage/config/**/*.do,/bbs/manage/config/**/*.ajax', '', 'Y', 'Y', '2025-05-26 15:04:09', 'ADMIN', '2025-06-05 11:58:22', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000092', 'CRUD 예제', '등록, 수정, 삭제, 조회 예제', 'ROOT', 1, 110, '', '', 'list', 'Y', 'Y', '2025-05-30 18:27:36', 'ADMIN', '2025-06-05 12:00:09', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000093', '공지사항 예제', '공지사항 - 별도 소스 개발', 'MENU00000092', 2, 1, '/template/noticeSample/list.do', '/template/noticeSample/**.do,/template/noticeSample/**/*.ajax', '', 'Y', 'Y', '2025-05-30 18:28:18', 'ADMIN', '2025-06-04 13:42:44', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000094', '공지사항 관리', '게시판 설정의 공지사항 관리', 'MENU00000002', 2, 2, '/bbs/manage/post/BBSC00000001/list.do', '/bbs/manage/post/BBSC00000001/**/*.do,/bbs/manage/post/BBSC00000001/**/*.ajax', '', 'Y', 'Y', '2025-06-02 10:57:48', 'ADMIN', '2025-06-05 12:25:16', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000096', '공지사항', '공지사', 'ROOT', 1, 2, '/bbs/user/post/BBSC00000001/list.do', '/bbs/user/post/BBSC00000001/**/*.do,/bbs/user/post/BBSC00000001/**/*.ajax', 'edit', 'Y', 'Y', '2025-06-02 14:21:23', 'ADMIN', '2025-06-05 12:26:35', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000097', 'FAQ 관리', 'FAQ 관리', 'MENU00000002', 2, 4, '/bbs/manage/post/BBSC00000040/list.do', '/bbs/manage/post/BBSC00000040/**/*.do,/bbs/manage/post/BBSC00000040/**/*.ajax', '', 'Y', 'Y', '2025-06-02 15:51:09', 'ADMIN', '2025-06-05 15:15:56', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000098', 'FAQ', '', 'ROOT', 1, 3, '/bbs/user/post/BBSC00000040/listFaqData.do', '/bbs/user/post/BBSC00000040/**/*.do,/bbs/user/post/BBSC00000040/**/*.ajax', 'info', 'Y', 'Y', '2025-06-02 15:58:24', 'ADMIN', '2025-06-05 12:27:01', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000099', '질문과 답변', '질문과 답변 QNA', 'MENU00000002', 2, 5, '/bbs/manage/qna/BBSC00000041/list.do', '/bbs/manage/qna/BBSC00000041/**/*.do,/bbs/manage/qna/BBSC00000041/**/*.ajax', '', 'Y', 'Y', '2025-06-02 17:08:43', 'ADMIN', '2025-06-05 15:16:00', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000100', '질문과 답변', '질문과 답변', 'ROOT', 1, 5, '/bbs/user/qna/BBSC00000041/list.do', '/bbs/user/qna/BBSC00000041/**/*.do,/bbs/user/qna/BBSC00000041/**/*.ajax', 'help-circle', 'Y', 'Y', '2025-06-02 17:09:22', 'ADMIN', '2025-06-05 12:27:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000107', '일반 게시판 관리', '일반 게시판', 'MENU00000002', 2, 3, '/bbs/manage/post/BBSC00000100/list.do', '/bbs/manage/post/BBSC00000100/**/*.do,/bbs/manage/post/BBSC00000100/**/*.ajax', '', 'Y', 'Y', '2025-06-05 15:15:34', 'ADMIN', '2025-07-11 16:18:42', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000108', '일반 게시판', '', 'ROOT', 1, 6, '/bbs/user/post/BBSC00000100/list.do', '/bbs/user/post/BBSC00000100/**/*.do,/bbs/user/post/BBSC00000100/**/*.ajax', 'book', 'Y', 'Y', '2025-06-05 15:16:44', 'ADMIN', '2025-06-05 15:18:28', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000109', 'dataTable 테스트', '1111111111111111111', 'ROOT', 1, 1, '/bbs/user/post/BBSC00000100/dataTableList.do', '/bbs/user/post/BBSC00000100/**/*.do,/bbs/user/post/BBSC00000100/**/*.ajax', 'clipboard', 'Y', 'Y', '2025-06-05 17:18:03', 'USER00000051', '2025-07-21 15:41:53', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000110', '이미지 편집', '이미지 편집 테스트 진행', 'MENU00000092', 2, 2, '/template/imageModifySample/imageModify.do', '/template/imageModifySample/**/*.do,/template/imageModifySample/**/*.ajax', '', 'Y', 'Y', '2025-06-09 15:33:07', 'ADMIN', '2025-06-09 15:33:07', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000111', '일정관리 예제', '', 'MENU00000092', 2, 3, '/template/calendarSample/calendarSample.do', '/template/calendarSample/**/*.do,/template/calendarSample/**/*.ajax', '', 'Y', 'Y', '2025-06-12 09:10:51', 'ADMIN', '2025-07-08 14:11:59', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000112', '배치 관리', '배치관리 프로그램', 'MENU00000003', 2, 10, '/batch/list.do', '/batch/**/*.do,/batch/**/*.ajax', '', 'Y', 'Y', '2025-06-18 10:00:31', 'ADMIN', '2025-06-18 10:00:31', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000113', '쿼리 실행기', '쿼리 실행기', 'MENU00000003', 2, 99, '/db/exec/query.do', '/db/exec/**/*.do,/db/exec/**/*.ajax', '', 'Y', 'Y', '2025-07-07 17:14:18', 'ADMIN', '2025-07-07 17:14:18', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('MENU00000114', '엑셀 예제', '엑셀 다운로드, 업로드', 'MENU00000092', 2, 4, '/template/excelSample/list.do', '/template/excelSample/**/*.do,/template/excelSample/**/*.ajax', '', 'Y', 'Y', '2025-07-10 09:47:22', 'ADMIN', '2025-07-10 09:47:22', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_menu (MENU_ID, MENU_NM, MENU_DC, UPPER_MENU_ID, MENU_LEVEL, SORT_ORDR, MENU_URL, URL_PATTERN, MENU_ICON, USE_YN, VIEW_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ROOT', 'ROOT', '최상위 메뉴', null, 0, 0, null, null, null, 'Y', 'N', '2025-05-16 12:49:48', 'SYSTEM', '2025-05-16 12:49:48', 'SYSTEM');
|
||||
@ -0,0 +1,6 @@
|
||||
INSERT INTO xitframework.tb_role (ROLE_ID, ROLE_NM, ROLE_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ROLE_ADMIN', '관리자', '시스템 관리 권한을 가진 관리자 역할', 5, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-05-15 10:09:55', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_role (ROLE_ID, ROLE_NM, ROLE_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ROLE_APPROVER', '업무 승인 담당자', '업무 승인 권한을 가진 담당자 역할', 4, 'Y', '2025-05-16 12:43:54', 'SYSTEM', '2025-05-16 12:43:54', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_role (ROLE_ID, ROLE_NM, ROLE_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ROLE_SYSTEM', '시스템 관리자-XIT', '모든 시스템 권한을 가진 시스템 관리자 역할(XIT)', 6, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-07-21 13:40:23', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_role (ROLE_ID, ROLE_NM, ROLE_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ROLE_USER', '일반 유저', '기본적인 시스템 사용 권한을 가진 일반 사용자 역할1', 2, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-05-21 16:15:28', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_role (ROLE_ID, ROLE_NM, ROLE_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ROLE_VISITOR', '방문자', '시스템에 접근 가능한 기본 권한을 가진 방문자 역할', 1, 'Y', '2025-05-15 10:09:55', 'SYSTEM', '2025-07-18 15:37:21', 'SYSTEM');
|
||||
INSERT INTO xitframework.tb_role (ROLE_ID, ROLE_NM, ROLE_DC, SORT_ORDR, USE_YN, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ROLE_WORKER', '업무 담당자', '업무 처리 권한을 가진 담당자 역할', 3, 'Y', '2025-05-16 12:43:53', 'SYSTEM', '2025-05-16 12:43:53', 'SYSTEM');
|
||||
@ -0,0 +1,102 @@
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000001', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000002', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000003', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000005', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000006', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000011', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000052', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000053', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000054', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000092', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000093', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000094', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000096', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000097', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000098', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000099', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000100', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000107', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000108', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000109', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000110', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000111', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'MENU00000114', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_ADMIN', 'ROOT', '2025-07-21 15:50:33', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000001', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000002', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000003', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000011', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000052', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000053', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000054', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000092', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000093', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000094', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000096', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000097', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000098', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000099', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000100', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000107', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000108', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000110', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000111', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'MENU00000114', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_APPROVER', 'ROOT', '2025-07-21 15:50:26', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000001', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000002', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000003', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000005', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000006', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000007', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000008', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000009', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000010', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000011', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000052', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000053', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000054', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000092', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000093', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000094', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000096', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000097', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000098', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000099', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000100', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000107', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000108', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000109', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000110', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000111', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000112', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000113', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'MENU00000114', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_SYSTEM', 'ROOT', '2025-07-21 15:50:45', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000001', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000011', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000052', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000092', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000093', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000096', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000098', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000100', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000108', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000109', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000110', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000111', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'MENU00000114', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_USER', 'ROOT', '2025-07-21 15:50:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000001', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000011', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000052', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000092', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000093', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000096', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000098', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000100', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000108', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000110', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000111', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'MENU00000114', '2025-07-21 15:50:19', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_role_menu (ROLE_ID, MENU_ID, REG_DTTM, RGTR) VALUES ('ROLE_WORKER', 'ROOT', '2025-07-21 15:50:19', 'ADMIN');
|
||||
@ -0,0 +1,5 @@
|
||||
INSERT INTO xitframework.tb_user (USER_ID, USER_ACNT, USER_NM, PASSWD, PASSWD_HINT, PASSWD_NSR, EMP_NO, GENDER, ZIP, ADDR, DADDR, AREA_NO, EML_ADDR, ORG_CD, USER_GROUP_ID, NSTT_CD, POS_NM, CRTFC_DN, USER_STATUS_CD, FXNO, TELNO, MBL_TELNO, BRDT, DEPT_CD, USE_YN, RSDNT_NO, PASSWD_INIT_YN, LOCK_YN, LOCK_CNT, LOCK_DTTM, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('ADMIN', 'admin', '시스템 관리자', 'Z6XYLOi+w3ukRN5nn08WSYg04spdJAvpCU4EOOd925g=', '관리자 계정', '관리자', '43534534', '', '14507', '경기도 부천시 원미구 계남로 81', '', null, 'admin@example.com', 'ORG001', 'GROUP_SYSTEM', 'NSTT001', '시스템 관리자', null, 'ACTIVE', null, '02-1234-5678', '010-1234-5678', '19800101', 'DEPT001', 'Y', null, 'N', 'N', 0, null, '2025-05-15 10:09:55', 'SYSTEM', '2025-07-23 12:05:08', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_user (USER_ID, USER_ACNT, USER_NM, PASSWD, PASSWD_HINT, PASSWD_NSR, EMP_NO, GENDER, ZIP, ADDR, DADDR, AREA_NO, EML_ADDR, ORG_CD, USER_GROUP_ID, NSTT_CD, POS_NM, CRTFC_DN, USER_STATUS_CD, FXNO, TELNO, MBL_TELNO, BRDT, DEPT_CD, USE_YN, RSDNT_NO, PASSWD_INIT_YN, LOCK_YN, LOCK_CNT, LOCK_DTTM, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER00000004', 'user', '일반유저', 'w44uAXy4U9aSi0Pye94jU55pwg/YMVjU/rqqYqePGbo=', '', '', '1234', null, '', '', '', null, '', '', 'GROUP_USER', 'NSTT002', '', null, 'ACTIVE', null, '', '', null, '', 'Y', null, 'N', 'N', 0, null, '2025-05-15 17:38:25', '', '2025-07-22 14:49:40', 'USER00000004');
|
||||
INSERT INTO xitframework.tb_user (USER_ID, USER_ACNT, USER_NM, PASSWD, PASSWD_HINT, PASSWD_NSR, EMP_NO, GENDER, ZIP, ADDR, DADDR, AREA_NO, EML_ADDR, ORG_CD, USER_GROUP_ID, NSTT_CD, POS_NM, CRTFC_DN, USER_STATUS_CD, FXNO, TELNO, MBL_TELNO, BRDT, DEPT_CD, USE_YN, RSDNT_NO, PASSWD_INIT_YN, LOCK_YN, LOCK_CNT, LOCK_DTTM, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER00000005', 'worker', '업무담당자', 'Z6XYLOi+w3ukRN5nn08WSYg04spdJAvpCU4EOOd925g=', '', '', '', null, '14507', '경기도 부천시 원미구 계남로 81', '111', null, '', 'ORG002', 'GROUP_SYSTEM', 'NSTT001', '', null, 'INACTIVE', null, '', '010-4179-2158', null, '', 'Y', null, 'N', 'N', 0, null, '2025-05-19 13:59:31', 'SYSTEM', '2025-07-23 10:23:14', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_user (USER_ID, USER_ACNT, USER_NM, PASSWD, PASSWD_HINT, PASSWD_NSR, EMP_NO, GENDER, ZIP, ADDR, DADDR, AREA_NO, EML_ADDR, ORG_CD, USER_GROUP_ID, NSTT_CD, POS_NM, CRTFC_DN, USER_STATUS_CD, FXNO, TELNO, MBL_TELNO, BRDT, DEPT_CD, USE_YN, RSDNT_NO, PASSWD_INIT_YN, LOCK_YN, LOCK_CNT, LOCK_DTTM, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER00000006', 'system', '시스템 관리자', '7nB/w2O5OvlSbFgYgAA6MRLI1GEeFFSNXXMwCcu2jl8=', null, null, '23r23r32', null, '14507', '경기도 부천시 원미구 계남로 81', '34t34t', null, '', 'ORG001', 'GROUP_APPROVER', 'NSTT001', '', null, 'ACTIVE', null, '', '', null, 'DEPT002', 'Y', null, 'Y', 'N', 0, '2025-07-08 14:07:23', '2025-05-21 12:49:17', 'SYSTEM', '2025-07-17 14:40:23', 'ADMIN');
|
||||
INSERT INTO xitframework.tb_user (USER_ID, USER_ACNT, USER_NM, PASSWD, PASSWD_HINT, PASSWD_NSR, EMP_NO, GENDER, ZIP, ADDR, DADDR, AREA_NO, EML_ADDR, ORG_CD, USER_GROUP_ID, NSTT_CD, POS_NM, CRTFC_DN, USER_STATUS_CD, FXNO, TELNO, MBL_TELNO, BRDT, DEPT_CD, USE_YN, RSDNT_NO, PASSWD_INIT_YN, LOCK_YN, LOCK_CNT, LOCK_DTTM, REG_DTTM, RGTR, MDFCN_DTTM, MDFR) VALUES ('USER00000051', 'admin1', '관리자', 'Z6XYLOi+w3ukRN5nn08WSYg04spdJAvpCU4EOOd925g=', null, null, '', null, '14507', '경기도 부천시 원미구 계남로 81', 'ㄷㄹㅈㄷㄹㅈㄹㅈㄹㅈㄷㄹㅈㄷ', null, '', '', 'GROUP_ADMIN', 'NSTT001', '', null, 'ACTIVE', null, '', '', null, '', 'Y', null, 'N', 'N', 0, null, '2025-05-28 10:31:16', 'ADMIN', '2025-07-21 13:25:58', 'ADMIN');
|
||||
@ -0,0 +1,205 @@
|
||||
# XIT 배치 시스템 구조 및 가이드 (2025 최신)
|
||||
|
||||
## 1. 전체 아키텍처
|
||||
|
||||
```
|
||||
┌──────────────────────────────────────────────┐
|
||||
│ REST API (Controller) │
|
||||
│ └─ BatchJobController │
|
||||
├──────────────────────────────────────────────┤
|
||||
│ Service Layer (비즈니스 로직) │
|
||||
│ ├─ BatchJobService (Interface) │
|
||||
│ └─ BatchJobServiceImpl (구현) │
|
||||
├──────────────────────────────────────────────┤
|
||||
│ Data Access Layer │
|
||||
│ └─ BatchJobMapper (MyBatis Mapper) │
|
||||
│ └─ BatchJobMapper_maria.xml (SQL) │
|
||||
├──────────────────────────────────────────────┤
|
||||
│ Model Layer │
|
||||
│ ├─ BatchJobInfoVO (작업 정보) │
|
||||
│ ├─ BatchJobExecutionVO (실행 결과) │
|
||||
│ ├─ BatchJobLogVO (실행 로그) │
|
||||
│ └─ BatchJobResult (실행 결과 Enum/VO) │
|
||||
├──────────────────────────────────────────────┤
|
||||
│ Job Layer (실제 배치 작업) │
|
||||
│ └─ SampleBatchJob 등 (Quartz Job) │
|
||||
├──────────────────────────────────────────────┤
|
||||
│ Listener/Util Layer │
|
||||
│ ├─ QuartzJobListener (실행 추적) │
|
||||
│ └─ BatchJobLogUtil (로그 기록) │
|
||||
├──────────────────────────────────────────────┤
|
||||
│ Configuration Layer │
|
||||
│ ├─ BatchJobInitializer (초기화) │
|
||||
│ ├─ QuartzConfig, QuartzListenerConfig │
|
||||
└──────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 2. 주요 디렉토리/파일 구조
|
||||
|
||||
- **src/main/java/go/kr/project/batch/**
|
||||
- **controller/**: `BatchJobController.java` (화면)
|
||||
- **service/**: `BatchJobService.java` (interface), `impl/BatchJobServiceImpl.java` (구현)
|
||||
- **mapper/**: `BatchJobMapper.java` (MyBatis interface)
|
||||
- **model/**: `BatchJobInfoVO.java`, `BatchJobExecutionVO.java`, `BatchJobLogVO.java`, `BatchJobResult.java`
|
||||
- **job/**: `SampleBatchJob.java` 등 (Quartz Job 구현)
|
||||
- **config/**: `BatchJobInitializer.java`, `QuartzConfig.java`, `QuartzListenerConfig.java`
|
||||
- **util/**: `BatchJobLogUtil.java`, `ServerInfoUtil.java`
|
||||
- **src/main/resources/mybatis/mapper/batch/**
|
||||
- `BatchJobMapper_maria.xml` (MyBatis SQL)
|
||||
- **src/main/resources/**
|
||||
- `application-local.yml`, `application-dev.yml`, `application-prd.yml` (환경별 설정)
|
||||
- **src/main/webapp/WEB-INF/views/batch/**
|
||||
- `list.jsp`, `execution.jsp`, `log.jsp`, `batchJobForm_layerPop.jsp` (화면 JSP)
|
||||
|
||||
---
|
||||
|
||||
## 3. 데이터 모델
|
||||
|
||||
### BatchJobInfoVO (배치 작업 정보)
|
||||
- jobId (UUID)
|
||||
- jobName, jobGroup, jobClass
|
||||
- cronExpression, description
|
||||
- status (ACTIVE, PAUSED, DELETED)
|
||||
- lastExecutionId
|
||||
- regDt, mdfcnDt
|
||||
|
||||
### BatchJobExecutionVO (실행 결과)
|
||||
- executionId (UUID)
|
||||
- jobName, jobGroup
|
||||
- startTime, endTime
|
||||
- status (STARTED, COMPLETED, FAILED, VETOED)
|
||||
- exitCode (COMPLETED, FAILED, UNKNOWN)
|
||||
- exitMessage
|
||||
- regDt
|
||||
|
||||
### BatchJobLogVO (실행 로그)
|
||||
- logId
|
||||
- executionId
|
||||
- logTime
|
||||
- logLevel (INFO, WARN, ERROR)
|
||||
- logMessage
|
||||
- regDt
|
||||
|
||||
---
|
||||
|
||||
## 4. 주요 테이블
|
||||
|
||||
- **TB_BATCH_JOB_INFO**: 배치 작업 메타데이터 (cron, 상태, 설명 등)
|
||||
- **TB_BATCH_JOB_EXECUTION**: 각 배치 작업의 실행 결과 (시작/종료, 상태, 메시지 등)
|
||||
- **TB_BATCH_JOB_LOG**: 실행 로그 (레벨, 메시지 등)
|
||||
|
||||
---
|
||||
|
||||
## 5. 주요 컴포넌트 및 역할
|
||||
|
||||
### Controller
|
||||
- **BatchJobController**: 배치 작업/실행/로그 관리 REST API 및 화면 제공
|
||||
|
||||
### Service
|
||||
- **BatchJobService**: 배치 작업 등록/수정/삭제/실행/일시중지/재개/목록/실행결과/로그 등 비즈니스 로직
|
||||
- **BatchJobServiceImpl**: Quartz Scheduler, Mapper 연동, 트랜잭션 처리
|
||||
|
||||
### Mapper
|
||||
- **BatchJobMapper**: 작업/실행/로그 CRUD, 상태/마지막 실행ID 관리 (MyBatis)
|
||||
- **BatchJobMapper_maria.xml**: 실제 SQL 정의
|
||||
|
||||
### Listener/Util
|
||||
- **QuartzJobListener**: Job 실행 전후 DB 기록, 상태 갱신, 로그 기록
|
||||
- **BatchJobLogUtil**: Job 실행 중 로그 기록 (INFO/WARN/ERROR)
|
||||
|
||||
### Job
|
||||
- **SampleBatchJob 등**: 실제 배치 로직 구현, 동시 실행 방지(@DisallowConcurrentExecution)
|
||||
|
||||
### Config
|
||||
- **BatchJobInitializer**: 애플리케이션 시작 시 DB에서 작업 목록을 읽어 Quartz에 등록
|
||||
- **QuartzConfig, QuartzListenerConfig**: Quartz 및 리스너 설정
|
||||
|
||||
---
|
||||
|
||||
## 6. 주요 API (BatchJobController)
|
||||
|
||||
- `GET /batch/list.do` : 배치 작업 목록 화면
|
||||
- `POST /batch/list.ajax` : 배치 작업 목록 데이터
|
||||
- `POST /batch/register.ajax` : 배치 작업 등록
|
||||
- `POST /batch/trigger.ajax` : 작업 즉시 실행
|
||||
- `POST /batch/pause.ajax` : 작업 일시 중지
|
||||
- `POST /batch/resume.ajax` : 작업 재개
|
||||
- `POST /batch/delete.ajax` : 작업 삭제
|
||||
- `GET /batch/execution.do` : 실행 결과 화면
|
||||
- `POST /batch/execution.ajax` : 실행 결과 목록
|
||||
- `GET /batch/log.do` : 실행 로그 화면
|
||||
- `POST /batch/log.ajax` : 실행 로그 목록
|
||||
|
||||
---
|
||||
|
||||
## 7. 배치 작업 등록/실행/관리 흐름
|
||||
|
||||
### 배치 작업 등록
|
||||
1. Controller → Service.scheduleJob()
|
||||
2. Service → Quartz Scheduler.scheduleJob()
|
||||
3. Service → Mapper.insertBatchJobInfo()
|
||||
4. (Quartz) → Job.execute() (스케줄에 따라 실행)
|
||||
|
||||
### 배치 작업 실행
|
||||
1. Quartz Scheduler → Job.execute()
|
||||
2. Job → 비즈니스 로직 수행
|
||||
3. Listener/Util → Mapper.insertBatchJobExecution() (시작)
|
||||
4. Listener/Util → Mapper.updateBatchJobExecution() (완료)
|
||||
5. Listener/Util → Mapper.insertBatchJobLog() (로그)
|
||||
|
||||
### 배치 작업 상태/삭제/일시중지/재개
|
||||
- Service에서 Quartz Scheduler와 DB 상태를 동기화하며 처리
|
||||
|
||||
---
|
||||
|
||||
## 8. 설정 예시 (application-*.yml)
|
||||
|
||||
```yaml
|
||||
spring:
|
||||
quartz:
|
||||
job-store-type: jdbc
|
||||
jdbc:
|
||||
initialize-schema: never
|
||||
properties:
|
||||
org.quartz.scheduler.instanceName: XitClusteredScheduler
|
||||
org.quartz.scheduler.instanceId: AUTO
|
||||
org.quartz.jobStore.class: org.quartz.impl.jdbcjobstore.JobStoreTX
|
||||
org.quartz.jobStore.isClustered: true
|
||||
org.quartz.jobStore.tablePrefix: QRTZ_
|
||||
org.quartz.threadPool.threadCount: 10
|
||||
mybatis:
|
||||
config-location: classpath:mybatis/mybatis-config.xml
|
||||
mapper-locations: classpath:mybatis/mapper/**/*_${Globals.DbType}.xml
|
||||
```
|
||||
- DB, 로그, 파일업로드 등 환경별로 `application-local.yml`, `application-dev.yml`, `application-prd.yml`에서 관리
|
||||
|
||||
---
|
||||
|
||||
## 9. 화면(JSP) 구성
|
||||
|
||||
- **list.jsp**: 배치 작업 목록 및 관리
|
||||
- **execution.jsp**: 작업 실행 결과 조회
|
||||
- **log.jsp**: 실행 로그 상세 조회
|
||||
- **batchJobForm_layerPop.jsp**: 작업 등록/수정 팝업
|
||||
|
||||
---
|
||||
|
||||
## 10. 확장/운영 팁
|
||||
|
||||
- 신규 배치 작업은 `job/` 패키지에 Job 구현체 추가 후 등록
|
||||
- Cron 표현식, 상태 등은 DB/화면에서 동적으로 관리
|
||||
- 실행 결과/로그는 화면 및 API로 실시간 모니터링 가능
|
||||
- 클러스터 환경 지원(Quartz + JDBC JobStore)
|
||||
- 동시 실행 방지, 예외처리, 실행 로그 추적 등 안정성 확보
|
||||
|
||||
---
|
||||
|
||||
본 시스템은 Spring Boot + Quartz + MyBatis 기반의 표준적이면서도 확장성/안정성이 뛰어난 배치 관리 시스템입니다.
|
||||
각 계층별 상세 코드/쿼리/설정은 소스 내 각 파일을 참고하세요.
|
||||
|
||||
---
|
||||
|
||||
필요시, 각 계층별 상세 예시/코드/쿼리/설정 추가 가능합니다.
|
||||
추가 요청 시 구체적으로 말씀해 주세요!
|
||||
@ -0,0 +1,135 @@
|
||||
# ZIP 파일 처리 배치 작업 구현
|
||||
|
||||
## 개요
|
||||
특정 디렉토리에 *.zip 파일이 들어오면 압축을 풀어서 특정 디렉토리로 이동시키고, 원본 *.zip 파일은 원본 디렉토리로 이동시키는 배치 작업을 구현했습니다. 이미지 파일 검증 기능과 정상/실패에 대한 로그를 테이블에 정확히 남기는 기능이 포함되어 있습니다.
|
||||
|
||||
## 구현된 기능
|
||||
|
||||
### 1. 데이터베이스 테이블
|
||||
- **tb_batch_zip_file_process_log**: ZIP 파일 처리 메인 로그 테이블
|
||||
- **tb_batch_zip_file_detail_log**: ZIP 파일 내 개별 파일 처리 상세 로그 테이블
|
||||
- **seq_batch_zip_file_process_log_id**: 메인 로그 ID 시퀀스
|
||||
- **seq_batch_zip_file_detail_log_id**: 상세 로그 ID 시퀀스
|
||||
|
||||
### 2. 주요 클래스
|
||||
|
||||
#### 모델 클래스
|
||||
- `ZipFileProcessLogVO`: ZIP 파일 처리 로그 VO
|
||||
- `ZipFileDetailLogVO`: ZIP 파일 처리 상세 로그 VO
|
||||
|
||||
#### 매퍼 클래스
|
||||
- `ZipFileProcessLogMapper`: ZIP 파일 처리 로그 매퍼
|
||||
- `ZipFileDetailLogMapper`: ZIP 파일 처리 상세 로그 매퍼
|
||||
|
||||
#### 서비스 클래스
|
||||
- `ZipFileProcessLogService`: ZIP 파일 처리 로그 서비스
|
||||
- `ZipFileDetailLogService`: ZIP 파일 처리 상세 로그 서비스
|
||||
|
||||
#### 유틸리티 클래스
|
||||
- `ImageValidationUtil`: 이미지 파일 검증 유틸리티
|
||||
|
||||
#### 배치 작업 클래스
|
||||
- `ZipFileProcessBatchJob`: ZIP 파일 처리 배치 작업 메인 클래스
|
||||
|
||||
## 주요 기능
|
||||
|
||||
### 1. ZIP 파일 처리 흐름
|
||||
1. 소스 디렉토리에서 *.zip 파일 검색
|
||||
2. ZIP 파일 압축 해제
|
||||
3. 개별 파일 처리 및 검증
|
||||
4. 이미지 파일 손상 여부 확인
|
||||
5. 처리 결과 로그 저장
|
||||
6. ZIP 파일을 아카이브 디렉토리로 이동
|
||||
|
||||
### 2. 이미지 파일 검증
|
||||
- 확장자 기반 이미지 파일 판별
|
||||
- MIME 타입 기반 이미지 파일 검증
|
||||
- ImageIO를 이용한 이미지 손상 여부 확인
|
||||
- 지원 이미지 형식: jpg, jpeg, png, gif, bmp, tiff, tif, webp
|
||||
|
||||
### 3. 로그 기능
|
||||
- ZIP 파일별 처리 로그 (처리 상태, 파일 수, 성공/실패 통계)
|
||||
- 개별 파일별 상세 로그 (파일 정보, 이미지 여부, 손상 여부)
|
||||
- 배치 작업 실행 로그 (BatchJobLogUtil 활용)
|
||||
|
||||
## 설정
|
||||
|
||||
### application.yml 설정
|
||||
```yaml
|
||||
batch:
|
||||
zip:
|
||||
source:
|
||||
directory: ${user.home}/batch/zip/source # ZIP 파일 소스 디렉토리
|
||||
extract:
|
||||
directory: ${user.home}/batch/zip/extract # ZIP 파일 압축 해제 디렉토리
|
||||
archive:
|
||||
directory: ${user.home}/batch/zip/archive # ZIP 파일 아카이브 디렉토리
|
||||
```
|
||||
|
||||
## 디렉토리 구조
|
||||
```
|
||||
${user.home}/batch/zip/
|
||||
├── source/ # ZIP 파일이 들어오는 디렉토리
|
||||
├── extract/ # ZIP 파일 압축 해제 디렉토리
|
||||
└── archive/ # 처리 완료된 ZIP 파일 보관 디렉토리
|
||||
```
|
||||
|
||||
## 사용 방법
|
||||
|
||||
### 1. 데이터베이스 테이블 생성
|
||||
```sql
|
||||
-- 시퀀스 생성
|
||||
source DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_process_log_id.sql
|
||||
source DB-DDL/maria/ddl/xitframework/seq_batch_zip_file_detail_log_id.sql
|
||||
|
||||
-- 테이블 생성
|
||||
source DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_process_log.sql
|
||||
source DB-DDL/maria/ddl/xitframework/tb_batch_zip_file_detail_log.sql
|
||||
```
|
||||
|
||||
### 2. 배치 작업 등록
|
||||
Quartz 스케줄러를 통해 `ZipFileProcessBatchJob` 클래스를 등록하여 주기적으로 실행
|
||||
|
||||
### 3. ZIP 파일 처리
|
||||
1. `${user.home}/batch/zip/source/` 디렉토리에 ZIP 파일 업로드
|
||||
2. 배치 작업이 실행되면 자동으로 처리
|
||||
3. 처리 결과는 데이터베이스 로그 테이블에서 확인
|
||||
|
||||
## 로그 확인
|
||||
|
||||
### 메인 처리 로그 조회
|
||||
```sql
|
||||
SELECT * FROM tb_batch_zip_file_process_log
|
||||
ORDER BY start_time DESC;
|
||||
```
|
||||
|
||||
### 상세 처리 로그 조회
|
||||
```sql
|
||||
SELECT * FROM tb_batch_zip_file_detail_log
|
||||
WHERE log_id = 'ZPFL00000001'
|
||||
ORDER BY process_time ASC;
|
||||
```
|
||||
|
||||
### 이미지 파일 처리 결과 조회
|
||||
```sql
|
||||
SELECT
|
||||
file_name,
|
||||
is_image,
|
||||
is_corrupted,
|
||||
process_status,
|
||||
error_message
|
||||
FROM tb_batch_zip_file_detail_log
|
||||
WHERE log_id = 'ZPFL00000001'
|
||||
AND is_image = 'Y';
|
||||
```
|
||||
|
||||
## 에러 처리
|
||||
- ZIP 파일 처리 중 오류 발생 시 로그 테이블에 오류 정보 저장
|
||||
- 개별 파일 처리 실패 시에도 다른 파일 처리 계속 진행
|
||||
- 손상된 이미지 파일 발견 시 ERROR 상태로 로그 저장
|
||||
|
||||
## 주의사항
|
||||
1. 디렉토리 권한 확인 필요
|
||||
2. 대용량 ZIP 파일 처리 시 메모리 사용량 모니터링 필요
|
||||
3. 동일한 파일명의 ZIP 파일 처리 시 타임스탬프 추가하여 중복 방지
|
||||
4. 배치 작업은 `@DisallowConcurrentExecution` 어노테이션으로 동시 실행 방지
|
||||
@ -0,0 +1,186 @@
|
||||
/**
|
||||
* XIT Framework Gradle 빌드 설정 파일
|
||||
*
|
||||
* 주요 버전 정보:
|
||||
* - Spring Boot: 2.7.18 (스프링 부트 버전)
|
||||
* - Java: 1.8 (소스 및 타겟 호환성)
|
||||
* - 전자정부 프레임워크: 4.3.0
|
||||
*/
|
||||
|
||||
plugins {
|
||||
// 스프링 부트 플러그인 - 스프링 부트 애플리케이션 빌드 및 실행을 지원
|
||||
id 'org.springframework.boot' version '2.7.18'
|
||||
// 스프링 의존성 관리 플러그인 - 스프링 부트 버전에 맞는 의존성 버전 관리
|
||||
id 'io.spring.dependency-management' version '1.0.15.RELEASE'
|
||||
// 자바 플러그인 - 자바 소스 컴파일 지원
|
||||
id 'java'
|
||||
// WAR 플러그인 - 웹 애플리케이션 아카이브 생성 지원
|
||||
id 'war'
|
||||
}
|
||||
|
||||
// 프로젝트 그룹 및 버전 정보
|
||||
group = 'go.kr.project'
|
||||
version = '0.0.1-SNAPSHOT'
|
||||
|
||||
// 자바 버전 설정 (소스 및 타겟 호환성)
|
||||
java {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
|
||||
// Java 컴파일 옵션 설정
|
||||
//tasks.withType(JavaCompile) {
|
||||
// options.encoding = 'UTF-8'
|
||||
// options.compilerArgs += [
|
||||
// '-Xlint:deprecation',
|
||||
// '-Xlint:unchecked'
|
||||
// ]
|
||||
//}
|
||||
|
||||
// 설정 구성
|
||||
configurations {
|
||||
compileOnly {
|
||||
extendsFrom annotationProcessor
|
||||
}
|
||||
}
|
||||
|
||||
// 저장소 설정
|
||||
repositories {
|
||||
mavenCentral() // 메이븐 중앙 저장소
|
||||
maven { url 'https://maven.egovframe.go.kr/maven/' } // 전자정부 프레임워크 저장소
|
||||
}
|
||||
|
||||
// 버전 변수 정의
|
||||
ext {
|
||||
// 서버 관련 버전
|
||||
tomcatVersion = '9.0.78' // 톰캣 9 버전 (Servlet 3.1 지원)
|
||||
|
||||
// 라이브러리 버전
|
||||
tilesVersion = '3.0.8' // 타일즈 버전
|
||||
mybatisVersion = '2.3.1' // 마이바티스 스프링 부트 스타터 버전
|
||||
commonsTextVersion = '1.10.0' // 아파치 커먼스 텍스트 버전
|
||||
egovFrameVersion = '4.3.0' // 전자정부 프레임워크 버전
|
||||
}
|
||||
|
||||
dependencies {
|
||||
// ===== 스프링 부트 핵심 의존성 =====
|
||||
// 스프링 부트 웹 스타터 - MVC, REST, 내장 톰캣 등 웹 개발에 필요한 기본 의존성 포함
|
||||
implementation 'org.springframework.boot:spring-boot-starter-web'
|
||||
// 스프링 부트 유효성 검사 스타터 - Bean Validation API 구현체 포함
|
||||
implementation 'org.springframework.boot:spring-boot-starter-validation'
|
||||
// 스프링 부트 AOP 스타터 - 관점 지향 프로그래밍 지원
|
||||
implementation 'org.springframework.boot:spring-boot-starter-aop'
|
||||
// 스프링 부트 JDBC 스타터 - JDBC 및 커넥션 풀(HikariCP) 포함
|
||||
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
|
||||
//implementation 'org.springframework.boot:spring-boot-starter-data-jpa' /* 실제 사용 X, intellij plugin 사용을 위해 설정 */
|
||||
|
||||
// ===== 전자정부 프레임워크 의존성 =====
|
||||
// 전자정부 프레임워크 공통 기능 - 공통 유틸리티 및 예외 처리 등
|
||||
implementation("org.egovframe.rte:org.egovframe.rte.fdl.cmmn:${egovFrameVersion}") {
|
||||
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl' /* 보안이슈 대응 후 쿼리로그 문제 발생, SLF4J 충돌 발생 */
|
||||
}
|
||||
// 전자정부 프레임워크 MVC - 웹 MVC 관련 기능
|
||||
implementation("org.egovframe.rte:org.egovframe.rte.ptl.mvc:${egovFrameVersion}") {
|
||||
exclude group: 'org.apache.logging.log4j', module: 'log4j-slf4j-impl' /* 보안이슈 대응 후 쿼리로그 문제 발생, SLF4J 충돌 발생 */
|
||||
}
|
||||
|
||||
|
||||
// ===== 로깅 의존성 =====
|
||||
// Logback - 로깅 구현체
|
||||
implementation 'ch.qos.logback:logback-classic'
|
||||
implementation 'ch.qos.logback:logback-core'
|
||||
// SLF4J - 로깅 퍼사드 인터페이스
|
||||
implementation 'org.slf4j:slf4j-api'
|
||||
|
||||
// ===== 서블릿 & JSP 관련 의존성 =====
|
||||
// JSTL - JSP 표준 태그 라이브러리
|
||||
implementation 'javax.servlet:jstl'
|
||||
|
||||
// ===== 톰캣 설정 =====
|
||||
// 톰캣 9 명시적 설정 (Servlet 3.1 지원)
|
||||
implementation "org.apache.tomcat.embed:tomcat-embed-core:${tomcatVersion}"
|
||||
implementation "org.apache.tomcat.embed:tomcat-embed-el:${tomcatVersion}"
|
||||
implementation "org.apache.tomcat.embed:tomcat-embed-jasper:${tomcatVersion}"
|
||||
|
||||
// ===== 타일즈 의존성 =====
|
||||
// 타일즈 - 레이아웃 템플릿 엔진 (JSP 페이지 조각 조합)
|
||||
implementation "org.apache.tiles:tiles-jsp:${tilesVersion}"
|
||||
implementation "org.apache.tiles:tiles-core:${tilesVersion}"
|
||||
implementation "org.apache.tiles:tiles-api:${tilesVersion}"
|
||||
implementation "org.apache.tiles:tiles-servlet:${tilesVersion}"
|
||||
implementation "org.apache.tiles:tiles-el:${tilesVersion}"
|
||||
|
||||
// ===== 데이터 액세스 의존성 =====
|
||||
// MyBatis 스프링 부트 스타터 - SQL 매핑 프레임워크
|
||||
implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:${mybatisVersion}"
|
||||
// MariaDB JDBC 드라이버 - MariaDB 데이터베이스 연결
|
||||
implementation 'org.mariadb.jdbc:mariadb-java-client'
|
||||
// HikariCP - 고성능 JDBC 커넥션 풀 (spring-boot-starter-jdbc에 포함됨)
|
||||
|
||||
// ===== 유틸리티 의존성 =====
|
||||
// Apache Commons Text - 텍스트 처리 유틸리티
|
||||
implementation "org.apache.commons:commons-text:${commonsTextVersion}"
|
||||
|
||||
// ===== EXCEL =====
|
||||
implementation 'org.apache.poi:poi:5.3.0'
|
||||
implementation 'org.apache.poi:poi-ooxml:5.3.0'
|
||||
|
||||
// ===== Swagger UI =====
|
||||
implementation 'org.springdoc:springdoc-openapi-ui:1.7.0'
|
||||
implementation 'org.springdoc:springdoc-openapi-webmvc-core:1.7.0'
|
||||
|
||||
// ===== Quartz Scheduler =====
|
||||
implementation 'org.springframework.boot:spring-boot-starter-quartz'
|
||||
|
||||
// ===== sqlPaser =====
|
||||
implementation 'com.github.jsqlparser:jsqlparser:4.5'
|
||||
|
||||
// ===== Mail =====
|
||||
implementation 'org.springframework.boot:spring-boot-starter-mail'
|
||||
|
||||
// ===== 개발 도구 의존성 =====
|
||||
// Lombok - 반복 코드 생성 도구 (Getter, Setter, Builder 등 자동 생성)
|
||||
compileOnly 'org.projectlombok:lombok'
|
||||
annotationProcessor 'org.projectlombok:lombok'
|
||||
// 스프링 부트 개발 도구 - 자동 재시작, 라이브 리로드 등
|
||||
developmentOnly 'org.springframework.boot:spring-boot-devtools'
|
||||
|
||||
// ===== 테스트 의존성 =====
|
||||
// 스프링 부트 테스트 스타터 - JUnit, Mockito 등 테스트 도구 포함
|
||||
testImplementation 'org.springframework.boot:spring-boot-starter-test'
|
||||
|
||||
// ===== 배포 관련 의존성 =====
|
||||
// 톰캣 서블릿 API - 외부 톰캣 배포 시 사용
|
||||
providedCompile "org.apache.tomcat:tomcat-servlet-api:${tomcatVersion}"
|
||||
// 스프링 부트 톰캣 - 외부 톰캣 배포 시 내장 톰캣 제외
|
||||
providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
|
||||
}
|
||||
|
||||
// ===== 테스트 설정 =====
|
||||
// JUnit 플랫폼을 사용하여 테스트 실행 (JUnit 5 지원)
|
||||
tasks.named('test') {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
// ===== WAR 파일 설정 =====
|
||||
// 생성될 WAR 파일의 이름 지정
|
||||
war {
|
||||
archiveFileName = 'xit-framework.war'
|
||||
}
|
||||
|
||||
// ===== bootWar 파일 설정 =====
|
||||
// 생성될 bootWar 파일의 이름 지정
|
||||
bootWar {
|
||||
archiveFileName = 'xit-framework-boot.war'
|
||||
}
|
||||
|
||||
// war 포함 압축 푼 소스 포함,
|
||||
// ./build/exploded/xit-framework/
|
||||
tasks.register('exploded', Copy) {
|
||||
dependsOn 'war'
|
||||
from zipTree(tasks.war.archiveFile)
|
||||
into layout.buildDirectory.dir("exploded/${project.name}")
|
||||
doFirst {
|
||||
layout.buildDirectory.dir("exploded/${project.name}").get().asFile.deleteDir()
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
@ -0,0 +1,251 @@
|
||||
#!/bin/sh
|
||||
|
||||
#
|
||||
# Copyright © 2015-2021 the original authors.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# https://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
# SPDX-License-Identifier: Apache-2.0
|
||||
#
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Gradle start up script for POSIX generated by Gradle.
|
||||
#
|
||||
# Important for running:
|
||||
#
|
||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
||||
# noncompliant, but you have some other compliant shell such as ksh or
|
||||
# bash, then to run this script, type that shell name before the whole
|
||||
# command line, like:
|
||||
#
|
||||
# ksh Gradle
|
||||
#
|
||||
# Busybox and similar reduced shells will NOT work, because this script
|
||||
# requires all of these POSIX shell features:
|
||||
# * functions;
|
||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
||||
# * compound commands having a testable exit status, especially «case»;
|
||||
# * various built-in commands including «command», «set», and «ulimit».
|
||||
#
|
||||
# Important for patching:
|
||||
#
|
||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
||||
#
|
||||
# The "traditional" practice of packing multiple parameters into a
|
||||
# space-separated string is a well documented source of bugs and security
|
||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
||||
# options in "$@", and eventually passing that to Java.
|
||||
#
|
||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
||||
# see the in-line comments for details.
|
||||
#
|
||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
||||
# Darwin, MinGW, and NonStop.
|
||||
#
|
||||
# (3) This script is generated from the Groovy template
|
||||
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
||||
# within the Gradle project.
|
||||
#
|
||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
# Attempt to set APP_HOME
|
||||
|
||||
# Resolve links: $0 may be a link
|
||||
app_path=$0
|
||||
|
||||
# Need this for daisy-chained symlinks.
|
||||
while
|
||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
||||
[ -h "$app_path" ]
|
||||
do
|
||||
ls=$( ls -ld "$app_path" )
|
||||
link=${ls#*' -> '}
|
||||
case $link in #(
|
||||
/*) app_path=$link ;; #(
|
||||
*) app_path=$APP_HOME$link ;;
|
||||
esac
|
||||
done
|
||||
|
||||
# This is normally unused
|
||||
# shellcheck disable=SC2034
|
||||
APP_BASE_NAME=${0##*/}
|
||||
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
|
||||
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
|
||||
|
||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD=maximum
|
||||
|
||||
warn () {
|
||||
echo "$*"
|
||||
} >&2
|
||||
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
exit 1
|
||||
} >&2
|
||||
|
||||
# OS specific support (must be 'true' or 'false').
|
||||
cygwin=false
|
||||
msys=false
|
||||
darwin=false
|
||||
nonstop=false
|
||||
case "$( uname )" in #(
|
||||
CYGWIN* ) cygwin=true ;; #(
|
||||
Darwin* ) darwin=true ;; #(
|
||||
MSYS* | MINGW* ) msys=true ;; #(
|
||||
NONSTOP* ) nonstop=true ;;
|
||||
esac
|
||||
|
||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
|
||||
# Determine the Java command to use to start the JVM.
|
||||
if [ -n "$JAVA_HOME" ] ; then
|
||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
||||
# IBM's JDK on AIX uses strange locations for the executables
|
||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
||||
else
|
||||
JAVACMD=$JAVA_HOME/bin/java
|
||||
fi
|
||||
if [ ! -x "$JAVACMD" ] ; then
|
||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
else
|
||||
JAVACMD=java
|
||||
if ! command -v java >/dev/null 2>&1
|
||||
then
|
||||
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
|
||||
Please set the JAVA_HOME variable in your environment to match the
|
||||
location of your Java installation."
|
||||
fi
|
||||
fi
|
||||
|
||||
# Increase the maximum file descriptors if we can.
|
||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
||||
case $MAX_FD in #(
|
||||
max*)
|
||||
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
MAX_FD=$( ulimit -H -n ) ||
|
||||
warn "Could not query maximum file descriptor limit"
|
||||
esac
|
||||
case $MAX_FD in #(
|
||||
'' | soft) :;; #(
|
||||
*)
|
||||
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
|
||||
# shellcheck disable=SC2039,SC3045
|
||||
ulimit -n "$MAX_FD" ||
|
||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
||||
esac
|
||||
fi
|
||||
|
||||
# Collect all arguments for the java command, stacking in reverse order:
|
||||
# * args from the command line
|
||||
# * the main class name
|
||||
# * -classpath
|
||||
# * -D...appname settings
|
||||
# * --module-path (only if needed)
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
||||
|
||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
||||
if "$cygwin" || "$msys" ; then
|
||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
||||
|
||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
||||
|
||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
||||
for arg do
|
||||
if
|
||||
case $arg in #(
|
||||
-*) false ;; # don't mess with options #(
|
||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
||||
[ -e "$t" ] ;; #(
|
||||
*) false ;;
|
||||
esac
|
||||
then
|
||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
||||
fi
|
||||
# Roll the args list around exactly as many times as the number of
|
||||
# args, so each arg winds up back in the position where it started, but
|
||||
# possibly modified.
|
||||
#
|
||||
# NB: a `for` loop captures its iteration list before it begins, so
|
||||
# changing the positional parameters here affects neither the number of
|
||||
# iterations, nor the values presented in `arg`.
|
||||
shift # remove old arg
|
||||
set -- "$@" "$arg" # push replacement arg
|
||||
done
|
||||
fi
|
||||
|
||||
|
||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||
|
||||
# Collect all arguments for the java command:
|
||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
|
||||
# and any embedded shellness will be escaped.
|
||||
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
|
||||
# treated as '${Hostname}' itself on the command line.
|
||||
|
||||
set -- \
|
||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
||||
-classpath "$CLASSPATH" \
|
||||
org.gradle.wrapper.GradleWrapperMain \
|
||||
"$@"
|
||||
|
||||
# Stop when "xargs" is not available.
|
||||
if ! command -v xargs >/dev/null 2>&1
|
||||
then
|
||||
die "xargs is not available"
|
||||
fi
|
||||
|
||||
# Use "xargs" to parse quoted args.
|
||||
#
|
||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
||||
#
|
||||
# In Bash we could simply go:
|
||||
#
|
||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
||||
# set -- "${ARGS[@]}" "$@"
|
||||
#
|
||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
||||
# character that might be a shell metacharacter, then use eval to reverse
|
||||
# that process (while maintaining the separation between arguments), and wrap
|
||||
# the whole thing up as a single "set" statement.
|
||||
#
|
||||
# This will of course break if any of these variables contains a newline or
|
||||
# an unmatched quote.
|
||||
#
|
||||
|
||||
eval "set -- $(
|
||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
||||
xargs -n1 |
|
||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
||||
tr '\n' ' '
|
||||
)" '"$@"'
|
||||
|
||||
exec "$JAVACMD" "$@"
|
||||
@ -0,0 +1,94 @@
|
||||
@rem
|
||||
@rem Copyright 2015 the original author or authors.
|
||||
@rem
|
||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||
@rem you may not use this file except in compliance with the License.
|
||||
@rem You may obtain a copy of the License at
|
||||
@rem
|
||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||
@rem
|
||||
@rem Unless required by applicable law or agreed to in writing, software
|
||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
@rem See the License for the specific language governing permissions and
|
||||
@rem limitations under the License.
|
||||
@rem
|
||||
@rem SPDX-License-Identifier: Apache-2.0
|
||||
@rem
|
||||
|
||||
@if "%DEBUG%"=="" @echo off
|
||||
@rem ##########################################################################
|
||||
@rem
|
||||
@rem Gradle startup script for Windows
|
||||
@rem
|
||||
@rem ##########################################################################
|
||||
|
||||
@rem Set local scope for the variables with windows NT shell
|
||||
if "%OS%"=="Windows_NT" setlocal
|
||||
|
||||
set DIRNAME=%~dp0
|
||||
if "%DIRNAME%"=="" set DIRNAME=.
|
||||
@rem This is normally unused
|
||||
set APP_BASE_NAME=%~n0
|
||||
set APP_HOME=%DIRNAME%
|
||||
|
||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
||||
|
||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||
|
||||
@rem Find java.exe
|
||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||
|
||||
set JAVA_EXE=java.exe
|
||||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:findJavaFromJavaHome
|
||||
set JAVA_HOME=%JAVA_HOME:"=%
|
||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
:execute
|
||||
@rem Setup the command line
|
||||
|
||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||
|
||||
|
||||
@rem Execute Gradle
|
||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
||||
|
||||
:end
|
||||
@rem End local scope for the variables with windows NT shell
|
||||
if %ERRORLEVEL% equ 0 goto mainEnd
|
||||
|
||||
:fail
|
||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||
rem the _cmd.exe /c_ return code!
|
||||
set EXIT_CODE=%ERRORLEVEL%
|
||||
if %EXIT_CODE% equ 0 set EXIT_CODE=1
|
||||
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
|
||||
exit /b %EXIT_CODE%
|
||||
|
||||
:mainEnd
|
||||
if "%OS%"=="Windows_NT" endlocal
|
||||
|
||||
:omega
|
||||
@ -0,0 +1,31 @@
|
||||
#-------------------------------------------------------------------------------#
|
||||
# Qodana analysis is configured by qodana.yaml file #
|
||||
# https://www.jetbrains.com/help/qodana/qodana-yaml.html #
|
||||
#-------------------------------------------------------------------------------#
|
||||
version: "1.0"
|
||||
|
||||
#Specify inspection profile for code analysis
|
||||
profile:
|
||||
name: qodana.starter
|
||||
|
||||
#Enable inspections
|
||||
#include:
|
||||
# - name: <SomeEnabledInspectionId>
|
||||
|
||||
#Disable inspections
|
||||
#exclude:
|
||||
# - name: <SomeDisabledInspectionId>
|
||||
# paths:
|
||||
# - <path/where/not/run/inspection>
|
||||
|
||||
projectJDK: "8" #(Applied in CI/CD pipeline)
|
||||
|
||||
#Execute shell command before Qodana execution (Applied in CI/CD pipeline)
|
||||
#bootstrap: sh ./prepare-qodana.sh
|
||||
|
||||
#Install IDE plugins before Qodana execution (Applied in CI/CD pipeline)
|
||||
#plugins:
|
||||
# - id: <plugin.id> #(plugin id can be found at https://plugins.jetbrains.com)
|
||||
|
||||
#Specify Qodana linter for analysis (Applied in CI/CD pipeline)
|
||||
linter: jetbrains/qodana-jvm:2025.1
|
||||
@ -0,0 +1 @@
|
||||
rootProject.name = 'xit-framework'
|
||||
@ -0,0 +1,66 @@
|
||||
package egovframework.config;
|
||||
|
||||
import egovframework.exception.EgovAopExceptionTransfer;
|
||||
import egovframework.exception.EgovDefaultExcepHndlr;
|
||||
import egovframework.exception.EgovDefaultOthersExcepHndlr;
|
||||
import org.egovframe.rte.fdl.cmmn.aspect.ExceptionTransfer;
|
||||
import org.egovframe.rte.fdl.cmmn.exception.handler.ExceptionHandler;
|
||||
import org.egovframe.rte.fdl.cmmn.exception.manager.DefaultExceptionHandleManager;
|
||||
import org.egovframe.rte.fdl.cmmn.exception.manager.ExceptionHandlerService;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.EnableAspectJAutoProxy;
|
||||
import org.springframework.util.AntPathMatcher;
|
||||
|
||||
@Configuration
|
||||
@EnableAspectJAutoProxy
|
||||
public class EgovConfigAspect {
|
||||
|
||||
@Bean
|
||||
public EgovDefaultExcepHndlr egovHandler() {
|
||||
return new EgovDefaultExcepHndlr();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public EgovDefaultOthersExcepHndlr otherHandler() {
|
||||
return new EgovDefaultOthersExcepHndlr();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DefaultExceptionHandleManager defaultExceptionHandleManager(AntPathMatcher antPathMatcher, EgovDefaultExcepHndlr egovHandler) {
|
||||
DefaultExceptionHandleManager defaultExceptionHandleManager = new DefaultExceptionHandleManager();
|
||||
defaultExceptionHandleManager.setReqExpMatcher(antPathMatcher);
|
||||
defaultExceptionHandleManager.setPatterns(new String[]{"**service.impl.*"});
|
||||
defaultExceptionHandleManager.setHandlers(new ExceptionHandler[]{egovHandler});
|
||||
return defaultExceptionHandleManager;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DefaultExceptionHandleManager otherExceptionHandleManager(AntPathMatcher antPathMatcher, EgovDefaultOthersExcepHndlr othersExcepHndlr) {
|
||||
DefaultExceptionHandleManager defaultExceptionHandleManager = new DefaultExceptionHandleManager();
|
||||
defaultExceptionHandleManager.setReqExpMatcher(antPathMatcher);
|
||||
defaultExceptionHandleManager.setPatterns(new String[]{"**service.impl.*"});
|
||||
defaultExceptionHandleManager.setHandlers(new ExceptionHandler[]{othersExcepHndlr});
|
||||
return defaultExceptionHandleManager;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ExceptionTransfer exceptionTransfer(
|
||||
@Qualifier("defaultExceptionHandleManager") DefaultExceptionHandleManager defaultExceptionHandleManager,
|
||||
@Qualifier("otherExceptionHandleManager") DefaultExceptionHandleManager otherExceptionHandleManager) {
|
||||
ExceptionTransfer exceptionTransfer = new ExceptionTransfer();
|
||||
exceptionTransfer.setExceptionHandlerService(new ExceptionHandlerService[] {
|
||||
defaultExceptionHandleManager, otherExceptionHandleManager
|
||||
});
|
||||
return exceptionTransfer;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public EgovAopExceptionTransfer aopExceptionTransfer(ExceptionTransfer exceptionTransfer) {
|
||||
EgovAopExceptionTransfer egovAopExceptionTransfer = new EgovAopExceptionTransfer();
|
||||
egovAopExceptionTransfer.setExceptionTransfer(exceptionTransfer);
|
||||
return egovAopExceptionTransfer;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,60 @@
|
||||
package egovframework.config;
|
||||
|
||||
import org.egovframe.rte.fdl.cmmn.trace.LeaveaTrace;
|
||||
import org.egovframe.rte.fdl.cmmn.trace.handler.DefaultTraceHandler;
|
||||
import org.egovframe.rte.fdl.cmmn.trace.handler.TraceHandler;
|
||||
import org.egovframe.rte.fdl.cmmn.trace.manager.DefaultTraceHandleManager;
|
||||
import org.egovframe.rte.fdl.cmmn.trace.manager.TraceHandlerService;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.support.MessageSourceAccessor;
|
||||
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
|
||||
import org.springframework.util.AntPathMatcher;
|
||||
|
||||
@Configuration
|
||||
public class EgovConfigCommon {
|
||||
|
||||
@Bean
|
||||
public AntPathMatcher antPathMatcher() {
|
||||
return new AntPathMatcher();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DefaultTraceHandler defaultTraceHandler() {
|
||||
return new DefaultTraceHandler();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ReloadableResourceBundleMessageSource messageSource() {
|
||||
ReloadableResourceBundleMessageSource reloadableResourceBundleMessageSource = new ReloadableResourceBundleMessageSource();
|
||||
reloadableResourceBundleMessageSource.setBasenames(
|
||||
"classpath:/egovframework/message/message-common",
|
||||
"classpath:/org/egovframe/rte/fdl/idgnr/messages/idgnr",
|
||||
"classpath:/org/egovframe/rte/fdl/property/messages/properties");
|
||||
reloadableResourceBundleMessageSource.setDefaultEncoding("UTF-8");
|
||||
reloadableResourceBundleMessageSource.setCacheSeconds(60);
|
||||
return reloadableResourceBundleMessageSource;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public MessageSourceAccessor messageSourceAccessor() {
|
||||
return new MessageSourceAccessor(this.messageSource());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DefaultTraceHandleManager traceHandlerService() {
|
||||
DefaultTraceHandleManager defaultTraceHandleManager = new DefaultTraceHandleManager();
|
||||
defaultTraceHandleManager.setReqExpMatcher(antPathMatcher());
|
||||
defaultTraceHandleManager.setPatterns(new String[]{"*"});
|
||||
defaultTraceHandleManager.setHandlers(new TraceHandler[]{defaultTraceHandler()});
|
||||
return defaultTraceHandleManager;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public LeaveaTrace leaveaTrace() {
|
||||
LeaveaTrace leaveaTrace = new LeaveaTrace();
|
||||
leaveaTrace.setTraceHandlerServices(new TraceHandlerService[]{traceHandlerService()});
|
||||
return leaveaTrace;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,42 @@
|
||||
package egovframework.config;
|
||||
|
||||
import egovframework.configProperties.InterceptorProperties;
|
||||
import egovframework.interceptor.AuthInterceptor;
|
||||
import go.kr.project.login.service.LoginService;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
|
||||
/**
|
||||
* 인터셉터 설정 클래스
|
||||
*/
|
||||
@Configuration
|
||||
@RequiredArgsConstructor
|
||||
public class EgovConfigInterceptor implements WebMvcConfigurer {
|
||||
|
||||
private final LoginService loginService;
|
||||
private final InterceptorProperties interceptorProperties;
|
||||
|
||||
|
||||
/**
|
||||
* 인터셉터 등록
|
||||
* @param registry 인터셉터 레지스트리
|
||||
*/
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(authInterceptor())
|
||||
.addPathPatterns("/**") // 모든 경로에 적용
|
||||
.excludePathPatterns(interceptorProperties.getInterceptorExclude()); // 접근 제어 예외 URL 패턴 제외
|
||||
}
|
||||
|
||||
/**
|
||||
* 인증 인터셉터 빈 등록
|
||||
* @return AuthInterceptor 객체
|
||||
*/
|
||||
@Bean
|
||||
public AuthInterceptor authInterceptor() {
|
||||
return new AuthInterceptor(loginService);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,61 @@
|
||||
package egovframework.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.mail.javamail.JavaMailSender;
|
||||
import org.springframework.mail.javamail.JavaMailSenderImpl;
|
||||
|
||||
import java.util.Properties;
|
||||
|
||||
/**
|
||||
* 메일 발송 관련 설정 클래스
|
||||
* JavaMailSender 빈을 등록합니다.
|
||||
*/
|
||||
@Configuration
|
||||
public class EgovConfigMail {
|
||||
|
||||
@Value("${spring.mail.host}")
|
||||
private String host;
|
||||
|
||||
@Value("${spring.mail.port}")
|
||||
private int port;
|
||||
|
||||
@Value("${spring.mail.username}")
|
||||
private String username;
|
||||
|
||||
@Value("${spring.mail.password}")
|
||||
private String password;
|
||||
|
||||
@Value("${spring.mail.properties.mail.smtp.auth}")
|
||||
private boolean smtpAuth;
|
||||
|
||||
@Value("${spring.mail.properties.mail.smtp.starttls.enable}")
|
||||
private boolean starttlsEnable;
|
||||
|
||||
@Value("${spring.mail.properties.mail.debug}")
|
||||
private boolean debug;
|
||||
|
||||
|
||||
/**
|
||||
* JavaMailSender 빈 등록
|
||||
* application-local.yml 파일에 설정된 메일 서버 정보를 사용합니다.
|
||||
* @return JavaMailSender 인스턴스
|
||||
*/
|
||||
@Bean
|
||||
public JavaMailSender javaMailSender() {
|
||||
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
|
||||
mailSender.setHost(host);
|
||||
mailSender.setPort(port);
|
||||
mailSender.setUsername(username);
|
||||
mailSender.setPassword(password);
|
||||
|
||||
Properties props = mailSender.getJavaMailProperties();
|
||||
props.put("mail.smtp.auth", smtpAuth);
|
||||
props.put("mail.smtp.starttls.enable", starttlsEnable);
|
||||
props.put("mail.debug", debug);
|
||||
|
||||
|
||||
return mailSender;
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,95 @@
|
||||
package egovframework.config;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.aop.Advisor;
|
||||
import org.springframework.aop.aspectj.AspectJExpressionPointcut;
|
||||
import org.springframework.aop.support.DefaultPointcutAdvisor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
||||
import org.springframework.transaction.TransactionDefinition;
|
||||
import org.springframework.transaction.interceptor.*;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
|
||||
/**
|
||||
* @ClassName : EgovConfigAppTransaction.java
|
||||
* @Description : Transaction 설정
|
||||
*
|
||||
* @author : 윤주호
|
||||
* @since : 2021. 7. 20
|
||||
* @version : 1.0
|
||||
*
|
||||
* <pre>
|
||||
* << 개정이력(Modification Information) >>
|
||||
*
|
||||
* 수정일 수정자 수정내용
|
||||
* ------------- ------------ ---------------------
|
||||
* 2021. 7. 20 윤주호 최초 생성
|
||||
* </pre>
|
||||
*
|
||||
*/
|
||||
@Slf4j
|
||||
@Configuration
|
||||
public class EgovConfigTransaction {
|
||||
|
||||
@Autowired
|
||||
DataSource dataSource;
|
||||
|
||||
@PostConstruct
|
||||
public void init() {
|
||||
log.info("Datasource type: {}", dataSource.getClass().getName());
|
||||
}
|
||||
|
||||
@Bean
|
||||
public DataSourceTransactionManager txManager() {
|
||||
DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
|
||||
dataSourceTransactionManager.setDataSource(dataSource);
|
||||
return dataSourceTransactionManager;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// TransactionAdvice 설정
|
||||
// -------------------------------------------------------------
|
||||
|
||||
@Bean
|
||||
public TransactionInterceptor txAdvice(DataSourceTransactionManager txManager) {
|
||||
TransactionInterceptor txAdvice = new TransactionInterceptor();
|
||||
txAdvice.setTransactionManager(txManager);
|
||||
txAdvice.setTransactionAttributeSource(getNameMatchTransactionAttributeSource());
|
||||
return txAdvice;
|
||||
}
|
||||
|
||||
private NameMatchTransactionAttributeSource getNameMatchTransactionAttributeSource() {
|
||||
NameMatchTransactionAttributeSource txAttributeSource = new NameMatchTransactionAttributeSource();
|
||||
txAttributeSource.setNameMap(getRuleBasedTxAttributeMap());
|
||||
return txAttributeSource;
|
||||
}
|
||||
|
||||
private HashMap<String, TransactionAttribute> getRuleBasedTxAttributeMap() {
|
||||
HashMap<String, TransactionAttribute> txMethods = new HashMap<String, TransactionAttribute>();
|
||||
|
||||
RuleBasedTransactionAttribute txAttribute = new RuleBasedTransactionAttribute();
|
||||
txAttribute.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
|
||||
txAttribute.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
|
||||
txMethods.put("*", txAttribute);
|
||||
|
||||
return txMethods;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// TransactionAdvisor 설정
|
||||
// -------------------------------------------------------------
|
||||
|
||||
@Bean
|
||||
public Advisor txAdvisor(DataSourceTransactionManager txManager) {
|
||||
AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut();
|
||||
pointcut.setExpression(
|
||||
"execution(* go.kr.project..impl.*Impl.*(..)) or execution(* egovframework.com..*Impl.*(..))");
|
||||
return new DefaultPointcutAdvisor(pointcut, txAdvice(txManager));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,20 @@
|
||||
package egovframework.config;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
import org.springframework.context.MessageSource;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.validation.Validator;
|
||||
import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean;
|
||||
|
||||
@Configuration
|
||||
public class EgovConfigValidation {
|
||||
|
||||
@Bean
|
||||
public Validator getValidator(@Qualifier("messageSource") MessageSource messageSource) {
|
||||
LocalValidatorFactoryBean localValidatorFactoryBean = new LocalValidatorFactoryBean();
|
||||
localValidatorFactoryBean.setValidationMessageSource(messageSource);
|
||||
return localValidatorFactoryBean;
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,98 @@
|
||||
package egovframework.config;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.Setter;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationContextAware;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Import;
|
||||
import org.springframework.http.CacheControl;
|
||||
import org.springframework.web.servlet.HandlerExceptionResolver;
|
||||
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||
import org.springframework.web.servlet.view.InternalResourceViewResolver;
|
||||
import org.springframework.web.servlet.view.UrlBasedViewResolver;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesConfigurer;
|
||||
import org.springframework.web.servlet.view.tiles3.TilesView;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Setter
|
||||
@Configuration
|
||||
@RequiredArgsConstructor
|
||||
@Import({
|
||||
EgovConfigAspect.class,
|
||||
EgovConfigCommon.class,
|
||||
EgovConfigTransaction.class,
|
||||
EgovConfigValidation.class,
|
||||
EgovConfigInterceptor.class,
|
||||
EgovErrorConfig.class
|
||||
})
|
||||
public class EgovConfigWeb implements WebMvcConfigurer, ApplicationContextAware {
|
||||
|
||||
private ApplicationContext applicationContext;
|
||||
|
||||
@Override
|
||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||
registry.addResourceHandler("/plugins/**")
|
||||
.addResourceLocations("/resources/plugins/")
|
||||
.setCacheControl(CacheControl.noCache().mustRevalidate());
|
||||
registry.addResourceHandler("/css/**")
|
||||
.addResourceLocations("/resources/css/")
|
||||
.setCacheControl(CacheControl.noCache().mustRevalidate());
|
||||
registry.addResourceHandler("/img/**")
|
||||
.addResourceLocations("/resources/img/")
|
||||
.setCacheControl(CacheControl.noCache().mustRevalidate());
|
||||
registry.addResourceHandler("/js/**")
|
||||
.addResourceLocations("/resources/js/")
|
||||
.setCacheControl(CacheControl.noCache().mustRevalidate());
|
||||
registry.addResourceHandler("/xit/**")
|
||||
.addResourceLocations("/resources/xit/")
|
||||
.setCacheControl(CacheControl.noCache().mustRevalidate());
|
||||
registry.addResourceHandler("/font/**")
|
||||
.addResourceLocations("/resources/font/")
|
||||
.setCacheControl(CacheControl.noCache().mustRevalidate());
|
||||
}
|
||||
|
||||
/**
|
||||
* Exception handling is now done using @ControllerAdvice in EgovExceptionAdvice class.
|
||||
* The SimpleMappingExceptionResolver approach has been replaced with a more modern approach.
|
||||
*
|
||||
* @see egovframework.exception.EgovExceptionAdvice
|
||||
*/
|
||||
@Override
|
||||
public void configureHandlerExceptionResolvers(@Nullable List< HandlerExceptionResolver> resolvers) {
|
||||
// Exception handling is now done using @ControllerAdvice
|
||||
}
|
||||
|
||||
@Bean
|
||||
public UrlBasedViewResolver viewResolver() {
|
||||
UrlBasedViewResolver tilesViewResolver = new UrlBasedViewResolver();
|
||||
tilesViewResolver.setViewClass(TilesView.class);
|
||||
tilesViewResolver.setOrder(1);
|
||||
return tilesViewResolver;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TilesConfigurer tilesConfigurer() {
|
||||
TilesConfigurer tilesConfigurer = new TilesConfigurer();
|
||||
tilesConfigurer.setDefinitions(
|
||||
"/WEB-INF/tiles/tiles.xml"
|
||||
);
|
||||
tilesConfigurer.setCheckRefresh(true);
|
||||
return tilesConfigurer;
|
||||
}
|
||||
|
||||
@Bean
|
||||
public InternalResourceViewResolver internalResourceViewResolver() {
|
||||
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
|
||||
resolver.setPrefix("/WEB-INF/views/");
|
||||
resolver.setSuffix(".jsp");
|
||||
resolver.setOrder(2);
|
||||
return resolver;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -0,0 +1,46 @@
|
||||
package egovframework.config;
|
||||
|
||||
import org.springframework.boot.web.server.ErrorPage;
|
||||
import org.springframework.boot.web.server.ErrorPageRegistrar;
|
||||
import org.springframework.boot.web.server.ErrorPageRegistry;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.http.HttpStatus;
|
||||
|
||||
/**
|
||||
* 에러 페이지 설정을 위한 설정 클래스
|
||||
* 404, 500 등의 HTTP 에러 코드에 대한 커스텀 에러 페이지를 매핑합니다.
|
||||
*/
|
||||
@Configuration
|
||||
public class EgovErrorConfig {
|
||||
|
||||
/**
|
||||
* ErrorPageRegistrar 빈을 생성하여 에러 페이지를 등록합니다.
|
||||
*
|
||||
* @return ErrorPageRegistrar 구현체
|
||||
*/
|
||||
@Bean
|
||||
public ErrorPageRegistrar errorPageRegistrar() {
|
||||
return new ErrorPageRegistrar() {
|
||||
@Override
|
||||
public void registerErrorPages(ErrorPageRegistry registry) {
|
||||
// 404 에러 페이지 설정
|
||||
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/error/404");
|
||||
|
||||
// 500 에러 페이지 설정
|
||||
ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/error/500");
|
||||
|
||||
// 기타 서버 에러 페이지 설정
|
||||
ErrorPage error502Page = new ErrorPage(HttpStatus.BAD_GATEWAY, "/error/500");
|
||||
ErrorPage error503Page = new ErrorPage(HttpStatus.SERVICE_UNAVAILABLE, "/error/500");
|
||||
ErrorPage error504Page = new ErrorPage(HttpStatus.GATEWAY_TIMEOUT, "/error/500");
|
||||
|
||||
// 예외 처리를 위한 에러 페이지 설정
|
||||
ErrorPage runtimeExceptionPage = new ErrorPage(RuntimeException.class, "/error/500");
|
||||
|
||||
// 에러 페이지 등록
|
||||
registry.addErrorPages(error404Page, error500Page, error502Page, error503Page, error504Page, runtimeExceptionPage);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package egovframework.config;
|
||||
|
||||
import com.fasterxml.jackson.core.SerializableString;
|
||||
import com.fasterxml.jackson.core.io.CharacterEscapes;
|
||||
import com.fasterxml.jackson.core.io.SerializedString;
|
||||
import org.apache.commons.text.StringEscapeUtils;
|
||||
|
||||
public class HtmlCharacterEscapes extends CharacterEscapes {
|
||||
|
||||
private static final long serialVersionUID = -6353236148390563705L;
|
||||
|
||||
private final int[] asciiEscapes;
|
||||
|
||||
public HtmlCharacterEscapes() {
|
||||
this.asciiEscapes = CharacterEscapes.standardAsciiEscapesForJSON();
|
||||
this.asciiEscapes['<'] = CharacterEscapes.ESCAPE_CUSTOM;
|
||||
this.asciiEscapes['>'] = CharacterEscapes.ESCAPE_CUSTOM;
|
||||
this.asciiEscapes['\"'] = CharacterEscapes.ESCAPE_CUSTOM;
|
||||
this.asciiEscapes['('] = CharacterEscapes.ESCAPE_CUSTOM;
|
||||
this.asciiEscapes[')'] = CharacterEscapes.ESCAPE_CUSTOM;
|
||||
this.asciiEscapes['#'] = CharacterEscapes.ESCAPE_CUSTOM;
|
||||
this.asciiEscapes['\''] = CharacterEscapes.ESCAPE_CUSTOM;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int[] getEscapeCodesForAscii() {
|
||||
return asciiEscapes;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SerializableString getEscapeSequence(int ch) {
|
||||
return new SerializedString(StringEscapeUtils.escapeHtml4(Character.toString((char) ch)));
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,27 @@
|
||||
package egovframework.config;
|
||||
|
||||
import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
|
||||
/**
|
||||
* MyBatis Configuration
|
||||
*
|
||||
* This class configures MyBatis by adding custom interceptors.
|
||||
*/
|
||||
@Configuration
|
||||
@Profile({"local", "dev"}) // local과 dev 프로파일에서만 활성화
|
||||
public class MyBatisConfig {
|
||||
|
||||
/**
|
||||
* Customizes the MyBatis configuration by adding the query interceptor.
|
||||
*
|
||||
* @param interceptor The MyBatis query interceptor
|
||||
* @return A ConfigurationCustomizer that adds the interceptor to MyBatis
|
||||
*/
|
||||
@Bean
|
||||
public ConfigurationCustomizer mybatisConfigurationCustomizer(MyBatisQueryInterceptor interceptor) {
|
||||
return configuration -> configuration.addInterceptor(interceptor);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,449 @@
|
||||
package egovframework.config;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import net.sf.jsqlparser.JSQLParserException;
|
||||
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
|
||||
import net.sf.jsqlparser.schema.Column;
|
||||
import net.sf.jsqlparser.statement.Statement;
|
||||
import net.sf.jsqlparser.statement.delete.Delete;
|
||||
import net.sf.jsqlparser.statement.insert.Insert;
|
||||
import net.sf.jsqlparser.statement.select.Join;
|
||||
import net.sf.jsqlparser.statement.select.PlainSelect;
|
||||
import net.sf.jsqlparser.statement.select.Select;
|
||||
import net.sf.jsqlparser.statement.select.SelectItem;
|
||||
import net.sf.jsqlparser.statement.update.Update;
|
||||
import net.sf.jsqlparser.statement.update.UpdateSet;
|
||||
import org.apache.ibatis.executor.Executor;
|
||||
import org.apache.ibatis.mapping.BoundSql;
|
||||
import org.apache.ibatis.mapping.MappedStatement;
|
||||
import org.apache.ibatis.mapping.ParameterMapping;
|
||||
import org.apache.ibatis.plugin.Interceptor;
|
||||
import org.apache.ibatis.plugin.Intercepts;
|
||||
import org.apache.ibatis.plugin.Invocation;
|
||||
import org.apache.ibatis.plugin.Signature;
|
||||
import org.apache.ibatis.session.ResultHandler;
|
||||
import org.apache.ibatis.session.RowBounds;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* MyBatis Query Interceptor
|
||||
*
|
||||
* This interceptor logs detailed information about SQL queries executed by MyBatis,
|
||||
* including the original SQL, actual SQL with parameters, and parameter values.
|
||||
*/
|
||||
@Component
|
||||
@Profile({"local", "dev"}) // local과 dev 프로파일에서만 활성화
|
||||
@Intercepts({
|
||||
@Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}),
|
||||
@Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class})
|
||||
})
|
||||
@Slf4j
|
||||
public class MyBatisQueryInterceptor implements Interceptor {
|
||||
|
||||
@Override
|
||||
public Object intercept(Invocation invocation) throws Throwable {
|
||||
MappedStatement ms = (MappedStatement) invocation.getArgs()[0];
|
||||
Object parameter = invocation.getArgs()[1];
|
||||
|
||||
BoundSql boundSql = ms.getBoundSql(parameter);
|
||||
String sql = boundSql.getSql();
|
||||
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
|
||||
|
||||
// 실제 실행될 쿼리 추출 (MyBatis 내부에서 처리된 결과)
|
||||
String actualSql = getActualSql(boundSql, parameter);
|
||||
|
||||
// 파라미터 정보 추출
|
||||
Map<String, Object> paramMap = extractDetailedParameters(parameter, parameterMappings);
|
||||
|
||||
logDetailedQueryInfo(ms.getId(), sql, actualSql, paramMap);
|
||||
|
||||
// 원래 쿼리 실행
|
||||
long startTime = System.currentTimeMillis();
|
||||
Object result = invocation.proceed();
|
||||
long endTime = System.currentTimeMillis();
|
||||
|
||||
// 쿼리 실행 시간 로깅
|
||||
log.debug("Query execution time: {} ms", (endTime - startTime));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private String getActualSql(BoundSql boundSql, Object parameter) {
|
||||
String sql = boundSql.getSql();
|
||||
|
||||
if (parameter == null) {
|
||||
return sql;
|
||||
}
|
||||
|
||||
List<ParameterMapping> parameterMappings = boundSql.getParameterMappings();
|
||||
|
||||
if (parameterMappings.isEmpty()) {
|
||||
return sql;
|
||||
}
|
||||
|
||||
// SQL 복사본 생성
|
||||
String actualSql = sql;
|
||||
|
||||
try {
|
||||
// 파라미터 값 추출
|
||||
for (ParameterMapping parameterMapping : parameterMappings) {
|
||||
String propertyName = parameterMapping.getProperty();
|
||||
Object value = null;
|
||||
|
||||
if (boundSql.hasAdditionalParameter(propertyName)) {
|
||||
value = boundSql.getAdditionalParameter(propertyName);
|
||||
} else if (parameter instanceof Map) {
|
||||
value = ((Map<?, ?>) parameter).get(propertyName);
|
||||
} else if (parameter instanceof String) {
|
||||
// String 타입 파라미터 처리
|
||||
value = parameter;
|
||||
} else if (parameter instanceof Number) {
|
||||
// Number 타입 파라미터 처리 (Integer, Long, Double 등)
|
||||
value = parameter;
|
||||
} else if (parameter instanceof Boolean) {
|
||||
// Boolean 타입 파라미터 처리
|
||||
value = parameter;
|
||||
} else {
|
||||
value = getParameterValue(parameter, propertyName);
|
||||
}
|
||||
|
||||
String valueStr = value != null ? value.toString() : "null";
|
||||
// SQL 인젝션 방지를 위한 문자열 이스케이프 처리
|
||||
valueStr = valueStr.replace("'", "''");
|
||||
|
||||
// 다양한 데이터 타입에 대한 처리
|
||||
if (value instanceof String) {
|
||||
// 문자열 타입은 따옴표로 감싸기
|
||||
actualSql = actualSql.replaceFirst("\\?", "'" + valueStr + "'");
|
||||
} else if (value instanceof Number) {
|
||||
// 숫자 타입 (Integer, Long, Double 등)은 그대로 사용
|
||||
actualSql = actualSql.replaceFirst("\\?", valueStr);
|
||||
} else if (value instanceof Boolean) {
|
||||
// Boolean 타입은 그대로 사용
|
||||
actualSql = actualSql.replaceFirst("\\?", valueStr);
|
||||
} else if (value instanceof java.util.Date) {
|
||||
// 표준 타임스탬프 포맷 사용
|
||||
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||
actualSql = actualSql.replaceFirst("\\?", "'" + sdf.format(value) + "'");
|
||||
} else if (value instanceof java.time.LocalDateTime) {
|
||||
// Java 8 LocalDateTime 처리
|
||||
actualSql = actualSql.replaceFirst("\\?", "'" + value.toString().replace('T', ' ') + "'");
|
||||
} else {
|
||||
// 기타 타입은 null이 아닌 경우 따옴표로 감싸기
|
||||
actualSql = actualSql.replaceFirst("\\?", value != null ? "'" + valueStr + "'" : valueStr);
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("Failed to get actual SQL with parameters", e);
|
||||
return sql;
|
||||
}
|
||||
|
||||
return actualSql;
|
||||
}
|
||||
|
||||
private Object getParameterValue(Object parameter, String propertyName) {
|
||||
try {
|
||||
// 현재 클래스부터 상위 클래스까지 순회하면서 필드 찾기
|
||||
Class<?> currentClass = parameter.getClass();
|
||||
while (currentClass != null) {
|
||||
try {
|
||||
Field field = currentClass.getDeclaredField(propertyName);
|
||||
field.setAccessible(true);
|
||||
return field.get(parameter);
|
||||
} catch (NoSuchFieldException e) {
|
||||
// 현재 클래스에서 필드를 찾지 못하면 상위 클래스로 이동
|
||||
currentClass = currentClass.getSuperclass();
|
||||
}
|
||||
}
|
||||
throw new NoSuchFieldException(propertyName);
|
||||
} catch (Exception e) {
|
||||
log.warn("필드 값 추출 실패: {} ({})", propertyName, e.getMessage());
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private Map<String, Object> extractDetailedParameters(Object parameter, List<ParameterMapping> parameterMappings) {
|
||||
Map<String, Object> paramMap = new HashMap<>();
|
||||
|
||||
if (parameter == null) {
|
||||
return paramMap;
|
||||
}
|
||||
|
||||
if (parameter instanceof Map) {
|
||||
paramMap.putAll((Map<String, Object>) parameter);
|
||||
} else {
|
||||
// 객체의 필드 정보도 추출
|
||||
paramMap.put("param", parameter);
|
||||
extractObjectFields(parameter, paramMap);
|
||||
}
|
||||
|
||||
return paramMap;
|
||||
}
|
||||
|
||||
private void extractObjectFields(Object obj, Map<String, Object> paramMap) {
|
||||
try {
|
||||
Class<?> currentClass = obj.getClass();
|
||||
while (currentClass != null) {
|
||||
Field[] fields = currentClass.getDeclaredFields();
|
||||
for (Field field : fields) {
|
||||
try {
|
||||
// String 타입의 객체는 건너뛰기
|
||||
if (obj instanceof String) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 시스템 클래스의 필드는 건너뛰기
|
||||
if (field.getDeclaringClass().getName().startsWith("java.")) {
|
||||
continue;
|
||||
}
|
||||
|
||||
field.setAccessible(true);
|
||||
Object value = field.get(obj);
|
||||
paramMap.put(field.getName(), value);
|
||||
|
||||
} catch (IllegalAccessException | SecurityException e) {
|
||||
// 개별 필드 접근 실패는 무시하고 계속 진행
|
||||
log.debug("필드 접근 실패: {} ({})", field.getName(), e.getMessage());
|
||||
}
|
||||
}
|
||||
currentClass = currentClass.getSuperclass();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.warn("객체 필드 추출 실패", e);
|
||||
}
|
||||
}
|
||||
|
||||
private void logDetailedQueryInfo(String mapperMethod, String originalSql, String actualSql, Map<String, Object> paramMap) {
|
||||
StringBuilder logMessage = new StringBuilder();
|
||||
logMessage.append("\n");
|
||||
logMessage.append("┌─────────────── MyBatis Query Details ───────────────\n");
|
||||
logMessage.append("│ Mapper Method: ").append(mapperMethod).append("\n");
|
||||
logMessage.append("│ Parameters: ").append(paramMap).append("\n");
|
||||
|
||||
// 원본 SQL 포맷팅, prd, 운영
|
||||
//logMessage.append("│ Original SQL:\n");
|
||||
//formatSqlInLog(logMessage, originalSql);
|
||||
|
||||
// 실제 실행 SQL 포맷팅, local, dev 로컬 개발
|
||||
logMessage.append("│ Actual SQL:\n");
|
||||
formatSqlInLog(logMessage, actualSql);
|
||||
|
||||
logMessage.append("└──────────────────────────────────────────────────────");
|
||||
|
||||
log.info(logMessage.toString());
|
||||
}
|
||||
|
||||
private void formatSqlInLog(StringBuilder logMessage, String sql) {
|
||||
// SQL 키워드 하이라이트 및 들여쓰기
|
||||
String formattedSql = formatSql(sql);
|
||||
String[] lines = formattedSql.split("\n");
|
||||
|
||||
for (String line : lines) {
|
||||
//logMessage.append("│ ").append(line).append("\n");
|
||||
logMessage.append(line).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
private String formatSql(String sql) {
|
||||
try {
|
||||
// SQL 파서를 사용한 포맷팅
|
||||
Statement statement = CCJSqlParserUtil.parse(sql);
|
||||
return formatStatement(statement, 0);
|
||||
} catch (JSQLParserException e) {
|
||||
log.debug("SQL 파싱 실패. 기본 포맷팅으로 대체합니다.", e);
|
||||
log.info("SQL 파싱 실패. 기본 포맷팅으로 대체합니다.");
|
||||
// 파싱 실패 시 기본 포맷팅 사용
|
||||
return sql.replaceAll("\\s+", " ").trim();
|
||||
}
|
||||
}
|
||||
|
||||
private String formatStatement(Statement statement, int indent) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
String indentation = String.join("", java.util.Collections.nCopies(indent, " "));
|
||||
|
||||
if (statement instanceof Select) {
|
||||
formatSelect((Select) statement, result, indent);
|
||||
} else if (statement instanceof Insert) {
|
||||
formatInsert((Insert) statement, result, indent);
|
||||
} else if (statement instanceof Update) {
|
||||
formatUpdate((Update) statement, result, indent);
|
||||
} else if (statement instanceof Delete) {
|
||||
formatDelete((Delete) statement, result, indent);
|
||||
}
|
||||
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
private void formatSelect(Select select, StringBuilder result, int indent) {
|
||||
String indentation = String.join("", Collections.nCopies(indent, " "));
|
||||
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
|
||||
|
||||
// SELECT 절
|
||||
result.append(indentation).append("SELECT\n");
|
||||
formatSelectItems(plainSelect.getSelectItems(), result, indent + 2);
|
||||
|
||||
// FROM 절
|
||||
if (plainSelect.getFromItem() != null) {
|
||||
result.append(indentation).append("FROM\n");
|
||||
result.append(indentation).append(" ").append(plainSelect.getFromItem()).append("\n");
|
||||
}
|
||||
|
||||
// JOIN 절
|
||||
if (plainSelect.getJoins() != null) {
|
||||
for (Join join : plainSelect.getJoins()) {
|
||||
result.append(indentation).append(join.isLeft() ? "LEFT JOIN " : "JOIN ")
|
||||
.append(join.getRightItem()).append("\n");
|
||||
if (join.getOnExpression() != null) {
|
||||
result.append(indentation).append(" ON ").append(join.getOnExpression()).append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// WHERE 절
|
||||
if (plainSelect.getWhere() != null) {
|
||||
result.append(indentation).append("WHERE\n");
|
||||
result.append(indentation).append(" ").append(plainSelect.getWhere()).append("\n");
|
||||
}
|
||||
|
||||
// GROUP BY 절
|
||||
if (plainSelect.getGroupBy() != null) {
|
||||
result.append(indentation).append("GROUP BY\n");
|
||||
result.append(indentation).append(" ")
|
||||
.append(plainSelect.getGroupBy().getGroupByExpressions().stream()
|
||||
.map(Object::toString)
|
||||
.collect(Collectors.joining(", ")))
|
||||
.append("\n");
|
||||
}
|
||||
|
||||
// HAVING 절
|
||||
if (plainSelect.getHaving() != null) {
|
||||
result.append(indentation).append("HAVING\n");
|
||||
result.append(indentation).append(" ").append(plainSelect.getHaving()).append("\n");
|
||||
}
|
||||
|
||||
// ORDER BY 절
|
||||
if (plainSelect.getOrderByElements() != null) {
|
||||
result.append(indentation).append("ORDER BY\n");
|
||||
result.append(indentation).append(" ")
|
||||
.append(plainSelect.getOrderByElements().stream()
|
||||
.map(Object::toString)
|
||||
.collect(Collectors.joining(", ")))
|
||||
.append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
private void formatSelectItems(List<SelectItem> items, StringBuilder result, int indent) {
|
||||
String indentation = String.join("", Collections.nCopies(indent, " "));
|
||||
for (int i = 0; i < items.size(); i++) {
|
||||
result.append(indentation).append(items.get(i));
|
||||
if (i < items.size() - 1) {
|
||||
result.append(",");
|
||||
}
|
||||
result.append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
private void formatInsert(Insert insert, StringBuilder result, int indent) {
|
||||
String indentation = String.join("", Collections.nCopies(indent, " "));
|
||||
result.append(indentation).append("INSERT INTO ").append(insert.getTable()).append("\n");
|
||||
|
||||
// 컬럼 목록
|
||||
if (insert.getColumns() != null) {
|
||||
result.append(indentation).append("(")
|
||||
.append(insert.getColumns().stream()
|
||||
.map(Column::getColumnName)
|
||||
.collect(Collectors.joining(", ")))
|
||||
.append(")\n");
|
||||
}
|
||||
|
||||
result.append(indentation).append("VALUES\n");
|
||||
// VALUES 절 포맷팅
|
||||
if (insert.getItemsList() != null) {
|
||||
result.append(indentation).append(" ").append(insert.getItemsList()).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
private void formatUpdate(Update update, StringBuilder result, int indent) {
|
||||
String indentation = String.join("", Collections.nCopies(indent, " "));
|
||||
|
||||
// UPDATE 절
|
||||
result.append(indentation).append("UPDATE\n");
|
||||
result.append(indentation).append(" ").append(update.getTable()).append("\n");
|
||||
|
||||
// SET 절
|
||||
result.append(indentation).append("SET\n");
|
||||
List<UpdateSet> updateSets = update.getUpdateSets();
|
||||
for (int i = 0; i < updateSets.size(); i++) {
|
||||
UpdateSet updateSet = updateSets.get(i);
|
||||
result.append(indentation).append(" ")
|
||||
.append(updateSet.getColumns().get(0))
|
||||
.append(" = ")
|
||||
.append(updateSet.getExpressions().get(0));
|
||||
|
||||
if (i < updateSets.size() - 1) {
|
||||
result.append(",");
|
||||
}
|
||||
result.append("\n");
|
||||
}
|
||||
|
||||
// WHERE 절
|
||||
if (update.getWhere() != null) {
|
||||
result.append(indentation).append("WHERE\n");
|
||||
result.append(indentation).append(" ").append(update.getWhere()).append("\n");
|
||||
}
|
||||
|
||||
// ORDER BY 절 (일부 데이터베이스에서 지원)
|
||||
if (update.getOrderByElements() != null) {
|
||||
result.append(indentation).append("ORDER BY\n");
|
||||
result.append(indentation).append(" ")
|
||||
.append(update.getOrderByElements().stream()
|
||||
.map(Object::toString)
|
||||
.collect(Collectors.joining(", ")))
|
||||
.append("\n");
|
||||
}
|
||||
|
||||
// LIMIT 절 (일부 데이터베이스에서 지원)
|
||||
if (update.getLimit() != null) {
|
||||
result.append(indentation).append("LIMIT ")
|
||||
.append(update.getLimit()).append("\n");
|
||||
}
|
||||
}
|
||||
|
||||
private void formatDelete(Delete delete, StringBuilder result, int indent) {
|
||||
String indentation = String.join("", Collections.nCopies(indent, " "));
|
||||
|
||||
// DELETE 절
|
||||
result.append(indentation).append("DELETE FROM\n");
|
||||
result.append(indentation).append(" ").append(delete.getTable()).append("\n");
|
||||
|
||||
// WHERE 절
|
||||
if (delete.getWhere() != null) {
|
||||
result.append(indentation).append("WHERE\n");
|
||||
result.append(indentation).append(" ").append(delete.getWhere()).append("\n");
|
||||
}
|
||||
|
||||
// ORDER BY 절 (일부 데이터베이스에서 지원)
|
||||
if (delete.getOrderByElements() != null) {
|
||||
result.append(indentation).append("ORDER BY\n");
|
||||
result.append(indentation).append(" ")
|
||||
.append(delete.getOrderByElements().stream()
|
||||
.map(Object::toString)
|
||||
.collect(Collectors.joining(", ")))
|
||||
.append("\n");
|
||||
}
|
||||
|
||||
// LIMIT 절 (일부 데이터베이스에서 지원)
|
||||
if (delete.getLimit() != null) {
|
||||
result.append(indentation).append("LIMIT ")
|
||||
.append(delete.getLimit()).append("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,73 @@
|
||||
package egovframework.config;
|
||||
|
||||
import io.swagger.v3.oas.models.Components;
|
||||
import io.swagger.v3.oas.models.OpenAPI;
|
||||
import io.swagger.v3.oas.models.info.Info;
|
||||
import io.swagger.v3.oas.models.info.License;
|
||||
import org.springdoc.core.GroupedOpenApi;
|
||||
import org.springdoc.core.SpringDocUtils;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
|
||||
/**
|
||||
* Swagger UI 설정 클래스
|
||||
* OpenAPI 3.0 스펙을 기반으로 API 문서화를 위한 설정을 제공합니다.
|
||||
* 세션 기반 인증을 사용하므로 별도의 보안 스키마를 설정하지 않습니다.
|
||||
* @Controller 어노테이션이 있는 클래스도 스캔하도록 설정합니다.
|
||||
*/
|
||||
@Configuration
|
||||
public class SwaggerConfig {
|
||||
|
||||
static {
|
||||
// @Controller 어노테이션이 있는 클래스도 스캔하도록 설정
|
||||
SpringDocUtils.getConfig().addAnnotationsToIgnore(RequestMapping.class);
|
||||
}
|
||||
|
||||
/**
|
||||
* 모든 API를 문서화하는 GroupedOpenApi 빈을 정의합니다.
|
||||
*
|
||||
* @return GroupedOpenApi 설정 객체
|
||||
*/
|
||||
@Bean
|
||||
public GroupedOpenApi allApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("All")
|
||||
.packagesToScan("go.kr.project")
|
||||
.pathsToMatch("/**")
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 로그인 관련 API를 문서화하는 GroupedOpenApi 빈을 정의합니다.
|
||||
*
|
||||
* @return GroupedOpenApi 설정 객체
|
||||
*/
|
||||
@Bean
|
||||
public GroupedOpenApi loginApi() {
|
||||
return GroupedOpenApi.builder()
|
||||
.group("Login")
|
||||
.packagesToScan("go.kr.project.login")
|
||||
.pathsToMatch("/login/**")
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* OpenAPI 설정을 정의합니다.
|
||||
* API 문서의 기본 정보(제목, 설명, 버전 등)를 설정합니다.
|
||||
*
|
||||
* @return OpenAPI 설정 객체
|
||||
*/
|
||||
@Bean
|
||||
public OpenAPI openAPI() {
|
||||
Info info = new Info()
|
||||
.title("XIT Framework API")
|
||||
.description("XIT Framework API 문서 - 세션 기반 인증 사용")
|
||||
.version("v1.0.0")
|
||||
.license(new License().name("Apache 2.0").url("http://springdoc.org"));
|
||||
|
||||
return new OpenAPI()
|
||||
.components(new Components())
|
||||
.info(info);
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package egovframework.configProperties;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* packageName : egovframework.config
|
||||
* fileName : FileUploadProperties
|
||||
* author : 시스템 관리자
|
||||
* date : 25. 5. 23.
|
||||
* description : 파일 업로드 관련 설정 속성
|
||||
* ===========================================================
|
||||
* DATE AUTHOR NOTE
|
||||
* -----------------------------------------------------------
|
||||
* 25. 5. 23. 시스템 관리자 최초 생성
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "file.upload")
|
||||
public class FileUploadProperties {
|
||||
|
||||
/** 파일 저장 기본 경로 */
|
||||
private String path;
|
||||
|
||||
/** 최대 파일 크기 (단일 파일) - 기본값 10MB */
|
||||
private long maxSize;
|
||||
|
||||
/** 최대 총 파일 크기 - 기본값 50MB */
|
||||
private long maxTotalSize;
|
||||
|
||||
/** 허용된 파일 확장자 */
|
||||
private String allowedExtensions;
|
||||
|
||||
/** 최대 파일 개수 - 기본값 10개 */
|
||||
private int maxFiles;
|
||||
|
||||
/** 실제 파일 삭제 여부 - 기본값 true */
|
||||
private boolean realFileDelete;
|
||||
|
||||
/** 하위 디렉토리 설정 */
|
||||
private Map<String, String> subDirs;
|
||||
}
|
||||
@ -0,0 +1,31 @@
|
||||
package egovframework.configProperties;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* packageName : egovframework.config
|
||||
* fileName : InterceptorProperties
|
||||
* author : 박성영
|
||||
* date : 25. 5. 19.
|
||||
* description :
|
||||
* ===========================================================
|
||||
* DATE AUTHOR NOTE
|
||||
* -----------------------------------------------------------
|
||||
* 25. 5. 19. 박성영 최초 생성
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "interceptor")
|
||||
public class InterceptorProperties {
|
||||
|
||||
private List<String> interceptorExclude;
|
||||
private List<String> refererExclude;
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
package egovframework.configProperties;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* packageName : egovframework.config
|
||||
* fileName : LoginProperties
|
||||
* author : 박성영
|
||||
* date : 25. 5. 19.
|
||||
* description : 로그인 관련 설정 속성
|
||||
* ===========================================================
|
||||
* DATE AUTHOR NOTE
|
||||
* -----------------------------------------------------------
|
||||
* 25. 5. 19. 박성영 최초 생성
|
||||
* 25. 5. 22. 시스템 관리자 동시 접속 가능 여부 속성 추가
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "login")
|
||||
public class LoginProperties {
|
||||
|
||||
private String url; // 로그인 페이지 URL
|
||||
private Lock lock; // 로그인 잠금 설정
|
||||
private boolean allowMultipleLogin = true; // 동시 접속 가능 여부 (기본값: true)
|
||||
|
||||
@Setter
|
||||
@Getter
|
||||
public static class Lock {
|
||||
private int count; // 비밀번호 잠김 최종 카운트
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue