전자정부프레임워크 설치환경설정 셋팅


1. Java 설치

  프레임워크를 설치하기에 앞서 자바를 설치해야 합니다.

  전자정부프레임워크는 JAVA 1.6 x86 기반이므로 32비트 버전을 다운로드 받습니다.

  이클립스를 전자전부프레임워크에서 제공하는 것을 쓰지 않고 64비트를 쓰실 분 들은 패스~~!


  http://www.oracle.com/technetwork/java/javase/downloads/


  설치 후 아래처럼 환경설정 셋팅!! 시스템 - 환경 변수 로 이동하여 작성.

  1) 새로 만들기

     변수 : JAVA_HOME

       값  : C:\Program Files (x86)\Java\jdk1.6.0_41   

              (자바 설치 경로입니다.)

  2)새로 만들기  

     변수 : CLASSPATH

       값  : .;%JAVA_HOME%\lib\tools.jar

  3)기존 변수 수정(맨 뒤에 세미콜론(;)추가 후 작성)

     변수 : PATH

       값  : %JAVA_HOME%\bin

  4)콘솔창을 연 후 아래처럼 나오면 정상! (환경설정 이전에 연 콘솔창은 닫고 새로 열어 주세요)






2. 전자정부프레임워크 이클립스 다운로드

   1) http://www.egovframe.org/EgovDevEnvRelease.jsp?menu=3&submenu=2

       개발자용 개발환경 Full Version 2.5.1을 다운로드 합니다.

       다운로드중에 끊기는 경우가 많아 다운로드가 안될경우 Q&A 게시판에 파일을 메일로 보내달라고 하면 보내 줍니다.^^


    2) 7-zip으로 압축 해제. 압축파일은 7-zip으로 압축 풀어야합니다. 폴더명이 긴것들이 있는데 알집으로는 에러가 납니다.


    3) eclipse.ini 설정 : 자바경로에 따라 맞추어 추가해 줍니다.

  


2. Maven 설치

 메이븐 다운로드 : http://maven.apache.org/download.cgi

 다운로드 받은 파일을 압축 해제
 

  아래처럼 환경설정 셋팅!! 시스템 - 환경 변수 로 이동하여 작성.

  1) 새로 만들기

     변수 : MAVEN_HOME

       값  : D:\apache-maven-3.0.5

              (압축 해제한 폴더입니다.)

  2)기존 변수 수정(맨 뒤에 세미콜론(;)추가 후 작성)

     변수 : PATH

       값  : %MAVEN_HOME%\bin

 

  3)

3. 이클립스에서 maven 설정

   http://www.egovframe.org/wiki/doku.php?id=egovframework:dev2:gettingstarted 에서 참고 하여 mavenrepository.zip, setting.zip을 다운 받아 설정한다.


  1) 다운받은 파일을 압축해제한 후 특정디렉토리에 이동시킨다. ex)d:\surosuro\mavenrepository

  2) setting.xml에서 1)번의 압축해제디렉토리로 수정한다.


<settings xmlns="http://maven.apache.org/settings/1.0.0" 
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
        ...
    <localRepository> [MavenRepository 설치디렉토리]/repository </localRepository>
        ...
</settings>

   3) 이클립스를 실행하여 window-Preferences- Maven - User Settings 에서 User Settings 항목에서 setting.xml을 지정하고  Update Settings 버튼을 클릭하여 저장한다.




기본적인 환경설정은 끝이 났습니다.

본인은 꼭 필요한 부분만 설정하였으므로 전자정부프레임워크에 넥서스라던지 사용하지는 것들은 설명서를 참고하시어 설정하시면 되겠습니다.


앞으로는 각 컴포넌트를 추가하여 실제 프레임워크를 사용해보도록 하겠습니다.

















   




저작자 표시
신고

출처 : http://pmguda.com/579


여러 메소드를 사용해 봤지만 아래 메소드는 잘되네요.

단 UTF-8환경에서만 테스트 해봤습니다.


인코딩 환경에 따라 다르다고 하는데 일단 되니깐 패스..

