2011년 11월 16일 수요일

Java Exception 처리 방법 Idea

 몇몇 시스템에서 Business layer 에서 발생한 Exception 을 특정한 Error 처리/감지용 Exception class 로 Wrapping 하여 throw 하는 경우가 있다.

 Wrapping 하게 되면, Exception 을 감지할 수 있는 Monitoring tool 에 감지가 되지 않는 단점이 있는데, 이것을 아래와 같은 Code 로 다시 한 번 Exception 을 throw 하여 H/W failure 같은 상황을 감지할 수 있다.

 이 방법은 내 생각엔, 아주 특수한 경우에만 적용할 수 있을 것 같다. 그렇지 않으면 같은 Exception 이 매우 여러 갈래로 전단에 위치한 Monitoring tool 까지 전파된다.


try {
  // DO SOMTHING USEFUL
} catch (e) {


  // Make Exception Object
  throw ExceptionObject();


} finally {


  if ( OccuredException is System Exception ) {
    // Make System Exception Object
    throw SystemExceptionObject();
  }
}


2011년 11월 13일 일요일

Fabric 설치 방법

 Python 프로그래밍 언어로 작성된 Fabric 의 설치 방법을 정리하였다. Fabric 은 ssh2 기반으로 Deploy 작업을 단순화+자동화 해줄 수 있는 모듈이다. 자세한 소개는 생략한다.


이 Post 에서는 Python 2.7.2 (UNIX) + Fabric 1.3.2 기준으로 설명된다.

  • Download 할 파일들
 Fabric 1.3.2 버젼 기준으로 필요한 모듈은 아래와 같다.


1) Python 인터프리터 프로그램
 http://www.python.org/download/ 위치에서 자신에게 필요한 버젼을 download 한다. 이 Post 에서는 Python-2.7.2.tar.bz2 를 다운로드 하였다.


2) setuptools - Python 모듈
 setuptools 는 Python 모듈을 쉽게 설치/제거 할 수 있는 admin utility 이다.  http://pypi.python.org/pypi/setuptools/0.6c11#downloads 에서 egg 파일을 다운로드 받는다.


3) SSH - Python 모듈
 SSH 모듈을 여기에서 다운로드 받는다.


4) PyCrypto - Python 모듈
 SSH 암호화 모듈을 여기에서 다운로드 받는다.


5) Fabric 1.3.2 - Python 모듈
 Fabric 모듈을 여기에서 다운로드 받는다.


※ Fabric 이 제공하는 Multiprocessing 기능을 이용하려면, 따로 multiprocessing 모듈을 추가 설치하거나, Python 을 2.6 버젼 이상을 갖고 있어야 한다.

  • Installation
SSH 모듈은 PyCrypto 가 설치되어 있어야 한다.(Dependency) 그러므로 3번과 4번은 순서를 지킨다.


1) Python 프로그램



#> bunzip2 Python-2.7.2.tar.bz2
#> tar -xvf  Python-2.7.2.tar
#> ./configure
#> make
#> make install


2) setuptools 0.6c11


#> sh setuptools-0.6c11-py2.7.egg


3) PyCrypto


#> gzip -d pycrypto-2.4.1.tar.gz
#> tar -xvf pycrypto-2.4.1.tar
#> python setup.py install


4) SSH 모듈


#> gzip -d ssh-1.7.9.tar.gz
#> tar -xvf ssh-1.7.9.tar
#> python setup.py install


5) Fabric


#> gzip -d fabric-1.3.2.tar.gz
#> tar -xvf fabric-1.3.2.tar
#> python setup.py install

  • Verification

 아래 내용을 참고하여 Fabric 이 잘 설치되었는지 확인한다.


1) 텍스트 에디터로 밑에 소스 코드를 입력하고 fabfile.py 로 저장한다.


def hello():
    print("Hello World!")


2) Shell 상에서 아래와 같이 입력하였을 때, print() 에 넣은 Hello World! 가 정상 출력되면 OK

  • 추가 Library dependency
