🏛️ 홍익인간CMS 개발자 매뉴얼

Version 202506 | Updated 2025-06-12
🌐 언어 선택: 🇰🇷 한국어 🇲🇳 Монгол 🇺🇸 English

4-1. 🏗️ 핵심 기능 기본구조

4.1 프로젝트 소스 구성

홍익인간CMS는 크게 두 개의 주요 모듈로 구성되어 있습니다.

🔧4.1.1 BO (humanframe.backoffice)

관리자 영역 및 기본 시스템 구동, 스케줄러 등 메타 데이터를 관리하는 프로젝트입니다. CMS의 기본 관리자 기능 및 시스템 운영에 필요한 요소가 있으며, 개발자가 직접 수정 가능합니다.

주요 패키지 구조

🎯aop.aspect

관리자 AOP 구현, 관리자 게시판 권한 검증, 관리자 로그 저장, 사용자 게시판 권한 검증 및 설정 조회

  • admin: 관리자 관련 AOP (AdminBbsAspect, AdminLogAspect, AdminPrivacyAspect 등)
  • web: 사용자 관련 AOP (UsrChkAuthBeforeAspect, UsrChkPermNttBeforeAspect 등)

🔧common

공통 기능 정의 - 공통코드맵, DB 코드 관리자 구분하여 시스템 운영 시 등록 변경이 필요하지 않은 코드 데이터를 모은 것으로 가급적 수정을 금하며, 수정 시 주의가 필요함

🎮controller

스프링 컨트롤러 클래스 모음, 시스템 운영 및 CMS기반 프로그램 컨트롤러

📁 패키지 📋 설명
ajaxAJAX 요청 처리 컨트롤러
banner배너 관리 컨트롤러
bbs게시판 관리 컨트롤러
cm공통 관리 컨트롤러
cntnts콘텐츠 관리 컨트롤러
comm공통 컨트롤러
dashboard대시보드 컨트롤러
fnct기능 관련 컨트롤러
front프론트엔드 관련 컨트롤러
index인덱스 페이지 컨트롤러
login로그인 관련 컨트롤러
mber회원 관리 컨트롤러
media미디어 관리 컨트롤러
metadata메타데이터 관리 컨트롤러
mng관리 기능 컨트롤러
oauthOAuth 인증 관련 컨트롤러
pblcate발행 관련 컨트롤러
popup팝업 관리 컨트롤러
privacy개인정보 관리 컨트롤러
site사이트 관리 컨트롤러
stats통계 관리 컨트롤러

🗄️dao

Data Access Object 모음, 각종 DAO

🛡️interceptor

관리자 Interceptor 구현, 관리자 로그인 체크, URI 파라미터 검증 등

scheduler

시스템 스케줄러 관리, 미니게시판 JSON데이터 생성, 메뉴통계 데이터 생성

⚙️service

스프링 서비스 및 구현 클래스

  • impl: 서비스 구현 클래스

👤session

관리자 및 사용자 Session 클래스

🏷️tld.button

JSP Tag Library 등 태그 클래스

🔧util

각종 유틸리티 클래스

👁️view

RssViewer 클래스

📦vo

Value Object 클래스

🌐4.1.2 WEB (humanframe.web)

CMS의 사용자 영역에 대한 자바 클래스 및 Frontend Presentation(화면자원, 사용자 컨텐츠 처리)를 위한 각종 리소스(jsp, xml, js, css 등)로 구성됩니다. 주로, CMS 기본 기능이 아닌 추가 기능에 대한 전체 프로그램 소스(Java class, jsp, xml 등)는 이 프로젝트에 포함됩니다.

주요 패키지 구조

🔧common

공통기능정의 - 공통코드맵, 공통상수 등

🎮controller

스프링 컨트롤러 클래스 모음, 추가 개발 프로그램 컨트롤러

  • admin: 관리자 기능 컨트롤러
  • front: 프론트엔드 컨트롤러

