이제 페이지 구성이 어떻게 되는지 실험을 해 보았다.


일단 레이아웃 폴더의 위치는 아래와 같다.



앞서 지정한 타일즈 폴더 안에 해당 파일들이 존재한다.


연습용으로 파일들의 입력해보았다.

각각 파일들을 살펴 보면 아래와 같다.


[위치 : 폴더\src\main\webapp\WEB-INF\jsp\tiles\layout.js]

 <%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>   

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<link type="text/css" rel="stylesheet" href="<c:url value='/css/test.css'/>"/>

</head>


<body>

<tiles:insertAttribute name="header" />


<tiles:insertAttribute name="content" />

<tiles:insertAttribute name="footer" />

</body>

</html>

 

 


html5 jsp를 적용하고(html5 템플릿을 기본으로 적용하는 것은 인터넷을 찾아보도록 한다.)


header에 css 파일을 가지고 오고(테스트를 위해 css를 적용하였다.)

body에 각각의 파일들을 어트리 뷰트로 추가했다.


test.css

@CHARSET "UTF-8";

div{height: 100px; border: 1px solid; clear: both;}

.content{height: 50px; background-color: green;} 


header.jsp

<div>

header

</div> 


content.jsp

<div class="content">

content

</div> 


footer.jsp

<div>

footer

</div> 


각각의 파일을 작성한 후 프로그램을 실행해 보았다.



위에서 보는 것과 같이 css까지도 잘 먹혀 동작하는 것을 볼 수 있다.


여러 파일에서 중복적으로 코드가 들어가지 않도록 구분을 하는 것과

다양한 테스트가 필요하겠지만 

일단 코드를 분리하고 레이아웃 구성대로 작업을 할 수 있을 것이라는 생각은 든다.


이것을 가지고 차차 egov의 페이지를 변경해도록 해야 겠다.



이제 타일즈를 사용할 수 있도록 View Resolver를 수정해보자.


현재 설정은 아래와 같이 되어 있다.



[경로: src/main/webapp/WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml]


<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"

    p:viewClass="org.springframework.web.servlet.view.JstlView"

    p:prefix="/WEB-INF/jsp/" p:suffix=".jsp"/>  


모든 URL 패턴은 위 설정에 따라 이동한다.

하지만 타일즈를 적용할라면 다른 View Resolver를 사용해야 한다.


위의 코드를 주석 처리한 후 아래와 같이 타일즈를 사용 할 수 있도록 변경하자.

tiles3를 사용한다고 표시 되어 있다.


그리고 설정은 아래 tiles.xml에 되어 있다고 입력 해주자.


<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"

    p:viewClass="org.springframework.web.servlet.view.tiles3.TilesView" />

<!--Don't add suffix or prefix like you do with .jsp files-->

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" >

   <property name="definitions">

       <value>/WEB-INF/tiles/tiles.xml</value>

   </property>

</bean> 



tiles.xml 파일은 아래와 같이 되어 있다.

[경로 : C:\egov\workspace\PP\src\main\webapp\WEB-INF\tiles\tiles.xml]

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"

"http://tiles.apache.org/dtds/tiles-config_2_1.dtd">


<tiles-definitions>

<definition name="mainTemplate" template="/WEB-INF/jsp/tiles/layout.jsp">

<put-attribute name="header" value="/WEB-INF/jsp/tiles/header.jsp" />

<put-attribute name="content" value="/WEB-INF/jsp/tiles/content.jsp" />

<put-attribute name="footer" value="/WEB-INF/jsp/tiles/footer.jsp" />

</definition>

<definition name="*/*" extends="mainTemplate">

<!-- <put-attribute name="content" value="/WEB-INF/jsp/{1}/{2}.jsp" /> -->

</definition>

<definition name="*/*/*" extends="mainTemplate">

<!-- <put-attribute name="content" value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" /> -->

</definition>

</tiles-definitions>


템플릿인 layout.jsp파일을 지정해준다.