public String subStringBytes(String str, int byteLength) {   
 // String 을 byte 길이 만큼 자르기.    
	    
	int retLength = 0;    
	int tempSize = 0;    
	int asc;    
	if(str == null || "".equals(str) || "null".equals(str)){
		str = "";
	}

	int length = str.length();
	
	for (int i = 1; i <= length; i++) {        
		asc = (int) str.charAt(i - 1);        
		if (asc > 127) {            
			if (byteLength >= tempSize + 2) {                
				tempSize += 2;                
				retLength++;            
			} else {                
				return str.substring(0, retLength) + "...";            
			}       
		} else {           
			if (byteLength > tempSize) {
				tempSize++;
				retLength++;            
			}        
		}    
	}   
	
	return str.substring(0, retLength);
}


저작자 표시
신고

리눅스 기반에서 톰켓을 셋팅하고 스프링 프레임웍을 이용하여 개발환경을 테스트하던중

PermGen space라는 메세지를 뿜으며 한번씩 톰켓이 죽었다.


메모리 문제..


JAVA_OPTS="-Djava.awt.headless=true -Dfile.encoding=UTF-8 -server -Xms512m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:PermSize=256m -XX:MaxPermSize=256m -XX:+DisableExplicitGC"


위 와 같이 catalina.sh 에 추가해주었다.

저작자 표시
신고

출처 : http://blog.daum.net/warmfeel/104

이클립스로 개발하다가 PermGen space 라는 메세지가 나오면서 톰켓이 자꾸 죽었다.

메모리 문제..

-vmargs
-Xverify:none
-XX:PermSize=64M
-XX:MaxPermSize=256M
-Xms256m
-Xmx512

eclipse.ini 파일을 수정한다.


저작자 표시
신고

** Objective-c에서 데이터를 전송할 때 암호화가 필요할 때가 있다. 여러 다른 방법도 많이 있겠지만 AES를 통하여
  구현해봤다. 서버쪽은 자바기반이다. 출처는 구글신.. 여러 소스를 덕지덕지 모았다.

  key는 16자리로 하되 서버와 클라이언트에 같은 키를 넣어야한다. 대칭키이므로..

먼저 iPhone쪽 소스
=======================================================================================
#import <Foundation/Foundation.h>
#import <CommonCrypto/CommonCryptor.h>


@interface AESExtention : NSObject {

}
- (NSString*) aesEncryptString:(NSString*)textString;

- (NSString*) aesDecryptString:(NSString*)textString;

- (NSData *)AES128EncryptWithKey:(NSString *)key theData:(NSData *)Data;

- (NSData *)AES128DecryptWithKey:(NSString *)key theData:(NSData *)Data;

-(NSString *)hexEncode:(NSData *)data;

- (NSData*) decodeHexString : (NSString *)hexString;
@end

========================================================================================
#import "AESExtention.h"

@implementation AESExtention

- (NSString*) aesEncryptString:(NSString*)textString{
    //NSString *text = [[NSString alloc] initWithString:@"ncdncd"];
    NSString *key = [NSString stringWithFormat:@"0987654321098765"];
   
    NSData *data = [[[NSData alloc] initWithData:[textString dataUsingEncoding:NSUTF8StringEncoding]]autorelease];
   
    NSData *ret = [self AES128EncryptWithKey:key theData:data];

    //NSLog(@"%@", [[AESExtention alloc] encodeHexString:ret]);
    return [self hexEncode:ret];
}

- (NSString*) aesDecryptString:(NSString*)textString{
    NSString *key = [NSString stringWithFormat:@"0987654321098765"];
    NSLog(@"hex = %@",textString);
    NSData *ret = [self decodeHexString:textString];
   
    NSData *ret2 = [self AES128DecryptWithKey:key theData:ret];
   
    NSString *st2 = [[[NSString alloc] initWithData:ret2 encoding:NSUTF8StringEncoding] autorelease];
   
    return st2;
}

