발생일: 2009.12.08 문제: 클래스 A를 상속받는 클래스 B가 있다. 테스트를 위해서 각각의 클래스에 main 메서드를 작성해놨다. class A { public static void main(String[] args) {} } class B extends A { public static void main(String[] args) {} // overriding 하려고 시도 } 이런 식이다. 이클립스에서 이 내용을 작성하고 있었는데, 분명 B 클래스의 main 메서드는, A 클래스의 것을 오버라이딩한 게 맞을 텐데, 이상하게 메서드 앞에 오버라이드 됐다는 아이콘이 표시되지 않는다. 어라? 스태틱 메서드는 오버라이딩 되지 않는 건가? 해결책: 검색해보니, static 메서드는 Overriding 할..
발생일: 2009.12.04 문제: 후배 S가 이클립스에서 소스 내에 에러가 없는데도 프로젝트 루트 폴더에 X 표시가 뜬다며 물어본다. 이클립스의 기본 컴파일러의 버전은 5.0인데, 해당 프로젝트만 1.4로 설정했더니 그런 것 같다고 한다. 이클립스의 Problem window 를 보니 아래와 같은 에러가 보인다. Java compiler level does not match the version of the installed Java project facet 처음엔 Java project facet 부분만 흘려보고는, jsp 인 줄 알고, java compiler 와 jsp 의 버전이 안 맞는 거라고 생각했다. Java 1.4 = JSP 2.3 Java 5.0 = JSP 2.4 이렇게 매치되는 게 맞는..
발생일: 2009.12.03 문제: javascript 의 변수 참조에 대한 예제 파일을 작성해보다가, (변수는 참조 링크의 마지막 값에 대한 참조를 갖는다. 에 대한 예제였다) 문득 자바에서도 그렇겠지.. 란 생각이 들어 테스트 해보던 중이었다. String a = "abc"; String b = a; a = "def"; System.out.println(b); // "abc" 가 출력된다. a 는 "abc" 에 대한 주소값을 가지고 있고, String b = a 부분에서 b 역시 "abc" 에 대한 주소값을 가지게 된다. (중간에 String c = b; 가 들어있었다면, c 역시 "abc" 에 대한 주소값을 가지게 된다.) a = "def' 부분에서는 a 에 새로운 주소값이 할당되게 되고, b 의 ..
발생일: 2009.11.25 문제: JEUS를 설치하고 끄고 켜기를 몇 번 하다보니, 아래와 같은 에러가 발생했다. java.net.BindException: Address already in use: JVM_Bind 아무래도 기존 프로세스가 죽지 않아서 그런 것 같은데, 무슨 오류일까... 해결책: 해당 포트가 이미 사용 중이란 오류이므로, 해당 포트를 사용하는 프로세스를 종료해주면 된다. 그 프로세스가 어떤 건지 모를 경우, cmd 에서 netstat -a -n -o 명령어를 통해 해당 포트를 사용하고 있는 프로세스를 찾아낸 후, 종료하자. taskkill /f /pid 프로세스아이디 로 프로세스를 종료하자. (cmd 창에서 프로세스 목록을 보거나 삭제하기) 또는 작업 관리자에서 PID 를 보이게 한..
발생일: 2009.11.24 문제: 서블릿 스레드... 사용자 요청이 들어왔을 때, 서블릿 인스턴스의 스레드를 생성해서 처리한다고 알고 있었다... 서블릿의 생명 주기는 아래와 같다고 말이다. (Servlet Life Cycle) 요청의 들어오면, - 서블릿 인스턴스가 존재하지 않을 경우, 1. 서블릿의 인스턴스를 생성한다. 2. init() 메서드를 통해 초기화 한다. - 서블릿 인스턴스가 존재할 경우, - 각 요청에 대해 서블릿 인스턴스의 스레드를 생성해서 service() 메서드를 호출한다. - 서블릿 인스턴스를 삭제하게 될 경우, destroy() 메서드를 실행한다. '서블릿 인스턴스의 스레드'를 생성해서 service() 메서드를 호출한다... 근데, 서블릿 API 를 아무리 뒤져봐도 Servl..
발생일: 2009.11.24 문제: 디자인 패턴 책을 보다가 예제에 HashTable 이 나오는 걸 봤다. HashTable 이라... 예전에 HashMap 과의 차이점을 찾아봤던 기억이 나기도 하는데, 아리까리하다. 게다가 HashTable 을 써본 적은 한 번도 없었다. 어떤 차이일까? 해결책: ArrayList 와 Vector 의 차이점과 같이 HashMap 과 HashTable 의 차이점은 동기화 지원 여부이다. Vector, Hashtable 은 동기화 되어있기 때문에 쓰레드 안전하다. 다만, 성능상의 이슈 때문에 Vector 와 Hashtable 을 사용할 때에는 잘 고려해서 사용해야 한다. API 를 보니 Stack 도 Vector 의 서브 클래스이므로 동기화 되어 있겠다~ 자세한 내용은 아..
발생일: 2009.11.20 문제: 파트에서 한 주에 한 번씩 연구회를 하는데, 이 번엔 내 차례다... 썸바디의 요청에 의해 정규식을 주제로 했다. 아래는 몇 군데 유용한 사이트 링크. 참고하면 좋겠다. 해결책: 정규식이란? Regular Expression (Wikipedia) 자바스크립트 정규식 사용 https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Regular_Expressions Replace 메서드에서 정규식 사용 https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/String/replace 자바 정규식 객체 사용 http://java.sun.com/..
발생일: 2009.11.16 문제: 얼마 전 디비 서버 변경 작업이 있었는데 서버 변경 이후로 인터페이스 되는 데이터들 중 한글이 깨지는 것들이 발견됐다. 각 데이터들은 여러 방법으로 인터페이스 된다. - 파일로 전송 받아 디비에 업데이트 - 특정 모듈을 통해 대상 서버에 접속해 그 내용을 파일로 떨군 후에 업데이트 - 대상 디비로 직접 접근해서 가져온 후 업데이트 unix 서버에서 crontab 에 등록된 쉘 프로그램이 인터페이스 역할을 하는 java 클래스를 실행시켜 가져온 데이터를 디비로 업로드한다. 헌데,.. 하나를 수정하면 하나가 깨지고, 다른 하나를 수정하면 또 기존 것이 깨지고 이런다.... 뭐가 문제인 걸까... 해결책: 전체적으로 인코딩/디코딩에 대한 이해가 필요했다. 여러 자료들을 찾아..
발생일: 2009.11.10 문제: 가끔 책을 보면서 작업할 때가 있는데, 그러다 보면 10분마다 화면보호기 화면으로 넘어가버린다. (사정 상 화면보호기 시간을 수정할 수는 없다.) 지금까진 책을 보다가 생각날 때마다 마우스를 툭툭 건드려줬는데, 정해진 시간마다 마우스를 살짝 움직여주는 프로그램을 만들면 좋을 것 같단 생각이 들었다. 자바에서 마우스를 컨트롤 할 수 있는 방법이 있을까? 해결책: Java 에서도 mouse 또는 keyboard 를 컨트롤 할 수 있다. AWT 에 Robot 이라는 객체가 있었다. Java control OS mouse/keyboard 포럼 참고 해당 포럼에서처럼 지금은 책을 읽을 경우 간단하게 아래와 같은 코드를 실행시켜 놓는다. public static void main..
발생일: 2009.11.06 문제: 후배P에게 프로시저를 호출하는 간단한 model1 방식의 jsp 페이지를 만들자고 했다. 후배도 역시 내가 생각했던 것과 같이 preparedStatement 에서 exec procedureTest(?, ?, ?) 와 같은 형태로 코드를 작성했는데, SQLException 이 난다. jsp 에서 저장 프로시저를 호출하는 다른 방법이 있었나... 해결책: 그러고보니 jsp 에서 직접 저장 프로시저를 호출해본 적이 없었다... 검색해보니 prepareCall 이라는 메서드가 있다. jsp에서 프로시저 호출에 대해 잘 정리해둔 포스트를 참고하자. Java의 Connection Interface 에 정의되어 있는 prepareCall API 도 참고하자.