723 lines
20 KiB
Markdown
723 lines
20 KiB
Markdown
# IOTDOOR 프로그램 명세서
|
|
|
|
## 1. 문서 개요
|
|
|
|
- 작성일: 2026-04-15
|
|
- 분석 대상: 현재 저장소 기준 소스코드 전체
|
|
- 작성 목적: 프로젝트 구조, 기능 범위, 운영 방식, 배포 구조, 유지보수 유의사항을 한 문서로 정리
|
|
- 분석 기준 파일:
|
|
- `pom.xml`
|
|
- `src/main/webapp/WEB-INF/web.xml`
|
|
- `src/main/resources/egovframework/spring/com/*.xml`
|
|
- `src/main/webapp/WEB-INF/config/egovframework/springmvc/*.xml`
|
|
- `src/main/java/kr/iotdoor/**`
|
|
- `src/main/resources/egovframework/mapper/kr/iotdoor/**`
|
|
|
|
본 문서는 저장소에 포함된 소스코드를 기준으로 작성되었으며, 저장소에 없는 DB DDL, 인프라 구성, 외부 시스템 상세 계약은 확인 가능한 범위 내에서만 기술하였다.
|
|
|
|
## 2. 시스템 개요
|
|
|
|
IOTDOOR는 `eGovFrame + Spring MVC + MyBatis + Thymeleaf` 기반의 포털형 웹 애플리케이션이다.
|
|
단순 게시판 서비스가 아니라 다음 성격이 함께 포함된 통합형 시스템으로 판단된다.
|
|
|
|
- 사이트 운영/CMS 기능
|
|
- 사이트 정보 관리
|
|
- 메뉴 관리
|
|
- 동적 페이지 편집
|
|
- 팝업/배너 운영
|
|
- 정책 페이지 관리
|
|
- 커뮤니티 기능
|
|
- 게시판
|
|
- 댓글
|
|
- FAQ
|
|
- Q&A
|
|
- 설문
|
|
- 쪽지
|
|
- 사용자 기능
|
|
- 로그인/로그아웃
|
|
- 회원가입
|
|
- 개인정보/프로필 관리
|
|
- 최근 검색어 관리
|
|
- 운영자 기능
|
|
- 관리자 대시보드
|
|
- 사용자/권한/사이트/코드 관리
|
|
- 운영 로그 및 통계 화면
|
|
- 외부 연동 기능
|
|
- Hypermeta API 연동
|
|
|
|
URI 네임스페이스는 대체로 아래처럼 구분된다.
|
|
|
|
| 구분 | URI 패턴 | 역할 |
|
|
| --- | --- | --- |
|
|
| 포털 메인 | `/`, `/index.do` | 일반 사용자 메인 진입점 |
|
|
| 공통 기능 | `/comn/**` | 로그인, 회원, 파일, 메시지, 사이트 공통 기능 |
|
|
| 커뮤니티 | `/cmty/**` | 게시판, 댓글, FAQ, Q&A, 설문 |
|
|
| 관리자 | `/mfuc/**` | 운영자 화면 및 백오피스 |
|
|
| 통계 | `/scnt/**` | 통계 대시보드 및 집계 화면 |
|
|
|
|
## 3. 기술 스택
|
|
|
|
| 항목 | 내용 |
|
|
| --- | --- |
|
|
| 언어/런타임 | Java 8 |
|
|
| 빌드 도구 | Maven |
|
|
| 패키징 | WAR |
|
|
| 배포 형태 | `ROOT.war`로 패키징되는 톰캣 배포형 웹앱 |
|
|
| 프레임워크 | Spring 5.3.20, eGovFrame 4.1.0 |
|
|
| 웹 MVC | Spring MVC Annotation Controller |
|
|
| 뷰 엔진 | Thymeleaf 3, Spring Security Dialect, Layout Dialect |
|
|
| 호환 설정 | JSP View Resolver도 설정되어 있으나 실제 화면은 Thymeleaf 중심 |
|
|
| 영속성 | MyBatis, Mapper Interface + SQL XML |
|
|
| DB | MariaDB 계열 전제, 런타임은 JNDI `java:comp/env/jdbc/serviceDB` 사용 |
|
|
| 보안 | Spring Security + eGov Security/Access |
|
|
| JSON 처리 | Jackson |
|
|
| 외부 통신 | OkHttp, Moshi, Apache HttpClient |
|
|
| 파일 처리 | Commons FileUpload, Thumbnailator |
|
|
| 스케줄링 | Quartz 의존성 포함, 일부 스케줄 설정 흔적 존재 |
|
|
| 로깅 | Log4j2, log4jdbc |
|
|
|
|
## 4. 빌드 및 실행 구조
|
|
|
|
### 4.1 Maven 프로필
|
|
|
|
프로젝트는 환경별 리소스를 분리해서 사용한다.
|
|
|
|
- `local`
|
|
- `dev`
|
|
- `real`
|
|
- `2025`
|
|
|
|
기본 활성 프로필은 `local`이다.
|
|
|
|
### 4.2 빌드 산출물
|
|
|
|
- 산출 디렉터리: `target/`
|
|
- 최종 WAR 이름: `ROOT.war`
|
|
|
|
예시 빌드 명령:
|
|
|
|
- `mvn clean package -Plocal`
|
|
- `mvn clean package -Pdev`
|
|
- `mvn clean package -Preal`
|
|
|
|
### 4.3 환경별 리소스
|
|
|
|
환경별 프로퍼티와 로그 설정은 아래 디렉터리로 분리되어 있다.
|
|
|
|
- `src/main/resources-local`
|
|
- `src/main/resources-dev`
|
|
- `src/main/resources-real`
|
|
|
|
Maven 리소스 설정상 `src/main/resources-${env}` 가 선택적으로 포함된다.
|
|
|
|
### 4.4 웹 설정
|
|
|
|
`web.xml` 기준 주요 설정은 다음과 같다.
|
|
|
|
- 세션 타임아웃: 60분
|
|
- 웰컴 파일: `index.jsp`
|
|
- 에러 페이지:
|
|
- `404 -> /code404.jsp`
|
|
- `500 -> /code500.jsp`
|
|
|
|
`egov-com-servlet.xml` 기준 주요 설정은 다음과 같다.
|
|
|
|
- 컨트롤러 스캔 대상: `egovframework, kr`
|
|
- 인터셉터 등록:
|
|
- `LocaleChangeInterceptor`
|
|
- `WebLogInterceptor`
|
|
- `MenuPageInterceptor`
|
|
- Thymeleaf View Resolver 사용
|
|
- JSON View 사용
|
|
- `/resources/**` 정적 리소스 제공
|
|
|
|
## 5. 시스템 아키텍처
|
|
|
|
### 5.1 계층 구조
|
|
|
|
시스템은 전형적인 계층형 구조를 따른다.
|
|
|
|
1. Controller
|
|
2. Service
|
|
3. Mapper Interface
|
|
4. MyBatis SQL XML
|
|
5. DB
|
|
6. Thymeleaf Template / Static Resource
|
|
|
|
대표적인 요청 흐름은 아래와 같다.
|
|
|
|
1. 클라이언트 요청이 Spring MVC Controller로 진입
|
|
2. 인터셉터에서 웹 로그 기록 및 메뉴 정보 주입
|
|
3. Controller에서 인증/권한/파라미터 검증 수행
|
|
4. Service에서 업무 로직 처리
|
|
5. Mapper와 SQL XML을 통해 DB 접근
|
|
6. HTML 또는 JSON 응답 반환
|
|
|
|
### 5.2 패키지 구조
|
|
|
|
| 패키지 | 역할 |
|
|
| --- | --- |
|
|
| `kr.iotdoor.comn` | 사이트 공통 기능, 회원, 로그인, 파일, 메시지, 메뉴, 팝업, 페이지, API |
|
|
| `kr.iotdoor.cmty` | 게시판, 댓글, FAQ, Q&A, 설문 등 커뮤니티 기능 |
|
|
| `kr.iotdoor.mfuc` | 관리자 기능, 권한/접근/운영/로그 관리 |
|
|
| `kr.iotdoor.scnt` | 통계 기능 |
|
|
| `kr.iotdoor.iotdoor` | 포털 메인 외 추가 공개 페이지 |
|
|
|
|
### 5.3 메뉴 기반 포털 구조
|
|
|
|
이 프로젝트는 하드코딩된 메뉴보다 DB 기반 메뉴 구조를 중심으로 동작한다.
|
|
|
|
- `MenuServiceImpl` 에서 헤더 메뉴, 사이드 메뉴, breadcrumb location 구성
|
|
- `MenuPageInterceptor` 가 `menuSn` 값을 기준으로 `menuTree` 를 요청에 주입
|
|
- 메뉴 수정/등록/활성화/삭제 시 메뉴 캐시를 갱신
|
|
- 최대 4차 메뉴까지 고려한 구조가 구현되어 있음
|
|
|
|
### 5.4 뷰 렌더링 구조
|
|
|
|
- 메인 템플릿 위치:
|
|
- `src/main/webapp/WEB-INF/template/kr/iotdoor/**`
|
|
- 정적 리소스 위치:
|
|
- `src/main/webapp/resources/**`
|
|
- 동적 페이지 편집 대상:
|
|
- HTML: `WEB-INF/template/kr/iotdoor/comn/site/page/*.html`
|
|
- CSS/JS: `resources/kr/iotdoor/comn/site/page/**`
|
|
|
|
## 6. 기능 명세
|
|
|
|
### 6.1 포털 메인 및 공통 사이트 기능
|
|
|
|
#### 메인 페이지
|
|
|
|
주요 URI:
|
|
|
|
- `/`
|
|
- `/index.do`
|
|
- `/portfolio.do`
|
|
- `/contact.do`
|
|
- `/prvcPrcsPlan.do`
|
|
- `/emlClctReject.do`
|
|
|
|
주요 동작:
|
|
|
|
- 메뉴 트리 로딩
|
|
- 메인 공지사항 목록 노출
|
|
- 활성 팝업 목록 노출
|
|
- 사이트 정보 및 정책 페이지 렌더링
|
|
|
|
#### 관리자 메인
|
|
|
|
주요 URI:
|
|
|
|
- `/mngr/index.do`
|
|
- `/mfuc/index.do`
|
|
- `/mfuc/system/dashboard/siteSumryPge.do`
|
|
|
|
주요 동작:
|
|
|
|
- 로그인 여부 및 `ROLE_MANAGER` 권한 확인
|
|
- 공통 메뉴/프로필/게시판 목록 로딩
|
|
- 운영자 대시보드 화면 제공
|
|
|
|
### 6.2 로그인/회원가입/회원 정보
|
|
|
|
#### 로그인
|
|
|
|
주요 URI:
|
|
|
|
- `/comn/user/login/loginUser.do`
|
|
- `/comn/user/login/actionLogin.do`
|
|
- `/comn/user/login/main.do`
|
|
- `/comn/user/login/logout.do`
|
|
- `/comn/user/login/lgnLmtPge.do`
|
|
|
|
주요 동작:
|
|
|
|
- 개발 모드에서 개발용 로그인 보조값 표시 가능
|
|
- 로그인 후 이전 URL로 복귀 처리
|
|
- 마지막 로그인 일시 갱신
|
|
|
|
#### 회원가입
|
|
|
|
주요 URI:
|
|
|
|
- `/comn/user/join/mbrRegPge.do`
|
|
- `/comn/user/join/writeJoinMber.do`
|
|
|
|
주요 동작:
|
|
|
|
- 세션의 `join_member` 정보를 기반으로 회원가입 진행
|
|
- 기관 정보, 학년/반, 지역 코드 처리
|
|
- 개인정보 처리 동의 여부 필수 검증
|
|
|
|
#### 개인정보/프로필
|
|
|
|
주요 URI:
|
|
|
|
- `/comn/user/info/indvdlInfo.do`
|
|
- `/comn/user/info/modifyIndvdlInfo.do`
|
|
- `/comn/user/info/modifyIndvdlInfo.json`
|
|
- `/comn/user/info/searchUser.json`
|
|
- `/comn/user/info/searchRcvr.json`
|
|
- `/comn/user/info/proflPgeMdfcn.do`
|
|
- `/comn/user/info/checkDpcnNcnm.json`
|
|
- `/comn/user/info/uploadImage.json`
|
|
|
|
주요 동작:
|
|
|
|
- 사용자 기본 정보와 상세 정보 분리 조회
|
|
- 거주지역 공통코드 조회
|
|
- 별명 중복검사 후 프로필 수정
|
|
- 프로필 이미지 업로드
|
|
- 메시지 수신자 자동완성 검색
|
|
|
|
### 6.3 메시지 기능
|
|
|
|
주요 URI:
|
|
|
|
- `/comn/msg/info/rcptnMsgList.do`
|
|
- `/comn/msg/info/dsptchMsgList.do`
|
|
- `/comn/msg/info/msgDtl.do`
|
|
- `/comn/msg/info/deleteRcptnMsg.do`
|
|
- `/comn/msg/info/msgTrsm.do`
|
|
- `/comn/msg/info/sendMsgDstch.json`
|
|
- `/comn/msg/info/ntcnList.json`
|
|
- `/comn/msg/info/ntcnCnt.json`
|
|
- `/comn/msg/tmplat/selectMsgTmplat.json`
|
|
|
|
주요 동작:
|
|
|
|
- 수신/발신 메시지 목록 관리
|
|
- 메시지 상세 확인 시 수신 여부 갱신
|
|
- 수신자 검색 기반 쪽지 발송
|
|
- 메시지 템플릿 기반 전송 지원
|
|
- 알림 개수/목록 조회
|
|
|
|
### 6.4 파일 및 첨부파일 기능
|
|
|
|
주요 URI:
|
|
|
|
- `/comn/file/downloadFile.do`
|
|
- `/comn/file/getImage.do`
|
|
- `/comn/file/deleteFile.json`
|
|
- `/comn/file/imgUpload.json`
|
|
- `/comn/file/fileUpload.json`
|
|
|
|
주요 동작:
|
|
|
|
- 첨부파일 메타데이터는 DB에 저장
|
|
- 실제 파일은 환경별 파일 저장 경로에 저장
|
|
- 에디터용 이미지/파일 업로드 지원
|
|
- 이미지 미존재 시 기본 이미지 대체 처리
|
|
|
|
### 6.5 게시판/댓글/신고 기능
|
|
|
|
주요 URI:
|
|
|
|
- `/cmty/bbs/pst/pstList.do`
|
|
- `/cmty/bbs/pst/pstDtl.do`
|
|
- `/cmty/bbs/pst/pstReg.do`
|
|
- `/cmty/bbs/pst/pstMdfcn.do`
|
|
- `/cmty/bbs/pst/pstReply.do`
|
|
- `/cmty/bbs/pst/deletePst.do`
|
|
- `/cmty/bbs/pst/download.do`
|
|
- `/cmty/bbs/pst/pstList.json`
|
|
|
|
댓글 관련 URI:
|
|
|
|
- `/cmty/cmnt/writeCmnt.json`
|
|
- `/cmty/cmnt/cmntList.json`
|
|
- `/cmty/cmnt/replyCmnt.json`
|
|
- `/cmty/cmnt/cmntDtl.json`
|
|
- `/cmty/cmnt/modifyCmnt.json`
|
|
- `/cmty/cmnt/deleteCmnt.json`
|
|
- `/cmty/cmnt/cmntRcmdtn.json`
|
|
|
|
게시글 신고 URI:
|
|
|
|
- `/comn/dclr/writePstDclr.json`
|
|
|
|
주요 동작:
|
|
|
|
- 게시판별 권한 코드에 따른 조회/등록/수정/삭제/답글/다운로드/댓글 권한 통제
|
|
- 게시판 템플릿 코드(`BT001`, `BT002`)에 따른 화면 분기
|
|
- 공지 여부, 비공개 여부, 게시 기간 설정 지원
|
|
- 첨부파일 업로드/다운로드 지원
|
|
- 댓글 목록, 답글, 추천 기능 지원
|
|
- 본문 저장 전 스크립트 제거 처리 수행
|
|
|
|
### 6.6 FAQ 기능
|
|
|
|
주요 URI:
|
|
|
|
- `/cmty/faq/faqList.do`
|
|
- `/cmty/faq/faqDtl.do`
|
|
- `/cmty/faq/faqReg.do`
|
|
- `/cmty/faq/faqMdfcn.do`
|
|
- `/cmty/faq/deleteFaq.do`
|
|
|
|
관리자 FAQ URI:
|
|
|
|
- `/mfuc/system/faq/faqListMng.do`
|
|
- `/mfuc/system/faq/faqListMng.json`
|
|
- `/mfuc/system/faq/mngrFaqReg.do`
|
|
- `/mfuc/system/faq/faqMdfcn.do`
|
|
- `/mfuc/system/faq/deleteFaq.json`
|
|
|
|
### 6.7 Q&A 기능
|
|
|
|
코드상 Q&A는 두 갈래로 운영된다.
|
|
|
|
1. 일반 사이트 Q&A
|
|
2. 교실/수업형 Q&A
|
|
|
|
대표 URI:
|
|
|
|
- 일반 Q&A
|
|
- `/cmty/qna/qnaList.do`
|
|
- `/cmty/qna/qnaDtl.do`
|
|
- `/cmty/qna/qnaReg.do`
|
|
- `/cmty/qna/qnaMdfcn.do`
|
|
- `/cmty/qna/deleteQstn.do`
|
|
- `/cmty/qna/qstnAnsReg.do`
|
|
- 수업형 Q&A
|
|
- `/cmty/qna/clas/tcher/tcherQstnList.do`
|
|
- `/cmty/qna/clas/stdnt/stdntSelfQstnList.do`
|
|
- `/cmty/qna/clas/stdnt/stdntQstnReg.do`
|
|
- `/cmty/qna/clas/stdnt/stdntPreQstnReg.do`
|
|
- `/cmty/qna/clas/stdnt/writeStdntQstn.json`
|
|
- `/cmty/qna/clas/tcher/modifyTcherQstnAns.json`
|
|
- `/cmty/qna/clas/stdnt/modifyStdntQstn.json`
|
|
- `/cmty/qna/clas/qstnDownload.do`
|
|
- `/cmty/qna/clas/ansDownload.do`
|
|
|
|
주요 동작:
|
|
|
|
- 교사/관리자/모니터/학생 권한에 따라 접근 제어
|
|
- 질문 첨부파일과 답변 첨부파일을 분리 관리
|
|
- 일부 수정/등록 요청은 세션 기반 수동 토큰 검증 수행
|
|
- 질문 유형/상태는 공통 상세코드에서 조회
|
|
|
|
### 6.8 설문 기능
|
|
|
|
주요 URI:
|
|
|
|
- `/cmty/srvy/srvyList.do`
|
|
- `/cmty/srvy/srvyReg.do`
|
|
- `/cmty/srvy/srvyMdfcn.do`
|
|
- `/cmty/srvy/writeMngrSrvy.json`
|
|
- `/cmty/srvy/modifyMngrSrvy.json`
|
|
- `/cmty/srvy/deleteSrvy.json`
|
|
- `/cmty/srvy/deleteSrvyQstn.json`
|
|
- `/cmty/srvy/srvySbmsn.do`
|
|
- `/cmty/srvy/insertSrvySbmsn.json`
|
|
- `/cmty/srvy/searchSrvy.json`
|
|
|
|
주요 동작:
|
|
|
|
- 사이트 설문 목록 조회
|
|
- 설문 등록/수정/삭제
|
|
- 설문 질문 삭제
|
|
- 응답자 중복 참여 방지
|
|
- 설문 자동완성 검색 지원
|
|
|
|
### 6.9 사이트 운영/CMS 기능
|
|
|
|
#### 사이트 정보 및 정책 관리
|
|
|
|
주요 URI:
|
|
|
|
- `/mfuc/system/site/siteInfo.do`
|
|
- `/mfuc/system/site/modifySiteInfo.do`
|
|
- `/mfuc/system/site/modifySiteInfo.json`
|
|
- `/comn/site/sitePolicyList.do`
|
|
- `/comn/site/sitePolicy.do`
|
|
|
|
주요 동작:
|
|
|
|
- 사이트 상세 정보 수정
|
|
- 도메인 목록 관리
|
|
- 정책 변경 시 이력형 관리
|
|
|
|
#### 페이지 편집
|
|
|
|
주요 URI:
|
|
|
|
- `/mfuc/system/pge/pageEdit.do`
|
|
- `/mfuc/system/pge/savePge.json`
|
|
|
|
주요 동작:
|
|
|
|
- 페이지 정보 DB 저장
|
|
- HTML/CSS/JS 소스를 실제 파일 경로와 동기화
|
|
- 파일이 없으면 DB 소스를 복구용 데이터로 사용
|
|
|
|
#### 메뉴 관리
|
|
|
|
주요 URI:
|
|
|
|
- `/mfuc/system/menu/menuListMng.do`
|
|
- `/mfuc/system/menu/menuReg.do`
|
|
- `/mfuc/system/menu/menuRegist.json`
|
|
- `/mfuc/system/menu/menuMdfcn.do`
|
|
- `/mfuc/system/menu/menuMdfcn.json`
|
|
- `/mfuc/system/menu/menuReactvtn.do`
|
|
|
|
#### 팝업/배너 관리
|
|
|
|
주요 URI:
|
|
|
|
- 사용자 팝업:
|
|
- `/comn/popup/windowPopup.do`
|
|
- 관리자 팝업:
|
|
- `/mfuc/system/popup/popupListMng.do`
|
|
- `/mfuc/system/popup/popupReg.do`
|
|
- `/mfuc/system/popup/popupMdfcn.do`
|
|
- `/mfuc/system/popup/deletePopup.do`
|
|
- 관리자 배너:
|
|
- `/mfuc/system/banner/bannerListMng.do`
|
|
- `/mfuc/system/banner/bannerReg.do`
|
|
- `/mfuc/system/banner/bannerMdfcn.do`
|
|
- `/mfuc/system/banner/deleteBanner.do`
|
|
- `/mfuc/system/banner/uploadImage.json`
|
|
|
|
### 6.10 관리자 백오피스 기능
|
|
|
|
`/mfuc/system/**` 영역에서 확인되는 주요 운영 기능은 다음과 같다.
|
|
|
|
- 관리자 대시보드
|
|
- 사용자 관리
|
|
- 게시판/공지 관리
|
|
- 댓글 관리
|
|
- FAQ 관리
|
|
- Q&A 관리
|
|
- 설문 관리
|
|
- 사이트 관리
|
|
- 메뉴 관리
|
|
- 페이지 관리
|
|
- 팝업/배너 관리
|
|
- 공통코드 관리
|
|
- 메시지/템플릿 관리
|
|
- 관리자 접근 IP 제한 관리
|
|
- 권한 관련 화면
|
|
- 운영 로그 관리
|
|
|
|
대표 URI 예시:
|
|
|
|
- `/mfuc/system/user/userListMng.do`
|
|
- `/mfuc/system/bbs/info/mngrBbsList.do`
|
|
- `/mfuc/system/bbs/pst/mngrBbsSntncList.do`
|
|
- `/mfuc/system/bbs/pst/mngrNotice.do`
|
|
- `/mfuc/system/cd/cmmnCdListMng.do`
|
|
- `/mfuc/system/cd/cmmnDtlCdList.do`
|
|
- `/mfuc/system/acs/mngrIpLmtMng.do`
|
|
- `/mfuc/system/msg/msgTrsmListMng.do`
|
|
- `/mfuc/system/msg/tmplat/msgTmplatList.do`
|
|
|
|
### 6.11 통계 및 로그 기능
|
|
|
|
통계 영역 URI:
|
|
|
|
- `/scnt/intro/statsSumryPge.do`
|
|
- `/scnt/conts/contsStats.do`
|
|
- `/scnt/clg/cntnStats.do`
|
|
- `/scnt/msg/msgStats.do`
|
|
- `/scnt/plg/pstStats.do`
|
|
- `/scnt/srch/srchKwrdSttusStats.do`
|
|
- `/scnt/srvy/srvyStats.do`
|
|
|
|
통계 범주:
|
|
|
|
- 콘텐츠 통계
|
|
- 콘텐츠 접근 통계
|
|
- 메시지 통계
|
|
- 게시물 통계
|
|
- 검색어 통계
|
|
- 설문 통계
|
|
- 요약 통계
|
|
|
|
운영 로그 URI 예시:
|
|
|
|
- `/mfuc/system/log/api/apiCommLog.do`
|
|
- `/mfuc/system/log/cd/cmmnCdChgLog.do`
|
|
- `/mfuc/system/log/conts/userContsAtnlcLog.do`
|
|
- `/mfuc/system/log/err/srvrErrLog.do`
|
|
- `/mfuc/system/log/prvc/prvcAcsDelHstryList.do`
|
|
- `/mfuc/system/log/prvc/userInfoChgHstryList.do`
|
|
- `/mfuc/system/log/prvc/authrtChgHstryList.do`
|
|
|
|
로그 범주:
|
|
|
|
- 웹 접근 로그
|
|
- 로그인 관련 로그
|
|
- 개인정보 변경/삭제 이력
|
|
- 코드 변경 이력
|
|
- API 사용 이력
|
|
- 서버 에러 로그
|
|
- 콘텐츠 접근 로그
|
|
|
|
## 7. 보안 및 권한 구조
|
|
|
|
### 7.1 인증/인가 방식
|
|
|
|
Spring Security + eGov Security 기반의 DB 인증 구조를 사용한다.
|
|
|
|
대표 설정:
|
|
|
|
- 로그인 URL: `/comn/user/login/loginUser.do`
|
|
- 로그인 실패 URL: `/comn/user/login/loginUser.do?login_error=1`
|
|
- 접근 거부 URL: `/authrt/acsReject.do`
|
|
|
|
보안 질의에 사용되는 대표 테이블:
|
|
|
|
- `TN_USER`
|
|
- `TN_ROLE_INFO`
|
|
- `TN_AUTHRT_ROLE_REL`
|
|
- `TN_AUTHRT_SCLSRT`
|
|
|
|
코드에서 직접 확인되는 대표 권한:
|
|
|
|
- `ROLE_MANAGER`
|
|
- `ROLE_TEACHER`
|
|
- `ROLE_MONITOR`
|
|
|
|
이 외에도 게시판별 권한 코드는 게시판 메타데이터 기반으로 별도 적용된다.
|
|
|
|
### 7.2 인터셉터 기반 공통 처리
|
|
|
|
- `WebLogInterceptor`
|
|
- 요청 URL, 요청자 ID, 요청자 IP 기록
|
|
- `MenuPageInterceptor`
|
|
- `menuSn` 기준 메뉴 트리 주입
|
|
- `LocaleChangeInterceptor`
|
|
- `lang` 파라미터로 locale 전환
|
|
|
|
### 7.3 공통 예외/검증 처리
|
|
|
|
- `CommonDefaultController`
|
|
- JSON 검증 오류 조립
|
|
- 공통 에러 로깅
|
|
- `SiteExceptionResolver`
|
|
- 데이터 접근 예외 및 프레임워크 예외의 에러 화면 매핑
|
|
|
|
## 8. 데이터 및 리소스 구조
|
|
|
|
### 8.1 MyBatis 매퍼 구조
|
|
|
|
- Mapper Interface:
|
|
- `src/main/java/kr/iotdoor/**/mapper`
|
|
- SQL XML:
|
|
- `src/main/resources/egovframework/mapper/kr/iotdoor/**/*_SQL.xml`
|
|
|
|
Java 패키지 구조와 SQL XML 구조가 대체로 1:1에 가깝게 대응되어 있다.
|
|
|
|
### 8.2 파일 저장 구조
|
|
|
|
코드상 파일 저장은 첨부파일 저장소와 콘텐츠 저장소로 구분된다.
|
|
|
|
- 첨부파일 기준 프로퍼티:
|
|
- `Globals.fileStorePath`
|
|
- 콘텐츠 저장 기준 프로퍼티:
|
|
- `Globals.contentsStorePath`
|
|
- 웹 노출 루트:
|
|
- `Globals.contentsRoot`
|
|
|
|
대표 저장 패턴:
|
|
|
|
- 게시판 첨부: `BBS/{bbsIdntfNo}/{날짜}`
|
|
- Q&A 첨부: `QNA/{qnaIdntfNo}/{날짜}`
|
|
- 에디터 업로드: `{구분코드}/IMAGE`, `{구분코드}/FILE`
|
|
- 프로필/콘텐츠 이미지: 콘텐츠 루트 URL 생성 방식
|
|
|
|
### 8.3 외부 연동
|
|
|
|
Hypermeta 연동이 구현되어 있다.
|
|
|
|
주요 URI:
|
|
|
|
- `/comn/api/getContsHypermeta.json`
|
|
- `/comn/api/getMetaHypermeta.json`
|
|
|
|
서비스 호출 대상:
|
|
|
|
- `/api/contents/search`
|
|
- `/api/iotdoor/Lesson/list?pageIndex=...`
|
|
|
|
기준 URL은 `Globals.HYPERMETA_URL` 프로퍼티를 사용한다.
|
|
|
|
## 9. 프로젝트 규모 요약
|
|
|
|
현재 저장소 기준 집계 값은 다음과 같다.
|
|
|
|
| 항목 | 수량 |
|
|
| --- | ---: |
|
|
| Java 소스 파일 | 392 |
|
|
| Controller 클래스 | 59 |
|
|
| Service 구현 클래스 | 51 |
|
|
| Mapper 인터페이스 | 54 |
|
|
| MyBatis SQL XML | 53 |
|
|
| Thymeleaf HTML 템플릿 | 156 |
|
|
| `WEB-INF/jsp` 하위 JSP | 0 |
|
|
| `src/test` 하위 Java 테스트 | 0 |
|
|
|
|
해석:
|
|
|
|
- 규모상 중대형 웹애플리케이션에 해당
|
|
- 도메인 분리가 비교적 명확함
|
|
- JSP Resolver는 남아 있으나 실제 화면은 사실상 Thymeleaf 중심
|
|
|
|
## 10. 운영 및 유지보수 유의사항
|
|
|
|
소스 분석 기준으로 아래 항목은 반드시 운영 검토가 필요하다.
|
|
|
|
1. Spring Security CSRF가 전역 비활성화되어 있다.
|
|
- 위치: `src/main/resources/egovframework/spring/com/context-security.xml`
|
|
- 현재 설정: `csrf="false"`
|
|
- 일부 화면은 수동 세션 토큰을 쓰고 일부는 쓰지 않아 일관성이 부족하다.
|
|
|
|
2. 비밀번호 해시 방식이 `plaintext` 로 설정되어 있다.
|
|
- 위치: `src/main/resources/egovframework/spring/com/context-security.xml`
|
|
- 현재 설정: `hash="plaintext"`
|
|
- 운영 환경 적용 여부를 재검토해야 한다.
|
|
|
|
3. 업로드 최대 용량 설정이 서로 다르다.
|
|
- Multipart Resolver: `50000000` 바이트
|
|
- 전역 프로퍼티: `1048576` 바이트
|
|
- 실제 정책과 코드 동작을 일치시킬 필요가 있다.
|
|
|
|
4. 자동화 테스트 자산이 사실상 없다.
|
|
- `src/test` 하위 Java 테스트 수: 0
|
|
- Maven Surefire도 `skipTests=true` 로 설정되어 있다.
|
|
|
|
5. 저장소 내 설정 파일에 민감한 운영 값이 포함되어 있다.
|
|
- 개발용 계정 보조값
|
|
- 암호화 관련 값
|
|
- 로컬 환경 연결 정보
|
|
- 외부 보안 설정으로 분리하는 것이 바람직하다.
|
|
|
|
6. 스케줄링 관련 구현은 있으나 실제 활성화 여부 확인이 필요하다.
|
|
- Quartz 의존성과 스케줄 서비스 클래스가 존재
|
|
- 일부 XML 트리거 설정은 주석 처리되어 있다.
|
|
|
|
7. 페이지 편집 기능은 배포된 파일 시스템에 직접 읽기/쓰기를 수행한다.
|
|
- 배포 계정 권한이 필요
|
|
- 운영 배포 파이프라인과 충돌 여부를 확인해야 한다.
|
|
|
|
## 11. 후속 문서화 권장 항목
|
|
|
|
본 문서를 기반으로 아래 문서를 추가 작성하면 운영 인수인계 품질이 높아진다.
|
|
|
|
- DB 테이블 명세서 및 ERD
|
|
- 화면 목록 및 메뉴 트리 문서
|
|
- 권한 매트릭스
|
|
- 외부 API 명세서
|
|
- 배치/스케줄 운영 정책서
|
|
- 배포 구조도 및 시크릿 관리 정책
|
|
- 테스트 시나리오 및 회귀 점검 목록
|
|
|
|
## 12. 결론
|
|
|
|
IOTDOOR는 `사이트 운영 CMS + 커뮤니티 기능 + 통계/로그 백오피스` 가 결합된 통합 포털 시스템이다.
|
|
도메인 분리와 계층 구조는 비교적 명확하며, 운영형 포털로 확장 가능한 구조를 가지고 있다.
|
|
다만 보안 설정, 민감정보 관리, 테스트 부재, 업로드 정책 불일치, 스케줄 활성화 여부 등은 운영 안정화를 위해 우선 점검이 필요한 항목이다.
|
|
|