- (NSData *)AES128EncryptWithKey:(NSString *)key theData:(NSData *)Data {
       
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES128+1]; // room for terminator (unused) // oorspronkelijk 256
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
   
    // fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
   
    NSUInteger dataLength = [Data length];
   
    //See the doc: For block ciphers, the output size will always be less than or
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
   
    size_t numBytesEncrypted = 0;
   
    CCCryptorStatus cryptStatus = CCCrypt(kCCEncrypt,
                                          kCCAlgorithmAES128,
                                          kCCOptionECBMode +kCCOptionPKCS7Padding,
                                          keyPtr,
                                          kCCKeySizeAES128, // oorspronkelijk 256
                                          nil, /* initialization vector (optional) */
                                          [Data bytes],
                                          dataLength, /* input */
                                          buffer,
                                          bufferSize, /* output */
                                          &numBytesEncrypted);
       
    if (cryptStatus == kCCSuccess) {
        //the returned NSData takes ownership of the buffer and will free it on deallocation
        return [NSData dataWithBytesNoCopy:buffer length:numBytesEncrypted];
    }
   
    free(buffer); //free the buffer;
    return nil;
}

- (NSData *)AES128DecryptWithKey:(NSString *)key theData:(NSData *)Data
{
   
    // 'key' should be 32 bytes for AES256, will be null-padded otherwise
    char keyPtr[kCCKeySizeAES128+1]; // room for terminator (unused) // oorspronkelijk 256
    bzero(keyPtr, sizeof(keyPtr)); // fill with zeroes (for padding)
   
    // fetch key data
    [key getCString:keyPtr maxLength:sizeof(keyPtr) encoding:NSUTF8StringEncoding];
   
    NSUInteger dataLength = [Data length];
   
    //See the doc: For block ciphers, the output size will always be less than or
    //equal to the input size plus the size of one block.
    //That's why we need to add the size of one block here
    size_t bufferSize = dataLength + kCCBlockSizeAES128;
    void *buffer = malloc(bufferSize);
   
    size_t numBytesDecrypted = 0;
    CCCryptorStatus cryptStatus = CCCrypt(kCCDecrypt,
                                          kCCAlgorithmAES128,
                                          kCCOptionECBMode +kCCOptionPKCS7Padding,
                                          keyPtr, kCCKeySizeAES128, // oorspronkelijk 256
                                          NULL /* initialization vector (optional) */,
                                          [Data bytes], dataLength, /* input */
                                          buffer, bufferSize, /* output */
                                          &numBytesDecrypted);
   
    if (cryptStatus == kCCSuccess) {
        //the returned NSData takes ownership of the buffer and will free it on deallocation
        return [NSData dataWithBytesNoCopy:buffer length:numBytesDecrypted];
    }
   
    free(buffer); //free the buffer;
    return nil;
}

-(NSString *)hexEncode:(NSData *)data{
    NSMutableString *hex = [NSMutableString string];
    unsigned char *bytes = (unsigned char *)[data bytes];
    char temp[3];
    NSUInteger i=0;
   
    for(i=0; i<[data length]; i++){
        temp[0] = temp[1] = temp[2] =0;
        (void)sprintf(temp, "%02x",bytes[i]);
        [hex appendString:[NSString stringWithUTF8String:temp]];
       
    }
    return hex;
}

- (NSData*) decodeHexString : (NSString *)hexString
{
    int tlen = [hexString length]/2;
   
    char tbuf[tlen];
    int i,k,h,l;
    bzero(tbuf, sizeof(tbuf));
   
    for(i=0,k=0;i<tlen;i++)
    {
        h=[hexString characterAtIndex:k++];
        l=[hexString characterAtIndex:k++];
        h=(h >= 'A') ? h-'A'+10 : h-'0';
        l=(l >= 'A') ? l-'A'+10 : l-'0';
        tbuf[i]= ((h<<4)&0xf0)| (l&0x0f);
    }
   
    return [NSData dataWithBytes:tbuf length:tlen];
}

@end

===================================================================================================

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.spec.SecretKeySpec;

import org.apache.log4j.Logger;

public class AesUtil {
    Logger log = Logger.getRootLogger();
   