설치 점검을 위해 Hello world 예제를 실행하면 정상적으로 동작하지만, 이러한 에러가 출력되었다.






/usr/local/lib/python2.7/site-packages/Crypto/Util/number.py:57: PowmInsecureWarning: Not using mpz_powm_sec.  You should rebuild using libgmp >= 5 to avoid timing attack vulnerability.


 libgmp 는 시스템에 설치되어 있는 라이브러리 인데, libgmp.so 파일의 버젼이 fab 가 요구하는 수준보다 낮아서 그런 것 같다. 그래서 libgmp 를 에러 로그에서 보았던 데로 5 이상 버젼을 설치한 후 Python 을 다시 compile 하여 재설치 하였다. 테스트하는 system 이 redhat 이 설치되어 있는데, 구성한지 오래되어 그럴 수도 있다.





MD5 에 대하여



 파일 중복 검사 Python script 를 작성하기 위하여, 파일 무결성 검사에 사용할 수 있는 MD5 암호화 해시 알고리즘에 대하여 자료 조사를 하였다.
  • Definition from wikipedia.org
 MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다. 1991년에 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안했다.
1996년에 MD5의 설계상 결함이 발견되었다. 이것은 매우 치명적인 결함은 아니었지만, 암호학자들은 해시 용도로 SHA-1와 같이 다른 안전한 알고리즘을 사용할 것을 권장하기 시작했다. 2004년에는 더욱 심한 암호화 결함[1]이 발견되었고. 2006년에는 노트북 컴퓨터 한 대의 계산 능력으로 1분 내에 해시 충돌을 찾을 정도로 빠른 알고리즘이 발표[2]되기도 하였다. 현재 MD5 알고리즘을 보안 관련 용도로 쓰는 것은 권장하지 않으며, 심각한 보안 문제를 야기할 수도 있다. 2008년 12월에는 MD5의 결함을 이용해 SSL 인증서를 변조하는 것이 가능하다는 것이 발표되기도 했다[3].
  • 작동 방식
 MD5 알고리즘은 임의의 길이의 입력 데이터를 받아, 128bit 길이의 해시 값을 출력한다. 512 비트씩 처리하기 때문에 입력 데이터를 512 비트에 맞춰 패딩한 다음 해시 함수에 처리되어 결과 값이 출력된다.
  • 정리
 MD5 는 해시 충돌이 발생할 수 있는 알고리즘이다. 서로 다른 내용을 가진 2가지의 입력이 해시 함수에 입력되었을 때 서로 다른 해시 값이 출력되어야 하지만 같은 값이 출력되는 것을 해시 충돌이라고 한다. 예를 들어, Java Map 객체에 <"1", "A"> 와 <"2", "B"> 를 차례로 입력하였는데, Map 객체가 사용하는 해시 함수가 해시 충돌이 있을 경우, 같은 저장소에 "A", 와 "B" 가 차례로 입력되어 결과적으로 하나만 입력된 상태가 되는 것이다.
 그렇기 때문에 아주 철저한 검사가 필요한 경우에는 MD5 로 무결성 검사하는 것은 맞지 않으며 더욱이 암호화 알고리즘으로는 맞지 않다.
  • 무결성 검사에 사용하는 방법
 어떤 파일의 MD5 값을 출력하고자 한다면 MD5 알고리즘의 입력에 파일의 내용을 넣으면 된다. 그러면 알아서 MD5 값인 128비트 스트링이 출력된다.
 이런 MD5 값을 산출할 수 있는 많은 유틸리티가 인터넷에 공개되어 있으므로 2~3분만 구글링하면 쉽게 유틸리티를 구할 수 있을 것이다.

2011년 11월 8일 화요일

HTML5 링크 모음

http://playground.html5rocks.com

구글에서 만든 사이트로, HTML5 의 예제 Code 들이 충실하게 구현되어 있다.
Chrome 에서만 동작 테스트 하였음