🗄️dao

Data Access Object 모음, 각종 DAO

🔍filter

XSSWebFilter, MberLoginFilter 등

🛡️interceptor

사용자 URIInterceptor 구현, 전달 URI 검증 및 URI에 따른 메뉴정보 연결

🔐security

암호화 관련 클래스

⚙️service

스프링 서비스 및 구현 클래스

  • impl: 서비스 구현 클래스

📦vo

Value Object 클래스

4.2 리소스 구성

4.2.1 Spring Context 설정 파일

홍익인간CMS는 다양한 Spring Context 설정 파일을 통해 시스템의 동작을 정의합니다.

🔧

context-backoffice.xml

관리자 사용자 세션 bean 정의

🔐

context-crypto.xml

암호화 bean 정의

🗄️

context-datasource.xml

데이터베이스 연결 설정

🗺️

context-mapper.xml

MyBatis 매퍼 설정

⚙️

context-properties.xml

시스템 속성 설정

context-scheduler.xml

스케줄러 bean 정의, 미니게시판, 메뉴통계

🔄

context-transaction.xml

트랜잭션 관리 설정

📋

human-resource.xml

리소스 관련 설정

4.2.2 웹앱 구조

웹 애플리케이션은 다음과 같은 주요 디렉토리로 구성되어 있습니다:

🔧common

공통 리소스

📊data

데이터 파일

🏛️humanframe

CMS 핵심 리소스

  • admin: 관리자 페이지 리소스
  • theme: 사용자 테마 리소스
  • global: 공통 리소스

📄json

JSON 데이터 파일

✏️webeditor

웹 에디터 리소스

webeditorplus

확장 웹 에디터 리소스

⚙️WEB-INF

웹 애플리케이션 설정 및 클래스 파일

  • jsp: JSP 파일
  • config: 설정 파일
  • tld: 태그 라이브러리 정의 파일

4.3 사용자 관리

4.3.1 인증 및 권한 관리

홍익인간CMS는 사용자 인증 및 권한 관리를 위해 Spring Security와 자체 개발된 권한 관리 시스템을 함께 사용합니다.

주요 기능

권한 관리 구조

👤
사용자/관리자
👥
권한 그룹
🎯
메뉴/기능

주요 클래스

권한 검증 AOP 코드 (실제 코드)
// [코드 위치] humanframe.backoffice.aop.aspect.admin.AdminBbsAspect
@Aspect
@Order(1)
@Component
public class AdminBbsAspect {

    // 관리자 권한 체크
    @Pointcut("execution(* humanframe.backoffice..AdminBbsType*Controller.form(..))"
            + "|| execution(* humanframe.backoffice..AdminBbsType*Controller.list(..))"
            + "|| execution(* humanframe.backoffice..AdminBbsType*Controller.view(..))"
            + "|| execution(* humanframe.backoffice..AdminBbsType*Controller.action(..))"
            + "|| execution(* humanframe.backoffice..AdminBbsType*Controller.answer(..))")
    private void checkAdminBbsAuth() {}

    @Before(value = "checkAdminBbsAuth()")
    private void beforeCheckAdminBbsAuth(
            JoinPoint joinPoint)throws Exception {
        // ... 중간 생략 (권한 검증 로직) ...
    }
}

4.3.2 세션 관리

홍익인간CMS는 사용자 및 관리자 세션을 별도로 관리하며, 세션 타임아웃, 동시 접속 제어 등의 기능을 제공합니다.

주요 기능

주요 클래스

세션 관리 코드 (실제 코드)
// [코드 위치] humanframe.backoffice.session.MngrSession
public class MngrSession implements Serializable {
    private static final long serialVersionUID = 1L;
    
    private String mngrId;
    private String mngrNm;
    private String authorTy;
    private String[] siteNos;
    private String[] siteMenus;//for cntnts
    private String[] fnctNos;//for fnct
    private String[] bbsNos;//for bbs
    