    public static String key = "0987654321098765";
   
    /**
     * hex to byte[] : 16진수 문자열을 바이트 배열로 변환한다.
     *
     * @param hex    hex string
     * @return
     */
    public static byte[] hexToByteArray(String hex) {
        if (hex == null || hex.length() == 0) {
            return null;
        }

        byte[] ba = new byte[hex.length() / 2];
        for (int i = 0; i < ba.length; i++) {
            ba[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
        }
        return ba;
    }

    /**
     * byte[] to hex : unsigned byte(바이트) 배열을 16진수 문자열로 바꾼다.
     *
     * @param ba        byte[]
     * @return
     */
    public static String byteArrayToHex(byte[] ba) {
        if (ba == null || ba.length == 0) {
            return null;
        }

        StringBuffer sb = new StringBuffer(ba.length * 2);
        String hexNumber;
        for (int x = 0; x < ba.length; x++) {
            hexNumber = "0" + Integer.toHexString(0xff & ba[x]);

            sb.append(hexNumber.substring(hexNumber.length() - 2));
        }
        return sb.toString();
    }

    /**
     * AES 방식의 암호화
     *
     * @param message
     * @return
     * @throws Exception
     */
    public static String encrypt(String message) throws Exception {
        //KeyGenerator kgen = KeyGenerator.getInstance("AES");
        //kgen.init(128);
        // use key coss2
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");

        // Instantiate the cipher
        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

        byte[] encrypted = cipher.doFinal(message.getBytes());
        return byteArrayToHex(encrypted);
    }

    /**
     * AES 방식의 복호화
     *
     * @param message
     * @return
     * @throws Exception
     */
    public static String decrypt(String encrypted) throws Exception {
        //KeyGenerator kgen = KeyGenerator.getInstance("AES");
        //kgen.init(128);
        // use key coss2
        SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), "AES");

        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
        byte[] original = cipher.doFinal(hexToByteArray(encrypted));
        String originalString = new String(original);
        return originalString;
    }
}

=================================================================================================

확실히 기억은 안나지만 1.5버전 이하는 자바폴더\jre\lib\security 쪽에 파일을 받아서 업데이트를 해주어야한다고 한다.
policy파일이던가.. 아무튼  전 1.6버전이라서 그런지 그냥 되더군요.

** 사용법**

-- Objective-c Encrypt
AESExtention *aes = [[AESExtention alloc] init];
NSString *temp = [NSString stringWithFormat:@"%@", [aes aesEncryptString:@"암호화할 문자열"]];
[aes release];

-- Objective-c Decrypt
AESExtention *aes = [[AESExtention alloc] init];
NSString *temp = [NSString stringWithFormat:@"%@", [aes aesDecryptString:@"복호화할 문자열"]];
[aes release];

-- Java
String token = AesUtil.encrypt("암호화할 문자열");
String token = AesUtil.decrypt("복호화할 문자열");

java쪽 필요한 lib
bcprov-ext-jdk16-145.jar
commons-io-1.4.jar
commons-lang-2.5.jar
log4j-1.2.16.jar
저작자 표시
신고

잘 정리 되어 있는 곳인 것 같다.

http://www.boog.co.kr/boog/jquery_lecture
저작자 표시
신고

콘솔에서 매번 실행해서 하면 상당히 불편하다.
검색해보니 이클립스에서 사용할 수 있는 방법이 있었다.

1. http://www.varaneckas.com/jad
  JAD를 다운받아서 특정폴더에 복사. (필자는 eclipse 폴더에 복사하였다)

2. http://sourceforge.net/projects/jadclipse
 플러그인을 다운받아서 eclipse/plugins 폴더에 복사. JAR파일 형태이다.

3. Eclipse를 실행하여 아래처럼 jad.exe의 파일 경로를 잡아준다.

이제 아무런 소스를 열어서 제대로 실행이 되는지 해본다.
클래스에 Ctrl를 누른체 마우스로 클릭하면 class 파일이 역컴파일되어 소스가 보인다.
저작자 표시
신고