본문 바로가기

컴퓨터활용/자바

eclipse feature.xml 이클립스 플러그인들을 Update 하게 되면 그 히스토리와 최신 적용된 버젼이 feature.xml 에 보관된다. Update 사이트의 URL도 기록되어 있기 때문에 어디에서 다운로드 받게 되는 지 확인할 수 있다. 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281.. 더보기
jarsigner & keytool 이용한 jar 사인 처리 jar 파일을 작성하고 이것을 웹브라우저에서 실행을 할 때 공인된 인증기관에서 인증한 프로그램인 지를 체크하고 있다. 공인된 기관에서 인증된 사인정보가 없을 경우에는 alert 창이 뜬다. 개발단계에서는 공인인증을 받기가 여의치 않으므로 임시방편으로 사인을 해서 프로그램을 돌려야 한다. jar 파일에 대한 사인(sign) 방법에 대하여 정리했다. http://docs.oracle.com/javase/tutorial/security/toolsign/step4.html > Generate Keys If a code signer does not yet have a suitable private key for signing the code, the key must first be generated, along .. 더보기
Scene Builder (JavaFX UI 디자이너) javaFX 를 개발하는데 일일이 화면을 코딩으로 개발한다면 보통 삽질이 아닐 수 없다. 그래서 UI를 쉽게 디자인할 수 있는 툴이 있을 것이라고 생각해서 찾아 보니 Scene Builder 라는 것을 제공하고 있었다. Scene Builder 2.0 다운로드는 java SDK 다운로드 페이지의 Additional Resources 탭에서 다운로드 할 수 있다. 1 Using Scene Builder with NetBeans IDE This chapter describes how to download and install NetBeans IDE, use it to create a new JavaFX FXML project, start Scene Builder from within the IDE, and .. 더보기
signapk 사용 커스텀롬에 대한 sign 을 이런 저런 방법으로 해 봐도 잘 안 된다. sign은 정상적으로 되었다고 메시지가 나오지만 실제로 install 을 해 보면 signature verification fail 메시지가 나오는 것이었다. 그러다가 Stane 이 만들어 올려 놓은 sign 툴을 이용해서 sign 했을 때 정상적으로 넘어가는 것을 확인했다. Stane은 어떤 방식으로 sign을 하는 것일까? 1. Download After downloading/cloning repository to desired folder run: > git clone https://github.com/Stane1983/linux-slgntool 2. 설치 > sign_zip install After confirmation, p.. 더보기
FTP FILE UPLOAD & DOWNLOAD Java EXAMPLE CodeJava.net 에 샘플이 있어서 응용해 봤는데 쉽게 구현이 되었다. 다음에 다시 구현할 일이 있으면 그대로 베껴 쓰기 위해 스크랩해 둔다. import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.apache.commons.net.ftp.FTP; import org... 더보기
HttpURLConnection 할 때 setConnectTimeout 해 줘야 함 프로젝트 도중에 거래가 hang 걸리는 현상이 발생되어서 당황했다. 원인을 분석해 본 결과 소켓 통신하는 루틴에서 상대방 서버의 사정으로 접속이 지연될 때 timeout 처리가 제대로 되지 않아서 발생되었다. 처음에는 DB 쪽 lock 인 줄 알고 transaction 처리를 잘못 해서 나는 것으로 보고 접근했으나 원인은 엉뚱한데 있었던 것이다. 그래서 urlConnection.setConnectTimeout(); 메소드에 1초로 세트했다. 그랬더니 바로 지연 없이 exception 으로 떨어졌다. 자라보고 놀란 가슴 솥뚜껑 보고 놀란다고 하는 김에 readTimeout 도 아래와 같이 설정했다. urlConnection.setReadTimeout(TIMEOUT_VALUE); 이 때 설정하는 시간은 mi.. 더보기
이클립스에서 한글 깨지는 파일 처리 프로젝트에서 이클립스를 사용하고 있는데 소스는 UTF-8 로 저장하는 것을 표준으로 하고 있다. 그런데 여러명이 개발하다 보면 다른 문자셋으로 저장된 소스가 끼어 들어오게 된다. 그럴 경우 한글이 깨져서 보이지 않게 된다. 이런 문서들은 외부툴 (예를 들어 울트라에디터) 로 문자셋을 변환하여 저장을 해 주면 이클립스에서도 제대로 보이게 된다. 이클립스에서 한글이 깨져 보이는 파일이 아래와 같이 있다고 한다면 울트라에디트 같은 곳에서 파일을 열면 한글이 잘 보이게 된다. 그러면 "다름이름으로 저장" 기능을 이용하여 새로 저장한다. 다른이름으로 저장 하여 원래 파일을 엎어쳐 버린다. 저장할 때 문자셋을 반드시 원하는 것으로( 나같은 경우 utf-8) 지정한다. 저장이 끝나면 다시 이클립스에서 열면 한글이 제.. 더보기
텍스트 파일을 읽는 샘플 프로그램 텍스트 파일을 읽는 샘플 프로그램 public String readFile(String filename) { String string=""; //reading try{ InputStream ips = new FileInputStream(filename); InputStreamReader ipsr = new InputStreamReader(ips,"euc-kr"); BufferedReader br = new BufferedReader(ipsr); String line; while ((line=br.readLine())!=null){ //System.out.println(line); string += line+"\n"; } br.close(); } catch (Exception e){ System.out.p.. 더보기
키보드로 값을 입력받아서 출력 키보드로 값을 입력받아서 출력하는 샘플 프로그램 import java.io.*; class TestMain { public static void main(String[] args) { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); String name = ""; System.out.print("Enter your name: "); try { name = in.readLine(); } catch(Exception e) { System.out.println("Caught an Exception!"); } System.out.println("Hello " + name + "!"); } } 실행 결과는 다음과 같다. Enter.. 더보기
JEUSMain.xml 과 web.xml web.xml 서블릿리스너, 서블릿, 서블릿매핑, 서블릿필터, 서블릿필터매핑 등이 web.xml 에 정의되어 있다. 서블릿매핑 : URL 로 들어오는 이름에 따른 정의를 하고 이에 따라 실행될 서블릿을 지정한다. HttpServiceStartpoint gpsb.service.http.HttpServiceStartpoint 1 HttpServiceStartpoint /service/* 이 예제에서 보듯이 /service/ 이라는 URL 로 들어오는 모든 요청은 gpsb.service.http.HttpServiceStartpoint 라는 서블릿이 받게 된다. 서블릿 리스너와 필터에 대한 설정은 아래와 같다. 프로젝트에 따라서 서로 다르겠지만~~ gbsb.service.http.HttpServiceStartp.. 더보기
ORA-00604 나 ORA-01000 오류가 날 때 java.sql.SQLException: ORA-00604: 순환 SQL 레벨 1 에 오류가 발생했습니다ORA-01000: 최대 열기 커서 수를 초과했습니다 위와 같은 오류가 날 때는 Statement 나 ResultSet 을 open 하기만 하고 close 가 없어서 나는 오류 입니다. 특히 while, for 같은 루프문에서 적절한 위치에서 close 를 하고 있는 지 확인할 필요가 있습니다. 아래와 같은 샘플 코드가 있다고 했을 때 rsColumns.close(); 를 누락시켰을 때 위와 같은 오류가 발생되었다. 실제 코드는 while loop 가 길어서 ResultSet 닫는 것을 놓쳐도 눈에 잘 띄지 않아서 오류를 찾는데 어려움이 있었다. ResultSet rsTables = dbMeta.get.. 더보기
JVM Garbage Collection 순간 포착 자바머신에서는 일정시간이 지나면 GC(Grabage Collection)라는 작업을 해 준다. 개발자로서는 일일이 메모리를 해제하지 않아도 된다는 생각에 마음껏 오브젝트를 생성해서 사용하겠지만 이정도의 출렁임임을 안다면 경계해야 할 것이다. 그래프에서 보듯이 이 순간에 시스템의 성능이 현저히 떨어지는 현상을 경험하게 된다. (거의 50%로 떨어짐) 안정적인 거래가 보장되어야 하는 금융거래에서 이런 출렁임은 정말 끔찍한 경우가 될 것이다. JVM 을 띄울 때 heap memory를 충분히 잡아 준다하더라도 이런 출렁임의 시간간격을 줄일 수 있을 뿐이다. heap메모리가 적을 경우 이런 멈칫 하는 출렁임을 더 자주 경험하게 되는 것이다. 이런 GC 작동은 예측할 수 없는 순간에 갑자기 찾아온다는 것이 치명적.. 더보기
java 문자열 처리 C에서는 strcpy 를 쓰면 간단히 해결될 일을 java 에서는 아주 어렵게 해결한다. 아직 자바가 익숙하지 않아서 인가?일단 String 은 char 의 배열이 아니라 객체 이므로 C 에서 처리 한글자를 지정해서 바꿀 수 없다. toCharArray() 메소드를 통해서 char[]로 변환한 다음에라야 C에서처럼 한글자를 바꾸거나 할 수 있다. 아래 로직은 매번 째 숫자에 정해진 가중치를 곱한 후 누적 합한 다음에 10으로 나눈 나머지를 구하여 체크디지트를 한자리 만드는 로직이다. class test { public static void main(String args[]) { String ticket1 = "123456789012"; String ticket2 = " "; int i, sum, rema.. 더보기
Transaction rolled back because it has been marked as rollback-only 오픈을 앞둔 시점에 transaction 관리를 강화하기 위하여 transaction.xml 에 아래와 같은 AOP 를 추가하였다. 여기서 ${service.basePackage} 는 profile.properties 에 정의 되어 있다. 파일명이 Service로 끝나는 파일은 일괄 적용한다는 의미이다. 물론 이것의 구현체도 대상에 포함된다. 그랬더니 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back because it has .. 더보기
중복 로그인 방지 로직 중복 로그인을 체크하는 로직을 구현하는 미션이 프로젝트 마지막 단계에 주어졌다. 중복 로그인했을 때 먼저 로그인한 사용자가 세션 아웃 되는 것을 표준으로 정하였다. 이 때 최종 접속자의 IP와 로그인시각을 안내 받아야 한다는 전제조건이 있다. 스프링에서 제공하여 security 기능을 이용하여 구현해 보고자 했으나 생각대로 잘 되지 않았다. 스프링 설정으로 중복 로그인을 체크할 수는 있었으나 최종 접속자의 IP와 접속시각을 보여주고자 하는 곳에서 난관을 만났다. 세션이 invalid 되었기 때문에 세션아이디를 비롯한 사용자아이디, 접속IP등 세션에 보관되어 있는 정보가 싸그리 사라져 버린 상황이었기 때문이다. 그래서 결국 로그인 히스토리를 보관하고 있는 테이블에서 정보를 추출하여 중복로그인을 체크하도록 .. 더보기
비밀번호를 난수로 발생하는 로직 (개인정보보호 지침) 프로젝트에서 비밀번호는 개인정보 보호 차원에서 아래와 같은 지침을 하달받았다. ■ 개인정보보호 지침(관리계획)에 의거 적용 더보기
JEUS 부팅 확인 하기 1. JEUS 프로세서 #>ps -ef | grep java | grep jeus jeus4 7745 7744 15 09:08 pts/0 00:00:10 java -server -Xbootclasspath/p:/tmax/jeus4/lib/system/extension.jar:/tmax/jeus4/lib/system/jaas.jar -classpath /tmax/jeus4/lib/system/bootstrap.jar -Djeus.session.version=SOCKET -Djava.library.path=/tmax/jeus4/lib/system::/tmax/jeus4/lib/system:/tmax/jeus4/lib/system:/tma jeus4 7804 7745 20 09:08 pts/0 00:00:12.. 더보기
JEUS 에서 MSSQL 서버 JDBC 연결 JEUS에서 MS SQL 서버 2005 로 접속할 경우가 있어서 인터넷을 뒤져 보았더니 다음과 같은 정보를 수집할 수 있었다. 1. JEUSMain.xml 설정 others 접속명 com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource ConnectionPoolDataSource DB명 포트 아이피 사용자 비밀번호 10 20 2 3600000 그리고 $JEUS_HOME/lib/datasource/ 에 sqljdbc4.jar 를 복사해 넣는다. jboot 할 때 이 jar가 로딩된다. 특정 컨터이너에서만 사용하게 되어 별도로 지정하고 싶다면 JEUSMain.xml 의 해당 컨테이너 설정 부분에 를 지정할 수도 있다. container4 4 /user.. 더보기
서버 CPU 개수 구하는 jsp 더보기
javacore 파일 찾기 java 어플리케이션에서 코어덤프가 발생되면 javacore 파일이 생성된다. 이 파일을 분석하여 무슨 이유로 프로그램이 죽었는 지 유추해 볼 수 있다. #:[/user01/app]find . -name '*javacore*' ./QIS/Repository/hudson/jobs/ERP.nightly/workspace/javacore.20120203.041517.8389010.0003.txt ./QIS/Repository/hudson/jobs/ERP.nightly/workspace/javacore.20120203.041527.8389010.0006.txt ./QIS/Repository/hudson/jobs/ERP.nightly/workspace/javacore.20120203.041537.8389010.0.. 더보기
java script 에서 한글 포함 문자열의 substring 함수 자바에서는 bytes 로 변환하여 문자열을 핸들링할 수 있지만 java script 에서는 getBytes 메소드가 없어서 곤란하다. 완벽하지는 않지만 비슷하게 동작하는 substring 함수를 만들어 보았다. 이 코드는 X-Platform 이라는 UI툴에서 작성된 예제이므로 일반 표준 java script 와는 문법이 다를 수 있다. function Button02_onclick() { trace( fn_subString( edt_inputval00.value, Edit00.value, Edit01.value )); } // 문자열의 길이를 구하는 함수 function fn_strlen(str) { var len = 0; for(var i=0;i 128) ? 2 : 1; } return len; } /.. 더보기
jsp 에서 unix 명령 실행하기 jsp에서 unix 의 command 를 직접 실행시키는 방법을 찾고 있다가 다음과 같은 글을 발견했다. OS에서 명령을 실행할 수 있어야 하므로 웹유저로 실행권한이 있어야 합니다. [출처] JSP에서os 명령 실행하기|작성자 어라 또다른 의견으로는 server.jsp 파일에서 Runtime.exec() 메소드를 사용하여 실행할 수 있다는 자료가 있군요. 반대로 서버쪽이 아닌 client 쪽에서 html 을 통해 직접 어떤 exe 파일을 실행시키고자 한다면 다음과 같이 할 수 있다. 그러나 이 경우 exe 파일의 classid 를 알아야만 한다는 것이다. exe 파일이 아니더라도 ocx 타입 activeX 파일도 실행시킬 수 있다. 아래와 같이 html 을 만들면 화면이 열리자 마자 바로 실행되어 버릴 .. 더보기
java script 로 페이지를 auto reload 시키기 java 스크립트 중에 오토 리로드 하는 스크립트를 이용하여 기존 홈페이지를 방문한 사람을 신규 홈페이지로 자동으로 넘어가도록 해 놓았다. 안녕하세요? 영천사과농장 홈페이지를 방문해 주셔서 감사합니다. 홈페이지를 daeguapple.com 으로 옮겼습니다... 위의 예제는 3초 후에 지정된 URL로 페이지가 넘어가게 된다. 더보기