본문 바로가기

Server Oriented/Java & JSP

(76)
기상청 초단기예보 API 와 날씨누리 홈페이지 강수량 차이.. apis.data.go.kr 를 통한 기상청 초단기 예보용 API 데이타와 날씨누리 홈페이지에 나오는 강수량 차이가 특정 시점 기준으로 너무 다르네요. 기상청 홈페이지에 표시되는 날씨 정보가 가장 최신이고, data.go.kr 로 API 되는 날씨 정보가 10분~20분 정도 늦게 적용..
PreparedStatement 의 clearParameters() 는 불필요..? 하나의 PreparedStatement 로, 여러개의 쿼리를 실행(또는 하나의 쿼리로 파라미터를 바꾸면서 여러번 실행)할 때.. 이전에 세팅했던 파라미터를 모두 클리어 하는 용도입니다만.. 필요가 없을듯 하네요. 물론, 넣어도 상관은 없는데.. 동시 사용자가 갑자기 많아진다 했을 때, 이게 여러번 실행되면.. 실행되지 않았을 때에 비해 아무래도 그 만큼의 퍼포먼스를 잡아 먹게 됩니다. 물론, GC 를 위해 사용한다는 분도 있던데, 불필요한 것은 마찬가지. 기술되는 순간 시스템은 그만큼 느려진다는.. 다만, 파라미터 갯수가 바뀌는 시점에서는 사용해야 함.. ㅠ 다른 의견 있으시면, 댓글 바랍니다. #1 finally 에서 각종 요소를 초기화 할 때..? ... try{ ... }catch(Exception..
오라클 varchar2(4000) 과 한글의 오묘한 만남..? 원문1 : https://javafreak.tistory.com/98 원문2 : http://egloos.zum.com/realcool/v/2585694 SQLInjection 을 막기 위해, PreparedStatement 를 사용하는 것이 기본이겠죠. DB 칼럼에 varchar2(4000) 이 있고, 한글 2000 자를 insert 또는 update 하려 할 때.. 에러가 발생합니다, 글자를 너무 많이 입력했다공.. 이것은, 오라클이.. setString() 을 사용할 때 한글을 UTF-8 로 자동변환 하면서, 한글 1글자를 3bytes 로 인식하기 때문이라네요. 이걸 JDBC 버그라 말하기도 하는데, Statement 를 사용할 때는 setString() 으로 진행해도, 한글 2000자가 잘 들어가..
Collections 안에 다른 Collections 을 넣었을 때의 GC * Hashtable 안에 다른 Hashtable 을 넣었을 때의 GC (List 안에 Hashtable 을 넣는 것이 바람직할듯..) Hashtable ht1 = null; Hashtable ht2 = null; try{ ht1 = new Hashtable(); ht2 = new Hashtable(); ht2.put("test2","test3"); // ht2 에는 문자열인 "test3" 세팅 ht1.put("test1, ht2); // 자, ht1 에 ht2 를 넣었으니... }catch(Exception e){ }finally{ System.out.println("+++.ht1:"+ht1); // +++.ht1:{test1={test2=test3}} // 여기서는 테스트를 위한 것이지만, 실전에선 ..
ORA-22990: LOB 위치는 트랜잭션을 걸칠 수 없습니다 LOB(Longraw, Blob, Clob) 등을 select ... for update 등등의 방법으로 DB 에 넣으면서 Stream 을 flush() 할 때.. 아래와 같이, flush() 가 commit() 뒤에 존재하면 오류. try{ ... conn.commit(); }catch(Exception e){ ... }finally{ ... stream.flush(); } 예외 상황이 발생하더라도 flush() 하고자 finally 에 넣겠다는 의도였겠지만.. DB 상의 LOB 처리시에는 try 문 안에서 flush() 한 다음 commit() 하고 finally 에서 close() 하는 것이 맞음.
PreparedStatement SQL 문에 ? 를 적용할 수 없는 것 이를테면, String sql = "select no, name from table_name where no = '32' "; 라는 쿼리가 있다고 하자(물론, 정상 작동한다고 가정한다).. 우리가 익히 보아 온 PreparedStatment 의 SQL 문은 아래와 같은 것이다. String sql = "select no, name from table_name where no = ? "; 그러면, DB table 의 column 명 대신에 ? 를 아래와 같이 사용해 보면 어떨까? String sql = "select no, name from table_name where ? = ? "; 예외를 throw 하지도 않으면서 에러가 난다.. try ~ catch 에 잡히지도 않는다. 이제, DB table 명 ..
header 의 Referer 가 null 인 경우 request.getHeader("Referer") 가 null 인 경우.. - 주소창에 URL 입력하고 들어온 경우 null 도메인은 기억하고 있다가 입력할 수 있겠지만, 특정 URL 을 입력하기는 어려울텐데.. - '즐겨찾기' 나 '북마크' 된 경우 null 이 케이스가 제법 많을 듯.. - 네이버 오픈 메인 서비스 링크 타고 들어오면 null 파라미터에 napp=mysection 와 각종 카운터가 들어 있음 - 화면을 새로고침..? 새로고침 하기 전에 Referer 가 null 이었으면, 새로고침 해도 null 새로고침 하기 전에 Referer 가 null 아니었으면, 새로고침 해도 null 아님 - window.open() 으로 열리는 경우 null - 해킹툴..? - ajax 호출시 not nu..
크롬에서 로그인시 세션 만료 에러 (iframe 때문?) 크롬의 행보와 매번 부딪히게 되네요.. 크롬이 http 를 지양하고, https 를 지향한다는 것은 이미 알려진 사실이구요. 최근에 크롬이 CSRF 를 이유로 iframe 을 사용할 때 세션을 끊어먹는(실제로는 쿠키값을 복사하지 않는) 만행(?)을 저지르고 있습니다. 그냥 웹사이트를 https 로만 돌게 하지 왜, 크롬의 만행이라고 하느냐 하면요.. 동일 도메인임에도 쿠키값을 복사하지 않아서 그렇습니다. ^^; 나는 전혀 문제 없는데, 왜 문제를 삼느냐구요..? 사실인즉 이렇습니다. 예전에는 모든 웹사이트가 http 로 설계되었습니다. 그러다가 보안이 강조되다 보니 (우리나라에선 KISA 의 영향이 크죠), 로그인 부분에 https 를 사용하게 되었구요. 그런데, http 화면에서 https 를 사용하다..