    // 세션 정보 설정 및 조회 메소드
    // ...
}

4.3.3 사용자 정보 관리

사용자 정보 관리는 회원 가입, 정보 수정, 탈퇴 등의 기능을 포함합니다.

주요 기능

주요 클래스

4.4 콘텐츠 관리

4.4.1 메뉴 관리

홍익인간CMS는 웹사이트의 메뉴 구조를 효율적으로 관리할 수 있는 기능을 제공합니다.

주요 기능

주요 클래스

메뉴 관리 화면

관리자 페이지의 "CMS관리 > 메뉴관리" 메뉴에서 메뉴 구조를 트리 형태로 관리할 수 있습니다.

4.4.2 사이트/메뉴 배포 시스템

홍익인간 CMS는 관리자 페이지에서의 사이트 및 메뉴 변경사항이 사용자 페이지에 즉시 반영되지 않고, '배포(Publication)' 과정을 통해 반영되는 구조를 가지고 있습니다. 이는 관리자가 변경사항을 검토하고 확인한 후에 실제 사용자 페이지에 적용할 수 있도록 하는 안전장치입니다.

테이블 관계

🔧
TN_SITE

TN_PBLCATE_SITE
📋
TN_SITE_MENU

TN_PBLCATE_SITE_MENU
  1. TN_SITE ↔ TN_PBLCATE_SITE
    • TN_SITE: 관리자가 편집하는 사이트 정보 테이블
    • TN_PBLCATE_SITE: 배포 후 사용자에게 실제로 보여지는 사이트 정보 테이블
  2. TN_SITE_MENU ↔ TN_PBLCATE_SITE_MENU
    • TN_SITE_MENU: 관리자가 편집하는 메뉴 정보 테이블
    • TN_PBLCATE_SITE_MENU: 배포 후 사용자에게 실제로 보여지는 메뉴 정보 테이블

배포 프로세스

✏️ 정보 수정

관리자가 TN_SITE 또는 TN_SITE_MENU 테이블의 정보를 수정합니다.

🚀 배포 실행

관리자가 '배포' 기능을 실행합니다.

📋 정보 복사

시스템은 수정된 정보를 TN_PBLCATE_SITE 또는 TN_PBLCATE_SITE_MENU 테이블에 복사합니다.

🌐 사용자 페이지 반영

사용자 페이지는 TN_PBLCATE_SITE와 TN_PBLCATE_SITE_MENU 테이블의 정보를 기반으로 사이트와 메뉴를 표시합니다.

배포 시스템의 장점

🛡️

안정성

관리자의 변경사항이 검증 없이 바로 사용자 페이지에 반영되지 않아 안정적인 서비스 제공이 가능합니다.

검증

관리자는 변경사항을 배포하기 전에 충분히 검토할 수 있습니다.

📦

일괄 적용

여러 변경사항을 한 번에 배포할 수 있어 사이트 구조 변경 시 일관성을 유지할 수 있습니다.

🔄

롤백 가능성

문제 발생 시 이전 상태로 되돌리기가 용이합니다.

4.4.3 게시판 관리

다양한 유형의 게시판을 생성하고 관리할 수 있는 기능을 제공합니다.

게시판 유형

📋 유형 📝 설명
Type 1일반형 게시판
Type 2답글형 게시판
Type 3이미지 게시판
Type 4동영상 게시판
Type 5Q&A 게시판
Type 6FAQ 게시판
Type 7일정형 게시판
Type 8링크형 게시판

주요 기능

주요 클래스

게시판 설정 코드 일부(실제 코드)
// [코드 위치] humanframe.backoffice.service.BbsSettingService
@SuppressWarnings("rawtypes")
public interface BbsSettingService {
    
    /**
     * 게시판 목록을 조회한다.
     * 
     * @param listVO 검색 조건
     * @return 게시판 목록
     */
    public HumanListVO boardListVo(HumanListVO listVO) throws Exception;
    
