티스토리 뷰

운영체제덕에 반나절을 삽질한 내용이다.

현재 운영중인 사이트에서 시스템 시간을 이용해서 특정 트랜잭션의 수행을 막기위한 부분을 추가하고 테스트에 들어갔다. 헌데 분명히 20분 이내의 상황인 경우에는 해당 트랜잭션이 수행되면 안되는데 수행이되는 이상야릇한 현상이 발생하는 것이었다.

로직의 문제가 없음을 살펴본뒤, 서버 로그를 찾아보니 어이없게도 현재 PC 시간과는 너무나도 차이가 많이 나는 것 아닌가? 날짜 선택도 다시 해 보고 시간 선택도 다시 해 보았으나 결과는 똑같았다.

순수 Java Application 으로 현재 시간을 찍어내는 코드를 다음과 같이 작성하였다. 복잡하게 이것저것 쓰지 않고 단순히 java.util.Date 를 사용해서 찍었더니. 역시나 서버로그에 있는 시간과 동일하게 잘못된 시간을 나타내는 것 아닌가?

package test.hoya.time;

import java.util.Date;

public class DateTimeTest {
 public static void main(String[] args) throws Exception {
  long curr = System.currentTimeMillis();
 
  Date date = new Date(curr);
 
  System.out.println("current date : " + date.toString());
 }
}


시스템 시간과의 정확한 차이를 알기위해 커맨드창에서 다음과 같은 방법을 사용했다.

E:\> java test.hoya.time.DateTimeTest && time

다음과 같은 결과를 보니 이것. 어이없게도 정확하게 -9시간 차이가 나는 것이 확인되었다. 즉, 우리나라(대한민국)이 GMT +9 시간이므로, -9시간이라는건 Locale이 먹지 않았다는 이야기가 된다. (결과에도 GMT 라고 나오지 우리나라의 경우 사용하는 KST 가 나오질 않는다.)

current date : Thu Sep 27 08:53:25 GMT 2007
현재 시간: 17:53:25.25
새로운 시간을 입력하십시오:

인위적으로 Locale 을 설정한 다음, 실행해 보았지만 결과는 똑같았다. 당연히 Windows XP 나 Windows Server 2003 등에서는 정상적인 시간이 출력되었다.

지인의 조언에 따라 System Property 값을 찍어보았는데. 이런이런. user.timezone 이 GMT 이다. 분명 시스템 상에는 GMT+09 이므로 user.timezone이 KST 또는 Asia/Seoul 이라고 나와야 할 듯 한데, 잘못 읽어오고 있는 것이었다.

아까 만든 소스상에 System.setProperty("user.timezone", "Asia/Seoul"); 한줄을 추가하고 실행하니 다음과 같이 올바른 값이 나오더라.

current date : Thu Sep 27 17:58:14 KST 2007
현재 시간: 17:58:15.03
새로운 시간을 입력하십시오:

결국 원인을 찾아 헤매던 중, 오후 내내 삽질한 이유를 알았다. 바로 JDK의 뻑이라고 한다.
다음은 증거샷이다 -_-;;;
링크 :
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6440819
사용자 삽입 이미지

Windows Vista 에서 JDK Bug Report


일단 위의 리포트에서 말하는 JDK 6.0 과 JDK 5.0_09 에서 멀쩡한지는 확인하지 못했다.
참 꺼림직하지만 일단은 서버 부팅 명령어에 -Duser.timezone=GMT+09:00 을 추가해서 사용해햐 한다.

SUN에서 만든 Java의 기본중의 기본인 기능도, 사람이 만들었구나라는 생각이 든다. -_-;;
삽질만세다.. 췟.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함