발생일: 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.24 문제: 이클립스(eclipse) 사용 시 Ctrl + Space 로 자동 완성(Template Proposals) 기능을 켜보면, 가끔 메서드 아이콘 옆에 작게 시계 표시가 되어 있는 게 있다. 이건 뭘 나타내는 걸까...? 해결책: 메서드 옆에 시계 표시가 되어 있는 것은, 동기화 된 메서드를 나타낸다. (메소드에 시계표시? 포스트에서 참고) 테스트 해보니 synchronized 구문을 써서 메서드를 선언할 경우에 해당하며, 메서드 안에서 synchronized 블럭을 사용할 때에는 표시되지 않는다.
발생일: 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.20 문제: 프렌드 홍이 Google Wave 에 대한 내용에 들어있는 포스트 링크를 줬다. 커뮤니케이션의 미래, 구글 웨이브에게 물어봐?! (동영상도 재밌고 유익하다. 시간을 내서라도 쭉 보도록 하자.) 얘네들을 보면, 변경 사항이 각 페이지를 보고 있는 사용자에게 실시간으로 보여진다. Google Talk 이나 Google Doc 에도 이미 있는 기능이긴 하던데,.. 아마 서버 푸시 방식으로 요청을 처리하고 있는 것 같다. (옵저버 패턴처럼 말이다...) 이건 어떻게 구현하는 걸까? 해결책: 홍이 Resin 이라고, 이런 방식을 제공하는 서버가 있다며, 잘 정리된 포스트가 있다고 알려준다. 더불어, 이런 Server Push 방식을 Comet 이라고 한다고 알려줬다. Comet..
발생일: 2009.11.16 문제: 얼마 전 디비 서버 변경 작업이 있었는데 서버 변경 이후로 인터페이스 되는 데이터들 중 한글이 깨지는 것들이 발견됐다. 각 데이터들은 여러 방법으로 인터페이스 된다. - 파일로 전송 받아 디비에 업데이트 - 특정 모듈을 통해 대상 서버에 접속해 그 내용을 파일로 떨군 후에 업데이트 - 대상 디비로 직접 접근해서 가져온 후 업데이트 unix 서버에서 crontab 에 등록된 쉘 프로그램이 인터페이스 역할을 하는 java 클래스를 실행시켜 가져온 데이터를 디비로 업로드한다. 헌데,.. 하나를 수정하면 하나가 깨지고, 다른 하나를 수정하면 또 기존 것이 깨지고 이런다.... 뭐가 문제인 걸까... 해결책: 전체적으로 인코딩/디코딩에 대한 이해가 필요했다. 여러 자료들을 찾아..
발생일: 2009.11.16 문제: 제우스 개발 라이센스를 받으려고 신청 페이지에서 양식대로 작성하는데 Host ID 를 넣으라구 한다. 컴퓨터 이름인가 해서 컴퓨터 이름을 넣어보니 이건 아니란다. 호스트 아이디가 뭐지...? 해결책: Host ID 는 컴퓨터에 대한 8자리의 유니크한 ID 라고 한다. 일단, Window 에서 Host ID 를 가져오기 위해서는, cmd 창에서 ipconfig /all 을 한 결과에서, Physical Address 에서 대쉬(-)를 뺀 값이 Host ID 가 된다. 기타 자세한 내용은 아래 페이지에서 참고하도록 하자. What is hostid?
발생일: 2009.11.10 문제: 가끔 책을 보면서 작업할 때가 있는데, 그러다 보면 10분마다 화면보호기 화면으로 넘어가버린다. (사정 상 화면보호기 시간을 수정할 수는 없다.) 지금까진 책을 보다가 생각날 때마다 마우스를 툭툭 건드려줬는데, 정해진 시간마다 마우스를 살짝 움직여주는 프로그램을 만들면 좋을 것 같단 생각이 들었다. 자바에서 마우스를 컨트롤 할 수 있는 방법이 있을까? 해결책: Java 에서도 mouse 또는 keyboard 를 컨트롤 할 수 있다. AWT 에 Robot 이라는 객체가 있었다. Java control OS mouse/keyboard 포럼 참고 해당 포럼에서처럼 지금은 책을 읽을 경우 간단하게 아래와 같은 코드를 실행시켜 놓는다. public static void main..
발생일: 2009.11.09 문제: 이번에 서버 변경 작업을 하면서 기존 서버에 crontab 으로 등록되어 있는 내용을 똑같이 옮겨왔다. 정해진 시간에 몇 개의 쉘 프로그램을 실행시키는 구문이었는데, 이 놈들이 정상적으로 실행되지 않는다. 확인해보니, 각 쉘 프로그램에서는 자바의 루트 디렉토리를 칭하는 JAVA_HOME 환경 변수를 사용하는데, 이번 서버 변경 작업때문에 자바의 디렉토리 위치가 변경되었기 때문이었다. 어쩔 수 없이 각 파일을 열어 JAVA_HOME 변수를 설정하다가 문득, '환경 변수를 왜 모든 쉘 프로그램에 각각 등록해둔 거지..?' 라고 생각하면서 JAVA_HOME 변수를 .profile 에 환경 변수로 추가하고 쉘 프로그램에 등록되어 있던 JAVA_HOME 은 삭제했다. 테스트로 ..
발생일: 2009.11.06 문제: 후배P에게 프로시저를 호출하는 간단한 model1 방식의 jsp 페이지를 만들자고 했다. 후배도 역시 내가 생각했던 것과 같이 preparedStatement 에서 exec procedureTest(?, ?, ?) 와 같은 형태로 코드를 작성했는데, SQLException 이 난다. jsp 에서 저장 프로시저를 호출하는 다른 방법이 있었나... 해결책: 그러고보니 jsp 에서 직접 저장 프로시저를 호출해본 적이 없었다... 검색해보니 prepareCall 이라는 메서드가 있다. jsp에서 프로시저 호출에 대해 잘 정리해둔 포스트를 참고하자. Java의 Connection Interface 에 정의되어 있는 prepareCall API 도 참고하자.