그리고 layout파일안에 header, content, footer 파일을 주입시켜준다.


또한 URL 패턴이 /로 구분하여 2개, 3개일 경우(egov가 2개, 3개의 URL패턴을 가진다.) 패턴에 맞는/요청 URL에 맞는 jsp파일을 리턴하도록 할 수 있다.


또한 extends를 통해 레이아웃을 상속 받을 수 있다.

주석 처리된 것은 어떤 URL패턴이 요청하면 web/jsp에 구분자에 맞게 contents만 변경하여 페이지를 리턴한다.

이는 해더와 푸터에 중복되는 코드는 그대로 사용하고 컨텐츠만 변경하여 가지고 리턴할 수 있다.


여기서는 연습을 위해 주석처리를 해둬 어떤 요청이든 해당 템플릿에 있는 내용을 리턴하기로 해놓았다.


egov 프레임워크에 심플화면에 대한 간단한 분석을 하였다.


여기에 요즘 대세인 angualrjs, twitter bootstrap을 적용하고 싶어졌다.

반응형 웹 및 mv* framework를 이용한 코딩 생산성 제고!

이 목적으로 egov를 변경해보자.


지인 중 한명이 이런말을 하였다.

프론트 기술은 

SPA(Single Page Application)를 할거면 jquery랑  require랑 mv*프레임워크를 엮으라

SPA안할거면 jsp tiles에 대충 짬뽕하여 엮으라


egov 에서는 만들어놓은 페이지 jsp 기반이며 또한 현재는 SPA에 대한 개념도 별로 없으니 타일즈를 적용하기로 했다.


서론이 길었다. 


타일즈를 먼저 할려면 pom.xml 에 해당 라이브러리를 추가해보자.



1) 먼저 해당 버전을 입력하자.


경로 : [폴더\pom.xml]

<properties>

    <egovframework.rte.version>3.0.0</egovframework.rte.version>

    <spring.maven.artifact.version>3.2.9.RELEASE</spring.maven.artifact.version>

    <org.apache.tiles-version>3.0.3</org.apache.tiles-version>

  </properties> 


파일 위쪽에 버전을 적혀있는 프로퍼티 부분이 있다.

거기서 스프링 버전 egov 버전이 적혀있다.

참고로 타일즈 3버전 이상은 스프링 3.2 이상부터 지원한다고 한다.

스프링 3.2 이하일 경우 타일즈 2 버전으로 해야 한다.


여기서는 타일즈 3.0.3버전으로 적용 해보겠다.


이제 타일즈의 라이브러리를 적어본다.

tiles-core, tiles-servlet, tiles-extras 의 라이브러리를 추가한다.

여기서 exclusions는 해당 라이브러리를 현재 dependency에는 포함하지 않는다는 뜻이다.

이 문자를 안하면 egov프레임워크와 타일즈의 다른 slf4j 버전으로 충돌이 발생 한다.


${org.apache.tiles-version}는 위에 설정한 버전 정보이다.

<!-- jsp tiles -->

<dependency>

<groupId>org.apache.tiles</groupId>

<artifactId>tiles-core</artifactId>

<version>${org.apache.tiles-version}</version>

<!-- needed to exclude slf4j which causes incompatibilities -->

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-nop</artifactId>

</exclusion>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

</exclusion>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>jcl-over-slf4j</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.apache.tiles</groupId>

<artifactId>tiles-servlet</artifactId>

<version>${org.apache.tiles-version}</version>

<!-- needed to exclude slf4j which causes incompatibilities -->

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-nop</artifactId>

</exclusion>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

</exclusion>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>jcl-over-slf4j</artifactId>

</exclusion>

</exclusions>

</dependency>

<dependency>

<groupId>org.apache.tiles</groupId>

<artifactId>tiles-extras</artifactId>

<version>${org.apache.tiles-version}</version>

<!-- needed to exclude slf4j which causes incompatibilities -->

