6. 🔧 확장 및 커스터마이징
6.1 개발 프로세스
홍익인간CMS를 기반으로 한 개발 프로세스는 다음과 같은 단계로 구성됩니다.
6.1.1 개발 단계
홍익인간CMS를 활용한 개발은 다음과 같은 프로세스를 따릅니다:
📋 요구사항 분석
- 기능 요구사항 정의
- 비기능 요구사항 정의
- 시스템 범위 설정
🏗️ 설계 및 아키텍처
- 데이터베이스 설계
- 화면 설계
- 인터페이스 설계
- 아키텍처 설계
💻 구현 및 코딩
- 기능 구현
- 단위 테스트
- 코드 리뷰
🧪 테스트 및 디버깅
- 통합 테스트
- 시스템 테스트
- 성능 테스트
- 버그 수정
6.1.2 전자정부 표준프레임워크 호환성 유지 개발
홍익인간CMS는 전자정부 표준프레임워크를 기반으로 하므로, 개발 시 다음과 같은 사항을 준수해야 합니다:
표준 아키텍처 준수
- MVC 패턴 준수
- 계층 간 명확한 분리
- 인터페이스 기반 설계
표준 개발 환경 활용
- 전자정부 표준프레임워크 개발환경 활용
- 표준 라이브러리 활용
표준 코딩 규칙 준수
- 네이밍 규칙 준수
- 주석 규칙 준수
- 코드 포맷팅 규칙 준수
6.1.3 개발 환경 구성
홍익인간CMS 개발 환경은 다음과 같이 구성됩니다:
웹 프로젝트 구조
- 웹 프로젝트는 [WEB] 프로젝트에 개발
- 백엔드 관리는 [BO] 프로젝트에 구현하는 이중 구조
형상관리
- SVN, GIT 등의 형상관리 도구 활용
- 버전 관리 및 변경 이력 관리
빌드 및 배포
- Maven을 활용한 빌드
- Jenkins 등을 활용한 CI/CD 구성 가능
6.2 프로젝트 구성
홍익인간CMS는 다음과 같은 프로젝트 구조로 구성되어 있습니다.
6.2.1 프로젝트 구조
프로젝트 구조
humanframe (루트 프로젝트)
├── humanframe.core (라이브러리)
├── humanframe.backoffice (관리자 모듈)
└── humanframe.web (사용자 웹 모듈)
모듈 구성
- humanframe.backoffice, humanframe.web: 부모 프로젝트인 humanframe의 하위 모듈
- 각각 독립적인 웹 애플리케이션으로 배포 불가
- 최종적으로 humanframe.web가 배포되는 형태
형상(버전)관리
- SVN, GIT 등 여러 버전 프로젝트를 연동하는 것이 좋음
- 브랜치 전략을 통한 효율적인 개발 관리
MAVEN 설정
- maven dependency 추가 또는 수정이 필요한 경우 부모 프로젝트의 pom.xml 파일을 수정
- 각 모듈별 pom.xml에는 해당 모듈에 특화된 의존성만 추가
6.2.2 설정파일 위치 구성
홍익인간CMS의 주요 설정 파일은 다음 위치에 있습니다:
설정파일 위치 경로
/humanframe.backoffice/src/main/resources/humanframe/spring/humanframe.web/src/main/resources/humanframe/spring
주요 설정 파일
| 설정 파일 | 설명 |
|---|---|
context-datasource.xml |
데이터베이스 연결 설정 |
context-mapper.xml |
MyBatis 매퍼 설정 |
context-properties.xml |
시스템 속성 설정 |
context-scheduler.xml |
스케줄러 설정 |
human-resource.xml |
리소스 관련 설정 |
6.3 커스터마이징 방법
홍익인간CMS는 다양한 방법으로 커스터마이징이 가능합니다.
6.3.1 기본 설정 커스터마이징
프로퍼티 설정
context-properties.xml파일에서 시스템 속성 변경- 환경별(local, dev, prd) 설정 분리
데이터베이스 설정
context-datasource.xml파일에서 데이터베이스 연결 정보 변경- 다양한 DBMS 지원 (CUBRID, Oracle, MySQL, MS-SQL, Tibero)
스케줄러 설정
context-scheduler.xml파일에서 스케줄러 작업 설정- Cron 표현식을 통한 실행 주기 설정
6.3.2 UI 커스터마이징
테마 설정
/humanframe.web/src/main/webapp/humanframe/theme디렉토리에서 테마 설정- CSS, JavaScript, 이미지 등 리소스 변경
레이아웃 설정
- Tiles 설정 파일에서 레이아웃 변경
humanframe.web/src/main/webapp/WEB-INF/jsp/themeJSP 템플릿 수정
컴포넌트 커스터마이징
- 사용자 정의 태그 라이브러리 활용
- JavaScript 컴포넌트 수정
6.3.3 기능 확장
🎮 컨트롤러 추가
- 새로운 컨트롤러 클래스 작성
- 기존 컨트롤러 확장
⚙️ 서비스 추가
- 새로운 서비스 인터페이스 및 구현체 작성
- 기존 서비스 확장
🗄️ DAO 추가
- 새로운 DAO 클래스 작성
- 기존 DAO 확장
🗺️ 매퍼 추가
- 새로운 MyBatis 매퍼 XML 파일 작성
- 기존 매퍼 확장
6.4 샘플 프로그램 개발
홍익인간CMS는 개발자가 참고할 수 있는 샘플 프로그램을 제공합니다.
6.4.1 샘플 프로그램 구성
샘플 프로그램 위치
- 샘플 프로그램은 관리자/사용자로 구분되어 각각 제공됨
- 샘플 프로그램이 구현되는 자바 프로젝트는 [WEB-humanframe.web] 프로젝트임
- 관리자용 소스는 "admin" 폴더에 위치
- JSP파일은 관리자 사용자 각각 "fnct/sample" 폴더에 위치
샘플 프로그램 소스 위치
| 구분 | 경로 |
|---|---|
| JAVA소스 | /humanframe.web/src/main/java/humanframe/web/ |
| Mapper경로 | /humanframe.web/src/main/resources/humanframe/sqlmap/mappers |
| JSP경로 | /humanframe.web/src/main/webapp/WEB-INF/jsp |
6.4.2 샘플 프로그램 개발 방법
🎮 컨트롤러 작성
SampleController클래스를 참고하여 새로운 컨트롤러 작성@Controller어노테이션 및@RequestMapping설정
⚙️ 서비스 작성
SampleService인터페이스 및SampleServiceImpl클래스를 참고하여 새로운 서비스 작성@Service어노테이션 설정
🗄️ DAO 작성
SampleDAO클래스를 참고하여 새로운 DAO 작성@Repository어노테이션 설정
📦 VO 작성
SampleVO클래스를 참고하여 새로운 VO 작성- Getter/Setter 메소드 구현
🗺️ 매퍼 작성
human-fnct-sample.xml파일을 참고하여 새로운 매퍼 작성- SQL 쿼리 작성
🖼️ JSP 작성
- 샘플 JSP 파일을 참고하여 새로운 JSP 작성
- JSTL, EL, 사용자 정의 태그 활용
6.4.3 샘플 프로그램 예시
컨트롤러 예시 (SampleController)
[실제 코드] humanframe.web.controller.front.SampleController
@Controller
@RequestMapping("/fnct/sample")
public class SampleController extends HumanAbstractController {
@Resource(name="sampleService")
private SampleService sampleService;
@Resource(name="fileService")
private FileService fileService;
@RequestMapping(value={"index","list"})
public String list(
HttpSession session
, HttpServletRequest request
, Model model) throws Exception {
SiteVO curSiteVO = (SiteVO)request.getAttribute("curSiteVO");
HumanListVO listVO = new HumanListVO(request);
listVO = sampleService.sampleListVO(listVO);
model.addAttribute("useAtCode", CodeMap.USE_AT);
model.addAttribute("listVO", listVO);
return "/front/"+ curSiteVO.getSiteSkn() + "/fnct/sample/list";
}
@RequestMapping(value={"form"})
public String form(
SampleVO sampleVO
, @RequestParam Map<String,Object> reqMap
, HttpServletRequest request
, Model model) throws Exception{
//log.debug("sampleVO: " + sampleVO.toString());
SiteVO curSiteVO = (SiteVO)request.getAttribute("curSiteVO");
SiteMenuVO curMenuVO = (SiteMenuVO)request.getAttribute("curMenuVO");
String currUri = curMenuVO.getMenuUri();
int sampleNo = EgovStringUtil.string2integer((String) reqMap.get("sampleNo"));
sampleVO.setSiteNo(curSiteVO.getSiteNo());
sampleVO.setMenuNo(curMenuVO.getMenuNo());
if(sampleNo == 0){
sampleVO.setCrud(CRUDValues.CREATE);
}else{
sampleVO = sampleService.retrieveSample(sampleNo);
sampleVO.setCrud(CRUDValues.UPDATE);
}
//return value
model.addAttribute("useAtCode", CodeMap.USE_AT);
model.addAttribute("sampleVO", sampleVO);
model.addAttribute("param", reqMap);
model.addAttribute("currUri", currUri);
return "/front/"+ curSiteVO.getSiteSkn() + "/fnct/sample/form";
}
// 기타 메소드...
}
6.5 메뉴 및 프로그램 등록
홍익인간CMS에서 새로운 메뉴와 프로그램을 등록하는 방법은 다음과 같습니다.
6.5.1 관리자 메뉴 추가
📋 관리자 CMS관리 - 메뉴관리
- 관리자 페이지에서 "CMS관리 > 메뉴관리" 메뉴 접근
- "메뉴추가" 버튼을 클릭하여 새로운 메뉴 추가
- 메뉴 정보(상위메뉴, 메뉴명, 프로그램관리 URL, 순서 등) 입력
- 입력 정보 저장
🔐 메뉴 권한 설정
- 메뉴 추가 후 "CMS관리 > 권한그룹관리" 메뉴 접근
- 권한 그룹 선택 및 추가한 메뉴에 권한 부여
- 권한 설정 저장
✅ 관리자 페이지 노출 확인
- 메뉴 추가 후 로그아웃 및 재로그인 필요
- 관리자 페이지에서 노출 여부 확인
- 권한 설정에 따라 접근 가능 여부 확인
6.5.2 사용자 메뉴 추가
📋 관리자 프로그램 - 프로그램관리
- 관리자 페이지에서 "프로그램 > 프로그램관리" 메뉴 접근
- 새로운 프로그램 정보(서비스URL 등) 등록
🌐 사이트-메뉴관리
- 관리자 페이지에서 "사이트 > 사이트관리" 메뉴 접근
- "메뉴설정" 버튼을 클릭하여 사이트 메뉴 설정 페이지 접근
- "메뉴추가" 버튼을 클릭하여 새로운 메뉴 추가
- 메뉴 정보 입력 시 유형-기능프로그램 선택
- "기능프로그램검색" 버튼을 클릭하여 프로그램 관리에서 등록한 프로그램 선택(체크시 자동 추가)
- 입력 정보 저장
🚀 메뉴 배포
- 메뉴 추가 후 "배포 > 배포 관리" 메뉴 접근
- 목록에서 신규 생성한 메뉴 선택 및 "처리" 버튼을 클릭하여 배포 처리
✅ 사용자 페이지 노출 확인
- 배포 처리 후 사용자 페이지에서 노출 여부 확인
- 메뉴 노출 설정에 따라 노출 여부 확인
6.6 확장 모듈 개발
홍익인간CMS는 다양한 확장 모듈을 개발하여 기능을 확장할 수 있습니다.
6.6.1 게시판 확장
게시판 유형 추가
- 기존 게시판 유형(Type 1~8)을 참고하여 새로운 유형 추가
- 컨트롤러, 서비스, DAO, VO, 매퍼, JSP 등 작성
게시판 스킨 추가
- 기존 게시판 스킨을 참고하여 새로운 스킨 추가
- CSS, JavaScript, JSP 등 작성
6.6.2 추가 프로그램 개발
추가 프로그램 컴포넌트 작성
- 추가 프로그램 컨트롤러, 서비스, DAO 등 작성
- 추가 프로그램 JSP 템플릿 작성
추가 프로그램 등록
- 관리자 페이지에서 추가 프로그램 등록