1. 개요

전자정부프레임워크 Web Project 생성 시 예제 소스를 포함하여 생성하는 경우, default package 명으로 egovframework.example 라고 생성이 됩니다.

 

본 가이드에서는 샘플에 명명 된 패키지 명을 변경하는 방법에 대해 설명하고자 합니다.

 

2. 프로젝트 생성

우선 테스트를 위해 프로젝트를 하나 생성하도록 하겠습니다.

(본 가이드는 전자정부프레임워크 4.0 버전을 기반으로 설명하고 있습니다.)

 

이 창에서 Generate Example 체크박스를 클릭 후 Finish 버튼을 누릅니다.

 

위와 같이 프로젝트를 생성하는 경우, 아래 이미지와 같이 예제 소스가 포함 된 프로젝트가 생성됩니다.

 

왼쪽 붉은색 박스를 보시면 example 라는 이름으로 패키지 명이 설정되어 있는 것이 보입니다.

패키지 명을 일괄로 변경하기 위해서는 가독성이 좋게 변경하는 것이 좋습니다.

우측 상단의 점3개로 이루어진 버튼을 클릭하고 Pacage Presentation > Hierachical 버튼을 클릭하시면 패키지 tree가 다음과 같이 정렬 됩니다.

 

일반적인 폴더 형태의 tree 모양으로 변경 됩니다.

이렇게 정렬이 변경되었다면, 우선 변경하기 원하시는 패키지 명으로 변경을 진행 합니다.

 

패키지 명 변경은 윈도우 폴더 변경 하듯이 패키지 명 클릭 후 F2 키를 누르시거나 아래 이미지의 메뉴를 참고하셔서 변경 창으로 진입합니다.

 

패키지 명에서 마우스 우 클릭 후 rename 으로 진입합니다.

 

처음 변경 창이 열리면 원래 패키지 명으로 입력 필드가 채워져 있습니다.

해당 부분을 변경하길 원하는 이름으로 입력하시고 OK 버튼을 누릅니다.

 

Rename subpackages 체크를 꼭 해주시기 바랍니다.

 

 

 

잠시 기다리시면 패키지 명이 변경이 되면서 아래와 같이 몇몇 파일에 에러가 표시 됩니다.

 

 

모두 기존 패키지 명으로 등록 된 파일들로 해당 파일들의 기존 패키지 명을 변경 된 패키지 명으로 바꿔 주셔야 합니다.

 

어떤 파일들을 변경해야 하는지 확인을 위해 검색 기능을 사용하도록 합니다.

Ctrl + H 키를 누르시면 검색 창이 나타납니다.

검색창의 여러 탭 중에서 File Search 를 사용하여 기존 패키지 명을 검색 하도록 합니다.

 

File Search 검색 창

 

검색이 완료 되는 경우 하단 Search 탭에 검색 결과가 표시 됩니다.

 

 

이와 같이 탐색 된 부분을 모두 바꿔 주셔야 합니다.

저는 egovframework.dexter 로 바꾸었기 때문에 해당 파일들을 모두 바꾸도록 합니다.

(검색 결과 창에서 탐색 된 부분을 마우스로 왼쪽 더블클릭 하시면 해당 부분으로 자동으로 이동합니다.)

 

모든 파일에 대해 변경을 완료 하신 후, 다시 한 번 검색 창을 통해 기존 패키지 명이 남아 있는지 확인해 보도록 합니다.

 

변경이 완료 된 경우 검색 되는 것이 없어야 합니다.

 

이렇게 하면 패키지 명 변경이 완료 됩니다 만... 한 가지 주의 하실 점이 있습니다.

 

필자의 경우 기존 패키지 명의 앞 부분인 egovframework 라는 부분을 살려 둔 상태로 패키지 명을 변경하였기 때문에 검색 창에서 확인 된 부분만 변경하면 되지만, 패키지 명 전체를 변경하시는 경우 추가 작업 하실 부분이 있습니다.

 

예를 들어 패키지 명을 다시 변경해 보겠습니다.

(egovframework.dexter 에서 dexter.webkit 으로 변경하였습니다.)

 

 

패키지 명이 변경 되었기 때문에 위의 과정을 다시 한 번 진행 합니다.

위 과정이 완료 되었으면, 이제 2개의 파일을 열도록 합니다.

 