<exclusions>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-nop</artifactId>

</exclusion>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>slf4j-api</artifactId>

</exclusion>

<exclusion>

<groupId>org.slf4j</groupId>

<artifactId>jcl-over-slf4j</artifactId>

</exclusion>

</exclusions>

</dependency>




[그림 - 타일즈 라이브러리]


위와 같이 타일즈 라이브러리가 추가된것을 볼 있다.

앞서 /cop/bbs/selectBoardList.do로 데이터를 요청하는 것을 확인햇다.


마찬가지고 request mapping을 처리하는 자바 함수를 호출한다.

여기서는 파랑색으로 요점만 언급하도록 하겠다.




@Resource(name = "EgovBBSManageService")

private EgovBBSManageService bbsMngService;


@RequestMapping("/cop/bbs/selectBoardList.do")   

 public String selectBoardArticles(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model, HttpServletRequest request) throws Exception { p

    // 메인화면에서 넘어온 경우 메뉴 갱신을 위해 추가

request.getSession().setAttribute("menuNo","3000000");


    LoginVO user;

    if(EgovUserDetailsHelper.isAuthenticated()){

    user = (LoginVO)EgovUserDetailsHelper.getAuthenticatedUser();

    }else{

    user = new LoginVO();

    user.setUniqId("anonymous");

    }


boardVO.setBbsId(boardVO.getBbsId());

boardVO.setBbsNm(boardVO.getBbsNm());


BoardMasterVO vo = new BoardMasterVO();


vo.setBbsId(boardVO.getBbsId());

vo.setUniqId(user.getUniqId());


BoardMasterVO master = bbsAttrbService.selectBBSMasterInf(vo);


//-------------------------------

// 방명록이면 방명록 URL로 forward

//-------------------------------

if (master.getBbsTyCode().equals("BBST04")) {

   return "forward:/cop/bbs/selectGuestList.do";

}

////-----------------------------


boardVO.setPageUnit(propertyService.getInt("pageUnit"));

boardVO.setPageSize(propertyService.getInt("pageSize"));


PaginationInfo paginationInfo = new PaginationInfo();


paginationInfo.setCurrentPageNo(boardVO.getPageIndex());

paginationInfo.setRecordCountPerPage(boardVO.getPageUnit());

paginationInfo.setPageSize(boardVO.getPageSize());


boardVO.setFirstIndex(paginationInfo.getFirstRecordIndex());

boardVO.setLastIndex(paginationInfo.getLastRecordIndex());

boardVO.setRecordCountPerPage(paginationInfo.getRecordCountPerPage());


Map<String, Object> map = bbsMngService.selectBoardArticles(boardVO, vo.getBbsAttrbCode());

int totCnt = Integer.parseInt((String)map.get("resultCnt"));


paginationInfo.setTotalRecordCount(totCnt);


//-------------------------------

// 기본 BBS template 지정

//-------------------------------

if (master.getTmplatCours() == null || master.getTmplatCours().equals("")) {

   master.setTmplatCours("/css/egovframework/cop/bbs/egovBaseTemplate.css");

}

////-----------------------------


model.addAttribute("resultList", map.get("resultList"));

model.addAttribute("resultCnt", map.get("resultCnt"));

model.addAttribute("boardVO", boardVO);

model.addAttribute("brdMstrVO", master);

model.addAttribute("paginationInfo", paginationInfo);


return "cop/bbs/EgovNoticeList";

    }




Resource로 같은 이름의 bean을 인젝션을 받는다.

인젝션이란 Dependency Injection(DI)을 의미하는데 스프링의 주요 개념중 하나 이다. 


인젝션 받은 bbsMngService를 이용하여 bbsAttrbService.selectBBSMasterInf(vo) 를 이용하여 DB에서 데이터를 검색해서 master라는 개체에 데이터를 저장한다.


마찬가지로 Map<String, Object> map = bbsMngService.selectBoardArticles(boardVO, vo.getBbsAttrbCode()); 이부분도 DB를 콜하는 부분이다.


