발생일: 2009.06.12 문제: 시스템에 구현되어 있는 엑셀 다운로더 기능을 수정할 일이 생겼다. jsp에 html table로 생성해서 contentType과 response의 header를 설정해주는 방법은 알고 있었지만, HSSFWorkbook 과 HSSFSheet 는 뭔지 잘 모르겠다. 이게 뭘꼬..? 해결책: apache의 POI라는 거란다. (API 참조) HSSF의 뜻이 재밌다.^^ 같이 검색해 보던 중, 자바에서 Excel로 출력하는 여러가지 방법에 대해 정리해 둔 사이트가 있다. 훑어보자.
발생일: 2009.06.12 문제: 키워드를 입력하면 한글/영문 여부를 구분해서 각각 다른 액션을 수행하려고 한다. 한글과 영문이 섞여있을 경우엔 한글로 파악하며, 샘플 데이터는 아래와 같다. 'abc' : 영문 'abc 울랄라' : 한글 ' abc _ def -- abc' : 영문 '울라라' : 한글 '울랄라A' : 한글 키워드에 특수문자가 포함될 수 있지만 구분 없이 단지 한글과 영문 여부를 판단하려고 한다. 하여~ 좀 간단히 깔끔하게 해결하고자, apache의 StringUtils의 isAlphanumericSpace() 메서드를 사용해보려고 했으나~ 여기서의 알파벳은 한글도 포함하는 모양이다. 아마 내부적으론 \w 와 \s 를 정규식으로 체크하는 모양이다. for 문으로 캐릭터 체킹을 하는 예제도..
발생일: 2009.06.09 문제: 전체 목록에서 특정 배열에 담겨있는 값을 찾아 표시하기 위해 Arrays.binarySearch를 사용하는 코드가 있다. 헌데, 정상적으로 값이 들어가 있음에도 불구하고 그 값을 찾지 못한다. 예) 아래와 같이 리스트와 배열이 있다. List total : 전체 목록. 이 리스트 안의 값은 1부터 30까지 존재한다 String[] spec : 특정 목록. 이 배열 안에는 (1, 5, 7, 25) 가 순서대로 들어있다. for (String s : total) { if (Arrays.binarySearch(spec, s) > -1) } System.out.println(s); // spec 안에 있는 값일 경우 print } } 위와 같은 코드를 실행시켰을 때, 1, 5..
발생일: 2009.06.03 문제: 타 시스템의 데이터를 가져와 쓰기 위해 오라클에서 Clob를 Varchar2 로 추출해내려고 한다. 해결책: 탐이 대답해준 Converting CLOBS to VARCHAR2 컬럼을 참고하자. 오라클 내장 함수인 dbms_lob.substr( clob_column, for_how_many_bytes, from_which_byte ); 를 사용하면 되겠다. 참고로 varchar2 의 최대 크기는 32k이다. 실질적으로 32k 보다 큰 CLOB 데이터를 VARCHAR로 변환해 쓰려면, 다른 함수를 정의해 써야하겠다~
발생일: 2009.05.29 문제: 인기도를 파악하여 현재 가장 인기있는 게시물을 보여주고자 한다. 단순히 조회수 순으로 보여주자니 한때 조회수가 많았던 데이터가 너무 오랫동안 탑을 차지한다. 뭔가 다른 효과적인 방법이 없을까? 해결책: 세계적인 사진 공유 사이트인 flickr에서는 사진의 인기 정도를 Interestingness 라고 정의했다. Interestingness. 즉 그 시점에서 얼마나 인기있는가? 재미있는가? 를 묻는 것이다. 그럼 어떻게 interestingness를 측정해야 할까...? 인기도를 적용하려는 사이트의 특성마다 다르겠지만, interestingness의 측정에 대해 토의한 포럼을 보니 좋은 아이디어가 많다. 생각을 보태서 정리해보면... Interestingness에 영향을..
발생일: 2009.05.26 문제: 검색하고자 하는 컬럼에 인덱스를 추가하였는데도 뚜렷한 성능 향상이 보이지 않는다. 검색 시 인덱스를 타지 못하고 있는 건 아닐까? 해결책: 데브피아의 전문가 컬럼 'INDEX 과연 달면 빠른가?'에 명확하게 설명되어 있다. (IE에서만 보인다.) 요약하자면 아래와 같이 인덱스가 달린 컬럼에 변형이 있을 경우, 인덱스가 정상적으로 적용되지 않는다. 인덱스 컬럼에 변형이 일어난 경우 WHERE TO_CHAR(HIREDATE,'YYYYMMDD') = '19980518'; WHERE SALARY + 1000 > 100000; 내부적인 변형이 일어난 경우 (EMP_ID를 Number로 인식한다) WHERE EMP_ID = 200383; NULL을 비교하였을 경우 WHERE JO..
발생일: 2009.05.26 문제: 웹어플리케이션 백그라운드에서 정기적으로 컨텍스트의 정보를 가져와 DB에 업데이트하는 Daemon Thread가 돌고 있다. (어플리케이션의 백그라운드에서 작동하는 Daemon Thread 참조) 헌데, 로컬에서 작업 중 동적으로 컴파일 하게 되면, Daemon Thread에서 호출하는 매니저 클래스가 없다며 NoClassDefFoundError 가 발생한다. classpath가 잘못된 건 아니고, 또한 분명히 class는 정의되어 있는데 말이다. 해결책: 클래스 로더가 해당 클래스를 로딩할 때에 class 파일을 찾을 수 없다는 예외다. 보통은 클래스 패스가 제대로 정의되어 있지 않을 때 발생한다. (자바서비스넷의 ClassNotFoundException 과 NoCla..
발생일: 2009.05.15 문제: 브라우저별로 opacity를 적용하는 방법에 대한 정리가 필요하다. 해결책: 브라우저별 opacity를 적용하는 방법에 대해 매우 깔끔하게 정리되어 있는 사이트가 있다. 요약하자면, .opacity { -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; // IE-8 filter: alpha(opacity=50); // IE-7 opacity: .5; // all-browser } 이렇게 해주면 되겠다.
발생일: 2009.05.15 문제: prototypejs를 사용해 IE 에서 document.viewport.getDimensions 를 호출했을 때, 정상적으로 값이 표시되지 않고 0 으로 나온다. prototypejs의 버전은 1.6.0.2 이다. 해결책: prototypejs 1.6.0.2 버전의 버그이다. (rubyonrails의 버그에 대한 리포트를 참고하자) 이 경우, IE에서는 document.viewport.getDimensions() 대신 document.body.clientWidth 와 document.body.clientHeight 을 쓸 것을 권장한다.
발생일: 2009.05.09 문제: 게시판 전체 목록의 태그들을 각각 가져와 한 줄로 뿌려주려고 한다. 각 게시물에 해당하는 태그 목록을 각각 조회해 가져오자니 너무 비효율적이라서, 게시물에 해당하는 태그(여러 개의 row)의 값을 공백으로 구분으로 넣으려고 한다. 데이터베이스는 mysql을 사용한다. 해결책: mysql의 GROUP_CONCAT 함수를 사용하면 된다. GROUP_CONCAT(DISTINCT test_score ORDER BY test_score DESC SEPARATOR ' ') 와 같이 사용한다. mysql reference에 잘 설명되어 있다. 참고하자.