    /**
     * 게시판 정보를 조회한다.
     * 
     * @param bbsNo 게시판 번호
     * @return 게시판 정보
     */
    public BbsSettingVO retrieveBoardSetting(int bbsNo) throws Exception;
    
    // ... 기타 메소드
}

4.4.4 콘텐츠 관리

페이지를 구성할 콘텐츠를 관리할 수 있는 기능을 제공합니다.

주요 기능

주요 클래스

4.5 파일 및 미디어 관리

4.5.1 파일 업로드/다운로드

홍익인간CMS는 다양한 파일의 업로드 및 다운로드를 안전하게 처리하는 기능을 제공합니다.

주요 기능

파일 업로드 처리 흐름

📤
클라이언트 요청
🔄
MultipartResolver
파일 유효성 검증
💾
파일 저장
🗄️
메타데이터 DB 저장

주요 클래스

파일명 검증 코드 (실제 코드)
// FileUtil 클래스의 일부
/** 파일명 정상여부 검증 **/
public static boolean isValidFileName(String fileName) {
    // 알파벳, 숫자, 한글, 한자, 일본어, 괄호, 대괄호, 중괄호, 하이픈, 밑줄, 마침표, 공백을 허용하고
    // 윈도우에서 파일명에 사용할 수 없는 문자 (\ / : * ? " < > |)는 제외한 정규식
    final String FILE_NAME_PATTERN = "^[\w\-.()\[\]{} 가-힣一-鿿぀-ゟ゠-ヿ]+$";
    final Pattern pattern = Pattern.compile(FILE_NAME_PATTERN);
    if (fileName == null || fileName.trim().isEmpty()) {
        return false;
    }
    Matcher matcher = pattern.matcher(fileName);
    return matcher.matches();
}

4.5.2 이미지 처리

이미지 파일에 대한 특화된 처리 기능을 제공합니다.

주요 기능

주요 클래스

이미지 처리 코드 (실제 코드)

FileServiceImpl 클래스의 일부 (썸네일생성)

public void creatFileInfo(
        Map<String, MultipartFile> fileMap
        , int upperNo
        , String srvcId
        , Map<String,Object> reqMap) throws Exception {
    // ... (중간생략)
    for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
        try {
            if ((EgovStringUtil.equals("jpg", fileExtsn)
                    || EgovStringUtil.equals("gif", fileExtsn)
                    || EgovStringUtil.equals("png", fileExtsn)
                    || EgovStringUtil.equals("bmp", fileExtsn))) {
                Thumbnails.of(tempFile).size(StaticValues.SMALL_THUMB_SIZE_X, StaticValues.SMALL_THUMB_SIZE_Y)
                        .toFile(new File(WebUtil.filePathReplaceAll(filePath + "/"+ srvcId +"/" + toDay + "/" + StaticValues.SMALL_THUMB_PREFIX+"_"+ newFileName)));
                Thumbnails.of(tempFile).size(StaticValues.MEDIUM_THUMB_SIZE_X, StaticValues.MEDIUM_THUMB_SIZE_Y)
                        .toFile(new File(WebUtil.filePathReplaceAll(filePath + "/"+ srvcId +"/" + toDay + "/" + StaticValues.MEDIUM_THUMB_PREFIX+"_"+ newFileName)));
                Thumbnails.of(tempFile).size(StaticValues.LARGE_THUMB_SIZE_X, StaticValues.LARGE_THUMB_SIZE_Y)
                        .toFile(new File(WebUtil.filePathReplaceAll(filePath + "/"+ srvcId +"/" + toDay + "/" + StaticValues.LARGE_THUMB_PREFIX+"_"+ newFileName)));
            }
        }
        // ... (중간생략)
    }
    // ... (중간생략)
}

4.5.3 미디어 관리

이미지, 동영상 등 다양한 미디어 파일을 관리하는 기능을 제공합니다.

주요 기능

주요 클래스