열어야 할 파일명은 다음과 같습니다.

 

src/main/resources/egovframework/spring/context-common.xml

src/main/webapp/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml

 

두 파일을 열어 보시면 상단 부분에 다음과 같이 되어 있습니다.

 

 

붉은 박스로 표시 된 부분을 바꾸어 주셔야 합니다.

최종 변경 된 패키지 명이 dexter.webkit 이므로 바꿀 값은 egovframework -> dexter 입니다.

(즉, dot 으로 구분 된 패키지 명에서 제일 앞선 패키지 명을 기입해 주시면 됩니다.)

 

 

마지막 2개 작업을 해 주지 않으실 경우, build 에서 문제가 발생하지는 않지만 막상 웹을 실행 시 Controller 를 찾을 수 없어 페이지가 표시되지 않는 문제가 발생하게 됩니다.

 

이는 전자정부프레임워크로 개발 시 어노테이션 (annotation) 으로 @Controller 를 사용하게 되는데 이 부분을 제대로 찾을 수 있게 설정해 주는 부분이 바로 저 2개 파일이기 때문입니다.

 

1. 개요

지난 11일 보고 된 Log4j 관련 보안 취약점(뉴스기사 : https://www.boannews.com/media/view.asp?idx=103257&direct=mobile) 관련하여 긴급히 패치가 필요해 졌기에 해당 조치 사항에 대하여 공유 합니다.

 

2. 전자정부프레임워크 대응

전자정부 홈페이지에 가보면 긴급 공지(https://www.egovframe.go.kr/home/ntt/nttRead.do?menuNo=74&bbsId=6&nttId=1838) 가 올라와 있긴 한데, 해당 내용은 KISA 에서 보고한 내용을 그대로 복&붙 한 거라 실제 프레임워크 설정 변경에 1도 도움이 안 됩니다.

 

3. 조치

이 글은 전자정부 3.8과 전자정부 3.10을 기준으로 작성되었습니다. (필자 PC에 설치 된 버전이 이것 두 개라..)

 

[workspace경로\프로젝트 폴더\src\main\resources] 폴더에 보시면 log4j2.xml 파일이 있습니다.

해당 파일을 열어보면 <Appenders> 하위에 <PatternLayout> 이라는 태그가 있을 건데 거기 있는 %m 을 %m{nolookups} 로 변경하도록 합니다.

 

이는 아파치 제단의 보안 취약점 조치 사항(https://logging.apache.org/log4j/2.x/security.html)에 나오는 내용입니다.

 

1. 개요

전자정부프레임워크를 사용하여 프로젝트를 개발하기 위해 최초 웹 프로젝트 생성 시 Dynamic Web Module Version 을 설정하는 부분이 있습니다.

제가 처음 JSP 를 접했을 때 default 값인 2.5 로 설정하면 된다고 했지 저게 뭔지 설명해 주는 분들이 없어 해당 값이 무엇인지 그리고 바꿨을 때 발생하는 오류에 대해 알아보도록 하겠습니다.

(본 포스트는 전자정부프레임워크 3.10 버전을 기반으로 하고 있습니다.)

2. 프로젝트 생성

이클립스 실행 후, File - New - eGovFrame Web Project 를 실행하면 다음과 같은 창이 나옵니다.

프로젝트 생성 창

 

project name 이나 다른 부분들은 본인의 프로젝트 명에 맞게 기입하시면 되시고, 중요한 부분이 바로 위 이미지에 보이는 Dynamic Web Module version 입니다.

 

해당 버전의 숫자가 의미하는 바는 다음과 같습니다.

 

출처 : http://tomcat.apache.org/whichversion.html

위 표에서 맨 앞에 보이는 Servlet Spec 이 프로젝트 생성 창의 번호와 매핑이 됩니다.

 

기본 2.5 버전을 사용하게 되면 JSP Spec 은 2.1 이고, 톰캣은 6.0.x 버전을 그리고 자바는 1. 5 버전 이상을 사용해야 함을 알 수 있습니다.

저는 3.1 버전으로 설정하였기 때문에 JSP Spec 은 2.3 이고 톰캣은 8.5.x 버전 자바는 1.7 버전 이상을 사용하도록 하였습니다.

 

프로젝트 기초 설정이 끝나고 Next 를 누르면 전자정부에서 제공하는 기본 예제 소스를 첨부하는 창이 나옵니다.

 

프로젝트 초기 생성 시에 Controller, Service, Database 등의 설정이 기본으로 잡히게 되기 때문에 Generate Example 에 체크를 하고 Finish 를 누르면 드디어 예제 샘플 프로젝트가 생성되게 됩니다.

 

다만, 해당 프로젝트를 빌드해서 실행해 보려고 하면 다음과 같은 에러 때문에 실행이 안됩니다.

 

우리가 최초 프로젝트 생성 시 3.1 버전으로 생성을 하였으나, 전자정부프레임워크의 버그인지 일부 파일 설정이 default 버전인 2.5로 설정이 되어 있습니다.

해당 부분을 수정하기 위해서는 다음의 파일을 열어 보도록 합니다.

 

 

src > main > webapp > WEB-INF 폴더에 보시면 web.xml 파일이 있습니다.

해당 파일을 열어서 내용을 보시면 2.5 버전으로 설정되어 있는 것이 보입니다.

붉은 박스로 표시 된 부분의 숫자를 3.1 로 바꾸도록 합니다.

 

저는 3.1 로 프로젝트를 생성 했기 때문에 3.1로 바꾸었지만 다른 버전으로 생성 하신 분들은 그에 맞게 숫자를 바꿔 주시면 됩니다.

 

변경이 완료 되었으면 Alt + F5 단축키를 눌러 Maven Update 를 실행하도록 합니다.

 

 

위와 같은 창이 나왔으면 OK 를 누르시면 됩니다.

 

 

프로젝트 갱신이 완료되면 위 이미지와 같이 x 표시 된 에러가 없어지는 것을 볼 수 있습니다.

 

 

3. 마치며

해당 오류는 예전에 전자정부 쪽에 보고가 된 것으로 알고 있었는데 아직까지 고쳐지지 않고 있군요.

다음 시간에는 예제로 생성한 샘플 프로젝트의 패키지 명을 실제 사용하고자 하는 프로젝트에 맞게 고치는 방법에 대해 알아보도록 하겠습니다.

1. 개요


jquery-ui API 중 달력 기능 사용에 있어 기본 영문 언어에서 한글로 변경하는 방법에 대해 포스팅 합니다.

 



2. API


상세한 API 사용은 원 출처 페이지를 참고하기 바랍니다.

https://jqueryui.com/datepicker/


3. 한글 설정


<script>
if(typeof $.datepicker.regional == 'object') {
	$.datepicker.regional['kr'] = {
	    closeText: '닫기', // 닫기 버튼 텍스트 변경
	    currentText: '오늘', // 오늘 텍스트 변경
	    changeYear: true,
	    changeMonth: false,
	    monthNames: ['1 월','2 월','3 월','4 월','5 월','6 월','7 월','8 월','9 월','10 월','11 월','12 월'], // 개월 텍스트 설정
	    monthNamesShort: ['1 월','2 월','3 월','4 월','5 월','6 월','7 월','8 월','9 월','10 월','11 월','12 월'], // 개월 텍스트 설정
	    dayNames: ['월요일','화요일','수요일','목요일','금요일','토요일','일요일'], // 요일 텍스트 설정
	    dayNamesShort: ['월','화','수','목','금','토','일'], // 요일 텍스트 축약 설정   
	    dayNamesMin: ['월','화','수','목','금','토','일'], // 요일 최소 축약 텍스트 설정
	    dateFormat: 'dd/mm/yy' // 날짜 포맷 설정
	};

	// Seeting up default language, Korean
	$.datepicker.setDefaults($.datepicker.regional['kr']);
}
</script>


datepicker 호출하기 직전에 위의 소스가 먼저 호출되면 됩니다.


<script>
$("#date_popup").datepicker({
			dateFormat:'yy-mm-dd',
			showOn: "button",
			buttonImage: 'btn_calendar.gif',
			buttonImageOnly: true,
			buttonText: "Select date"
		});
</script>

<input type="text" id="date_popup" name="select_date" style="color:#787878;" onkeypress="checkInputTime(event);" onfocus="blur();" />

 

 


 

4. 출처


https://jqueryui.com/

'웹 프로그래밍 > JavaScript' 카테고리의 다른 글

[jquery] Flight Indicator API  (0) 2020.06.18

1. 개요

 

jquery UI API 중에서 지도와 연계하여 사용하기 좋은 비행 계기판 관련 API를 소개하고자 한다.

 

(개발자 git 에서 발췌한 UI 이미지)

 

다섯 가지 외에 추가로 turn coordinator 라는 API 도 있는데 해당 API 의 경우 IE 에서는 사이즈 변경이 안되는 오류가 있어서 소개되어 있지 않으나 API 상에는 존재함

 

(존재하나 소개 되지 않은 API UI)

 

 

2. 사용방법

 


<head>
<script src="js/jquery.flightindicators.js"></script>
<link rel="stylesheet" type="text/css" href="css/flightindicators.css" />
</head>

<body>
<span id="attitude"></span>
<script>
     var indicator = $.flightIndicator('#attitude', 'attitude', {size:200, showBox : showBox});
     indicator.setRoll(15);
     indicator.setPitch(7.5);
</script>
</body>


3. 출처

 

https://github.com/sebmatton/jQuery-Flight-Indicators

 

 

 

 

 

 

'웹 프로그래밍 > JavaScript' 카테고리의 다른 글

[jquery] datepicker 한글 설정  (0) 2020.08.19

1. 개요

 

PHP 에서 Array 형 데이터를 JSON 포멧으로 출력하고자 하는 경우 json_encode 함수를 호출함으로써 간단하게 데이터 변환이 가능하다.

 

단, 해당 함수는 UTF-8 형태의 String 값만을 사용할 수 있기 때문에 iconv 를 사용하여 UTF-8 인코딩을 하여 사용해야만 한다.

 

그런데 여기서 문제가 발생하는데, 한글 데이터를 사용할 경우 json_encode 함수가 한글을 유니코드 형태로 자동으로 변환해서 출력하게끔 되어 있다.

 

 

2. 해결 방안

 

PHP 5.4 버전 이상을 사용할 경우, 다음과 같이 상수 변수 값을 옵션으로 줌으로써 간단하게 해결이 가능하다.

json_encode($arrJson, JSON_UNESCAPED_UNICODE);

그러나, 하위 버전 PHP를 사용하는 경우 json_encode 함수가 옵션 값을 받지 않기 때문에 해당 방법을 사용 할 수 없다.

 

따라서, 다음의 함수를 추가하여 해결하도록 한다.

function han ($s) { return reset(json_decode('{"s":"'.$s.'"}')); }
function to_han ($str) { return preg_replace('/(\\\u[a-f0-9]+)+/e','han("$0")',$str); }

to_han (json_encode($arrJson));

IE의 경우 버전별로 같은 CSS 값이라도 다르게 표현되기도 하는데 이를 위해 버전 별로 값을 설정 할 수 있는 방법이 존재한다.

 

1. CSS 파일 가져올 때

 

<link href="{CSS파일}" rel="stylesheet" type="text/css" />
<!-- [if IE 7]<link href="{CSS파일}" rel="stylesheet" type"text/css" /><![endif]-->

 

if lt IE 7      : 7 제외하고 낮은 버전에서

if gt IE 7     : 7 제외하고 높은 버전에서

if lte IE 7    : 7 포함하고 낮은 버전에서

if gte IE 7   : 7 포함하고 높은 버전에서

 

2. STYLE 안에서 지정 할 때
.body { property:value; *property:value; _property:value;}

* : IE 7 이하

_ : IE 6 이하

 

 

1. 개요

이클립스에서 JSP 개발을 완료 한 후 실제 톰캣 서비스에 배포하는 경우, class로 작성한 java 파일의 경로를 찾지 못하는 문제가 간혼 발생한다.

 

보통 웹 파일의 경우 [Tomcat 설치 경로]\webapps\ROOT\ 폴더가 웹 서비스의 최상위 루트 폴더가 되기 때문에 해당 경로 안에 웹 파일들을 집어 넣으면(ROOT\test.jsp -> http://localhost:8080/test.jsp) 익스플로러를 통해 접근이 가능하다.

 

하지만 대부분은 ROOT 폴더 하위에 서비스하고자 하는 폴더 명(ex: ROOT\project\ -> http://localhost:8080/project/home.jsp) 을 지정하여 해당 폴더 안에 웹 파일들을 배치하는 경우가 대부분 일 것이다.

 

이렇게 서비스 할 시, 흔히 Database 연동을 위해 따로 Class로 선언하여 JSP에서 호출하여 사용하는 경우가 많은데 실제 톰캣에 올려서 서비스 해 보면 DB 연동을 위한 Class 파일을 찾지 못하는 경우가 발생한다.

 

 

이를 해결 해 보도록 하자.

 

2. 원인

 

sun.boot.class.path :
<%=System.getProperty("sun.boot.class.path")%>

sun.boot.library.path :
<%=System.getProperty("sun.boot.library.path")%>

java.library.path :
<%=System.getProperty("java.library.path")%>

java.class.path :
<%=System.getProperty("java.class.path")%>

getClassLoader() :
<%=this.getClass().getClassLoader()%>

DocumentBuilderFactory :
<%=javax.xml.parsers.DocumentBuilderFactory.newInstance()%>

/javax/xml.parsers/DocumentBuilderFactory.class :
<%=this.getClass().getResource("/javax/xml.parsers/DocumentBuilderFactory.class")%>

SAXParserFactory :
<%=javax.xml.parsers.SAXParserFactory.newInstance()%>

/javax/xml/parsers/SAXParserFactory.class :
<%=this.getClass().getResource("/javax/xml/parsers/SAXParserFactory.class")%>

TransformerFactory :
<%=javax.xml.transform.TransformerFactory.newInstance()%>

/javax/xml/transform/TransformerFactory.class :
<%=this.getClass().getResource(	"/javax/xml/transform/TransformerFactory.class")%>

Servlet :
<%=application.getMajorVersion()%>.<%=application.getMinorVersion()%>

JSP :
<%=javax.servlet.jsp.JspFactory.getDefaultFactory().getEngineInfo().getSpecificationVersion()%>

ServerInfo :
<%=application.getServerInfo()%>

RealPath :
<%=application.getRealPath("/")%>

ContextPath :
<%=request.getContextPath()%>

totalMemory :
<%=Runtime.getRuntime().totalMemory()%>

maxMemory :
<%=Runtime.getRuntime().maxMemory()%>

freeMemory :
<%=Runtime.getRuntime().freeMemory()%>

 

 

 

위 소스코드를 복사하여 info.jsp 에 저장하고 서비스 하고자 하는 폴더 안(ROOT\project\info.jsp)에 넣은 뒤 익스플로러에서 호출(http://localhost:8080/project/info.jsp) 해 보도록 하자.

 

페이지가 열리면서 경로들이 나열되게 되는데 여기서 핵심은 RealPathContextPath 이다.

 

필자가 의도하기로는 root 하위에 project 폴더에서 웹 서비스가 실행되기를 기대하지만 실제 경로를 확인해 보면 root 폴더 상에서 서비스가 되도록 설정 되어 있다. 웹 파일들(image, jsp, html)은 root\project 폴더에 등록되어 있기 때문에 호출하면 표시는 되지만 실제 뒷단에서 동작하는 class 들을 ContextPath가 root 폴더로 설정되어 있기 때문에 jsp에서 class 파일들을 호출하지 못 한 것이다.

 

3. 해결

그렇다면 톰캣 서버가 내가 원하는 경로로 설정되도록 맞춰 주기만 하면 되지 않을까?

이를 위해서는 [Tomcat 설치 경로]\conf\server.xml 파일을 주목하자.

 

우리가 주목해야 할 부분은 <Host ...> 로 시작하는 테그의 안쪽이다.

<Host ...>

<Context docBase="실제 서비스 할 폴더의 절대경로(ex: C:/Tomcat/webapps/ROOT/project/)" path="웹에서 호출 할 경로(ex: /project)" reloadable="true" />

</Host>

 

위와 같이 Context 태그를 설정하여 주고 톰캣 서버를 재시작 한 뒤 아까의 info.jsp 를 호출하여 보자.

RealPath, ContextPath가 본인이 설정한 경로로 되어 있는가? 그렇다면 이제 익스플로러에서 웹을 호출해 보도록 하자.

 

정상적으로 서비스가 동작할 것이다(아마도?)

+ Recent posts