발생일: 2009.11.24 문제: 디자인 패턴 책을 보다가 예제에 HashTable 이 나오는 걸 봤다. HashTable 이라... 예전에 HashMap 과의 차이점을 찾아봤던 기억이 나기도 하는데, 아리까리하다. 게다가 HashTable 을 써본 적은 한 번도 없었다. 어떤 차이일까? 해결책: ArrayList 와 Vector 의 차이점과 같이 HashMap 과 HashTable 의 차이점은 동기화 지원 여부이다. Vector, Hashtable 은 동기화 되어있기 때문에 쓰레드 안전하다. 다만, 성능상의 이슈 때문에 Vector 와 Hashtable 을 사용할 때에는 잘 고려해서 사용해야 한다. API 를 보니 Stack 도 Vector 의 서브 클래스이므로 동기화 되어 있겠다~ 자세한 내용은 아..
발생일: 2009.04.16 문제: 발송한 메일을 몇 명이나 개봉했는지 알기 위해, 메일 내에 사이즈가 0인 이미지 태그를 두어 개봉 횟수를 업데이트하는 서블릿을 호출하도록 했다. 해당 서블릿에서는 메일 아이디를 패러미터로 받아, 매 요청마다 아이디에 해당하는 데이터를 찾아 디비에서 카운트를 1씩 업데이트 해주고 있었다. 문제는 아침 뉴스 메일을 발송하면서부터 발생했다. 많은 사용자가 동시에 메일을 개봉하면서 해당 서블릿에 갑자기 많은 요청이 들어오게 된 것이다. 매 요청마다 디비에 접속해서 업데이트 하다보니 동시 요청에 대해 조금씩 지연처리되기 시작했고, 급기야는 디비 쓰레드풀이 꽉 차서 시스템 자체가 멎어버리는 현상이 발생했다. 해결책: 개봉 횟수를 업데이트하는 서블릿에 요청이 들어왔을 때에 바로 디..
발생일: 2008.09.03 문제: 메서드를 동기화 하려고 하는데, synchronized 와 static synchronized 의 차이점을 모르겠다. 해결책: synchronized method는 synchronized(this) { } 블럭으로 쓰는 것과 동일합니다. 즉, 현재 instance에 대해서만 동기화가 일어난다는 것이지요. 이 경우 해당 instance에서는 동기화가 일어나지만, 2개 이상의 instance가 있다면 각각의 instance에 대해 동기화가 일어나므로 두 개의 instance가 각각의 method를 실행하는 것이 가능합니다. 반면 static synchronized method의 경우는 해당 클래스의 클래스 객체에 대해 동기화가 일어납니다. 따라서, static 한 memb..