받은 데이터를 모델에 model.addAttribute("resultList", map.get("resultList")); 와 같이 추가 시켜줄수 있다.

 addAttribute는 어트리 뷰트에 해당이름으로 객체, 문자 등 object를 담을 수 있다.


모든 데이터를 담은 후 cop/bbs/EgovNoticeList 를 리턴한다.



cop/bbs/EgovNoticeList *.do 가 아니라 request mapping대상이 아니여서 view resolve를 통해 리턴하기로 되어 있다.


리턴시에 해당 리턴값앞에 prefix와 suffix를 붙혀 리턴하기로 되어 있다.


[그림 jsp  설정]


즉 위에 cop/bbs/EgovNoticeList는 


/WEB-INF/jsp/cop/bbs/EgovNoticeList.jsp 파일을 요청한다.



[그림 jsp 파일 폴더 구조]



이렇게 jsp파일이 요청 되고 해당 jsp를 통해 클라이언트로 페이지를 전달한다.


앞에 글에서는

menuNo = 3000000,

link = forward:/​cop/​bbs/​selectBoardList.do?bbsId=BBSMSTR_AAAAAAAAAAAA

위의 정보로 

/EgovPageLink.do의 URL를 요청까지 진행을 하였다.


EgovPageLink.do URL를 요청하면 spring에서 request mapping을 이용하여 요청  URL에 해당하는 요청을 처리한다.


서블릿 매핑에 의해 *.do 요청이 오면 spring에서 요청을 처리한다.


[그림 url 패턴 설정]



그럼 자바 파일의 Annotation으로 미리 설정한 URL 매핑을 받아줄 함수를 찾아 호출한다.

@RequestMapping에 value안의 값으로 요청 URL이 오면 함수를 호출한다.

함수는 movotoPage이며 파라미터로는 앞에 설정한 link(변수 linkPage), menuNo(변수 menuNo)로 값이 들어오게 된다.


[그림 JAVA Request Mapping된 파일]



위에 moveToPage함수를 실행하고 link의 값을 리턴한다. 아무런 문제가 없다면 들어온 link의 값을 그대로 반환한다.


[그림 - link의 디버깅모드로 inspect한 변수의 값]


위 그림에서는 link의 값이 forward:/cop/bbs/selectBoardList.do?bbsId=BBSMSTR_AAAAAAAAAAAA 인것을 확인 할 수 있다.


*.do인 것을 보니 다시 request mapping 된 자바 파일을 찾을 것이라고 예측 해볼 수 있다.


포탈 사이트에 페이지가 어떻게 구성되어 있는지 확인 해보기로 했다.


포탈 사이트의 메인 화면이다.

알림마당의 공지사항에 화면이 어떻게 구성되는지. 어떠한 순서로 불리게 되는지 알아보자.



[그림 - 포탈 메인화면]


사이트 소개, 민원광장 등 각 메뉴에 마우스를 위치시키면 같은 URL에 요청하는것을 볼수 있다.


개발자 도구를 이용하여 링크가 어떻게 걸려있는지 확인 해 보았다.


[그림 - 메뉴 A 링크 개발자 도구]


각각의 메뉴는 클릭시 goMenuPage라는 자바스크립트로 연결된다. 숫자는 메뉴의 번호를 의미한다.(DB 테이블 참고)



goMenuPage 자바스크립트의 소스는 아래와 같다.


function goMenuPage(menuNo){

        document.getElementById("menuNo").value=menuNo;

        document.getElementById("link").value="forward:"+getLastLink(menuNo);

        document.menuListForm.action = "/EgovPageLink.do";

        document.menuListForm.submit();

  } 



