# 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 + 커뮤니티 기능 + 통계/로그 백오피스` 가 결합된 통합 포털 시스템이다.  
도메인 분리와 계층 구조는 비교적 명확하며, 운영형 포털로 확장 가능한 구조를 가지고 있다.  
다만 보안 설정, 민감정보 관리, 테스트 부재, 업로드 정책 불일치, 스케줄 활성화 여부 등은 운영 안정화를 위해 우선 점검이 필요한 항목이다.