http://ujeani.wordpress.com/

Phonegap + jQuery Mobile 개발 환경 셋업에 대하여

HTML5 Web Socket

  • 등장 배경
 기존 Web 통신은 모두 클라이언트(Browser) 의 요청 --> Server 의 응답 형식이었다. Polling 방식 + 단방향 통신으로 IO 를 구현해온 것이다. 그래서 Web 환경에서 채팅 기능을 구현하려면 클라이언트는 일정 주기 별로 계속 서버에 메시지 도착 유무를 판단하기 위하여 Polling 해야 한다.
 HTML5 에서는 Established 된 TCP 연결을 통해서 양방향이 동시 통신을 할 수 있게 되었다. 이것을 프로그래머 입장에서 좀 더 귀가 트이게 이야기 하자면, Mobile Web application 에서 PUSH 기능을 쓸 수 있게 된 것이다.
  • 성능의 향상
 기존 Web 통신에서 그나마 쓸만한 것이 Ajax 이었다. 만약 똑같은 기능을 Web socket 과 Ajax 로 구현하면 그 성능 차이는 어떨까?

 인터넷에서 조금만 구글링 해보면 Performance 테스트한 결과들을 쉽게 볼 수 있는데, 정량적인 수치를 단언하긴 힘들지만 일반적으로 30배 이상 속도가 빠르다. 그럴 수밖에 없는 것이, Ajax 는 호출 할 때마다 연결을 새롭게 해야 한다. 그렇기 때문에 송신해야 하는 Data 는 HTTP 헤더 정보를 포함해서, 항상 더 많다. 반면에 Web socket 은 Established 된 TCP 연결 상에서 필요한 Data 만 바로 보내면 되기 때문에, 클라이언트와 Server 사이의 대역폭을 훨씬 효율적으로 사용할 수 있게 된다.
  • 구현하는 방법
 Javascript 내에서 간략하게 Web socket 기능을 구현해서 쓸 수 있다. 객체를 만들고 Event Handler 를 부착하기만 하면 된다.

<script lang="javascript">    var ws = new WebSocket("http://yourdomain.com");
    // PUSH Message Handler    ws.onmessage = function(msg) {                                                        alert(msg.data);                                                   }    // Connection Established    ws.onopen = function(msg) {                                                  alert("Connection Established");                                             }
    // Connection Closed    ws.onclose = function(msg) {                                                   alert("Connetion Ended");                                              }</script>

2011년 11월 2일 수요일

FIFA Manager 12 나이가 저장되는 방식


 Electronic Arts 의 FIFA Manager 12 게임에서는 각 선수들의 나이를 Julian Date(율리우스 력)으로 저장합니다. 그런데 우리가 사용하는 달력은 Glegorrian Calendar(그레고리 력) 라서, 둘 사이에 차이가 있습니다.

그레고리 력 에 대해서 보기
율리우스 력 에 대해서 보기

 예를 들어 선수의 생년월일이 1984년 7월 21일 이라면, 현재 우리가 사용하는 그레고리 력에 의해서 그 생년월인은 30844 의 십진수 값으로 변환되어 컴퓨터 내에 저장됩니다.

 그렇지만 FIFA Manager 12 에서는 율리우스 력을 사용하기 때문에 2445903 라는 값으로 저장됩니다.

 그러므로 선수의 나이를 에딧하기 위해서 생년월일을 율리우스 력으로 변환하여 찾으면 됩니다.

그레고리 력을 율리우스 력으로 변환 해주는 사이트

FIFA Manager 12 감독 돈 올리기 (쉬운 방법)

아래 동영상을 참고 하셔서 Edit 하면 돈이 Trillion 단위로 늘어납니다.

예전 피파 매니져 버전들의 private_item 고치는 것과 비슷하고, 고치는 액수를 10^24 (10의 24승) 으로 하면 늘릴 수 있습니다.