function getLastLink(menuNo){

        var tNode = new Array;

        for (var i = 0; i < document.menuListForm.tmp_menuNm.length; i++) {

            tNode[i] = document.menuListForm.tmp_menuNm[i].value;

            var nValue = tNode[i].split("|");

            //선택된 메뉴(menuNo)의 하위 메뉴중 첫번재 메뉴의 링크정보를 리턴한다.

            if (nValue[1]==menuNo) {

                if(nValue[5]!="dir" && nValue[5]!="" && nValue[5]!="/"){

                    //링크정보가 있으면 링크정보를 리턴한다.

                    return nValue[5];

                }else{

                    //링크정보가 없으면 하위 메뉴중 첫번째 메뉴의 링크정보를 리턴한다.

                    return getLastLink(nValue[0]);

                }

            }

        }

    }




코드 설명 

 : menuNo는 전달받은 숫자('100000') 의미

 : forward라는 문자열 뒤에 getLastLink에 menuNo를 만들어 이동할 URL를 만들어온다.


참고로 Hidden으로 아래와 같이 메뉴리스트가 숫겨져 있다.



[

<input type=​"hidden" name=​"tmp_menuNm" value=​"1010000|1000000|사이트 소개|/​|/​|/​EgovPageLink.do?link=main/​sample_menu/​EgovAboutSite|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"3010000|3000000|공지사항|/​|/​|/​cop/​bbs/​selectBoardList.do?bbsId=BBSMSTR_AAAAAAAAAAAA|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"1000000|0|사이트소개|/​|/​||">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"0|0|root|/​|/​||">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"2010000|2000000|민원신청|/​|/​|/​EgovPageLink.do?link=main/​sample_menu/​EgovServiceManage|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"4010000|4000000|FAQ|/​|/​|/​uss/​olh/​faq/​FaqListInqire.do|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"1020000|1000000|연혁|/​|/​|/​EgovPageLink.do?link=main/​sample_menu/​EgovAboutSite|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"3040000|3000000|자유게시판|/​|/​|/​cop/​bbs/​selectBoardList.do?bbsId=BBSMSTR_BBBBBBBBBBBB|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"2020000|2000000|민원결과확인|/​|/​|/​EgovPageLink.do?link=main/​sample_menu/​EgovServiceResult|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"2000000|0|민원광장|/​|/​||">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"4020000|4000000|QnA|/​|/​|/​uss/​olh/​qna/​QnaListInqire.do|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"3000000|0|알림마당|/​|/​||">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"4030000|4000000|설문조사|/​|/​|/​uss/​olp/​qnn/​EgovQustnrRespondInfoManageList.do|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"1030000|1000000|조직소개|/​|/​|/​EgovPageLink.do?link=main/​sample_menu/​EgovAboutSite|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"1040000|1000000|찾아오시는 길|/​|/​|/​EgovPageLink.do?link=main/​sample_menu/​EgovAboutSite|">​

<input type=​"hidden" name=​"tmp_menuNm" value=​"4000000|0|정보마당|/​|/​||">​

] 



이후 숨겨져있는 input tag menuNo와, link에 값을 변경 설정하고 form.action에 요청할 URL까지 설정하고 submit을 통해 해당 URL를 요청한다.


예를 들어 알림마당을 클릭하면

알림마당의 menuNo : 3000000으로 goMenuPage('goMenuPage') 자바스크립트가 호출되고

3000000 의 첫번째 하위 링크인 3010000(공지사항)의 값이 설정된다.


menuNo = 3000000,

link = forward:/​cop/​bbs/​selectBoardList.do?bbsId=BBSMSTR_AAAAAAAAAAAA

위의 정보로 


/EgovPageLink.do의 URL를 요청한다.

전자정부 프레임워크에서 제공한 template project sample이다.


File -> New -> eGovFrame Template Project를 선택한다.




new를 선택하면 아래와 같이 4가지의 템플릿을 제공한다.

먼저 Simple Homepage를 통해 전자정부 프레임워크가 잘 설치되었는지를 확인해보자.

