발생일: 2009.05.08 문제: 아래처럼 td 안에 img 태그를 넣었는데 태그간 공백으로 인해 테이블 사이즈가 늘어나고 정상적으로 정렬이 되지 않는다. 이미지 공백을 무시하고 싶다. 해결책: img 의 css 속성에 vertical-align 을 top 으로 고정시켜 준다. 같은 상황에 대해 자세히 설명해 둔 블로그가 있다. 이와 비슷한 상황으로, img 태그에 a 링크를 줬을 때 이미지 하단에 작게 공백이 생기는 경우가 있다. 이 때에는 display에 block 속성을 주면 된다. (모질라 커뮤니티의 글타래 참조)
발생일: 2009.04.30 문제: parameter로 가져온 "true" 값을 boolean 으로 변경하려고 한다. 하여, Boolean.getBoolean("true") 를 적용했는데, true가 아니라 false가 리턴된다. 해결책: Boolean.getBoolean(name) 은 시스템 프로퍼티에 존재하는 name 의 값이 "true" 일 경우에만 true를 리턴한다. 지금 같은 경우에는 Boolean.valueOf("true").booleanValue() 를 사용하는 게 맞겠다. 같은 문제에 대해 명확하게 설명해 둔 블로그가 있다.
발생일: 2009.04.30 문제: double 값을 보이는 것과 같이 정상적으로 출력하고 싶다. 예를 들어, double a = 2856234253526.2342395; 와 같은 값을 system.out으로 출력하면 2.8562342535262344E12 와 같이 나온다. 보이는 것과 같이 출력하고 싶다. 해결책: java.text.NumberFormat 또는 java.text.DecimalFormat 을 사용하면 된다. (NumberFormat API 와 DecimalFormat API 를 참고하자.) NumberFormat 은 지역별, 통화별로 숫자를 포맷팅할 수 있으며, DecimalFormat은 NumberFormat을 상속받은 것으로 패턴을 정해주거나 하는 등의 더 상세한 설정을 할 수 있다...
발생일: 2009.04.26 문제: mysql 을 이용하는 시스템에서 게시물의 생성 시간을 추가하기 위해 컬럼을 하나 추가했다. 컬럼명: createddate 데이터 타입: date 게시물 작성 후, createddate 로 정렬하려 했는데 정상적으로 정렬되지 않는다. 해결책: mysql 의 date 는 오라클과 달리 일자까지만 저장한다. (yyyy-mm-dd) 초단위 시간까지 포함하려 한다면 datetime 타입으로 컬럼을 생성해야 한다. mysql 의 데이터 타입에 대해 잘 정리해놓은 블로그가 있다. 날짜와 시간 함수에 대해 정리해놓은 블로그도 참고하자.
발생일: 2009.04.23 문제: prototypejs 에서 radio value 를 아주 그냥 깔꼼하게 얻어오는 방법은 없을까? 해결책: 1라인으로 해결한 방법이 있다. (여기서 얻어옴) var typeValue = Form.getInputs('myform','radio','type').find(function(radio) { return radio.checked; }).value; prototypejs 의 Form.getInputs API 를 참고하면 이해가 된다.
발생일: 2009.04.23 문제: prototypejs 를 이용해 Element의 순서를 바꾸려고 한다. Element.insert 구문을 사용하여 append 하려는 것이 아니라 원하는 위치에 넣고 싶은데... 해결책: Element.insert 구문을 사용하면 된다. (prototypejs 의 insert API) insert 구문은 append 기능 뿐만 아니라 동일한 레벨의 추가도 가능하다. (동일한 레벨의 추가에 대한 예제를 적어둔 블로그가 있다.) 예를 들어, 'sample' element 의 위치를 동일한 레벨에 있는 이전의 Element 앞으로 이동(자리바꿈)하고 싶다면, if (sample.previous()) { // 이전 element가 존재하면 // 이전 element의 앞에 sa..
발생일: 2009.04.16 문제: 발송한 메일을 몇 명이나 개봉했는지 알기 위해, 메일 내에 사이즈가 0인 이미지 태그를 두어 개봉 횟수를 업데이트하는 서블릿을 호출하도록 했다. 해당 서블릿에서는 메일 아이디를 패러미터로 받아, 매 요청마다 아이디에 해당하는 데이터를 찾아 디비에서 카운트를 1씩 업데이트 해주고 있었다. 문제는 아침 뉴스 메일을 발송하면서부터 발생했다. 많은 사용자가 동시에 메일을 개봉하면서 해당 서블릿에 갑자기 많은 요청이 들어오게 된 것이다. 매 요청마다 디비에 접속해서 업데이트 하다보니 동시 요청에 대해 조금씩 지연처리되기 시작했고, 급기야는 디비 쓰레드풀이 꽉 차서 시스템 자체가 멎어버리는 현상이 발생했다. 해결책: 개봉 횟수를 업데이트하는 서블릿에 요청이 들어왔을 때에 바로 디..
발생일: 2009.04.16 문제: 어플리케이션의 뒷단에서 작동하는 Daemon Thread를 생성하려고 한다. 어플리케이션이 로드되면 스레드가 일정 시간동안 작동하며, 스레드는 중복되어 작동되지 않도록 한다. 해결책: 1. 데몬 스레드의 경우, 유저 스레드(일반 스레드)와 달리 JVM의 뒷단에서 실행되기 때문에 JVM이 종료되면 함께 종료된다. (데몬 스레드와 유저 스레드의 차이) 일단 데몬 스레드는 아래와 같이 Thead의 setDaemon(true) 메서드를 통해 설정하면 된다. Thread t = new Thread(this); t.setDaemon(true); // 스레드를 데몬으로 설정 2. 어플리케이션의 백그라운드 태스크로 추가하기 위해서는, 일단 데몬 스레드가 포함된 클래스를 컨텍스트의 리..