Next버튼을 클릭한다.




 Project name, Group Id, Artifact ID 등을 입력 후 Finish버튼을 눌러 프로젝트를 생성한다.




그리고 실행하면 아래와 같이 화면이 나타나게 된다.



이제 DB 현재 메모리형 DB인 Hsql대신 Mysql로 변경하기로 하자.

Mysql로 정보를 바꿀라면 egovframework.egovProps 패키지에 있는 globals.properties 파일의 내용을 변경해야 한다.


DB서버 타입을 변경 시키고 

Mysql의 접속 정보로 변경한다.

주의 해야할 점은 Globals.DriverClassName가 net.sf.log4jdbc.DriverSpy로 되어 있다. 

그래서 그냥 실행하게 되면 아래와 같이 오류가 나타난다.



log4jdbc4-1.2 라이브러리를 추가하거나 혹은 자주 사용하고 있는 com.mysql.jdbc.Driver로 변경한다.

하고 실행하면 아무데이터도 없는 화면이 나오게 된다. DB에 정보가 없어서 그렇다.



이제 Mysql에 스키마를 만들고 테이블 내용을 채운다.


DATABASE폴더에 각 DB에 맞는 DDL과 DATA가 있다. DDL를 통해 테이블을 생성하고 Data를 채운다. 




그리고 실행하면 아래와 같이 Mysql로 변경한 화면이 짠하고 나오게 된다.






Spring Framwork 3.2.9

Eclipse 4.3.2

공통 230종

버전(http://www.egovframe.go.kr/EgovOSS.jsp?menu=1&submenu=2&leftsub=3)

공통컴포넌트(http://www.egovframe.go.kr/EgovCommon.jsp?menu=1&submenu=3&leftsub=5)


+ 프레임워크 구성

  • 공통 컴포넌트

 : 보완, 사용자 디렉토리/통합 인증, 시스템 관리, 통계/리포팅, 협업, 시스템/서비스 연계, 사용자 지원, 요소기술

  • 모바일 디바이스
  • 표준프레임워크

개발환경 : 구현도구, 배포도구, 테스트도구, 형상관리, 모바일디바이스

실행환경 : 화면처리, 업무처리, 데이터처리, 연계통합, 공통기반, 모바일 화면 처리, 배치 처리, 모바일 디바이스 실행

관리환경 : 서비스 요청관리, 변경관리, 현황관리, 표준관리

운영환경 : 모니터링도구, 운영관리도구, 배치운영도구

공통 : egovframwork 포탈



실행환경 : 화면, 서버프로그램, 데이터개발, 배치처리 기능 

 : 공통기반, 화면 처리, 업무처리, 데이터 처리, 연계통합, 모바일 화면 처리, 배치처리, 모바일 디바이스 API(폰갭 2.9)


개발환경 : 데이터개발도구, 테스트 자동화도구, 코드검사도구, 템플릿 프로젝트 생성도구, 공통컴포넌트 조립도구, 맞춤형 개발환경 구성도구, 서버환경 관리도구, 모바일용 표준 소스코드 생성도구, 모바일용 템플릿 프로젝트 생성도구, 모바일용 공통 컴포넌트 조립도구, 모바일용 맞춤형 개발환경 구성도구, 서버용 개발환경 설치, 배치 템플릿프로젝트 생성도구, 배치작업파일 생성도구, 배치 실행파일 생성 도구 등

 : 구현도구, 테스트도구, 배포도구, 형상관리도구


운영환경 : 모니터링, 배포, 관리 시스템, 배치 실행, 스케줄링, 결과 모니터링

 : 모니터링도구, 운영관리 도구


관리환경 : 개발 프로젝트에 배포 및 관리 모듈

: 서비스요청관리, 변경관리, 현황관리, 표준관리


공통 컴포넌트 : 응용 S/W개발시 공통적으로 활용 가능한 어플리케이션의 집합

모바일 디바이스 API : 모바일 디바이스 자원에 직접 접근과 활용이 가능한 API


+ Recent posts