전체 글

초보 개발자의 지식 공유의 장
콜백 방식의 작업 완료 통보 자바스크립트를 조금해보면 콜백방식이 익숙할 것이다. 자바에서도 스레드 작업이 완료되면 특정 메소드를 자동 실행할 수 있는 콜백 방식을 이용할 수 있다.블로킹 방식 콜백방식ExecutorService는 콜백을 위한 기능을 제공하지 않는다. Runnable 클래스를 작성할 때 콜백 기능을 구현할 수 있는데 java.nio.channels.CompletionHandler를 이용해서 구현할 수 있다.(NIO 패키지 안에 존재, 비동기 통신에서 콜백 객체를 만들때 사용된다.) CompletionHandler callback = new CompletionHandler(){ @Override public void completed(V result, K attachment){} // 작업이..
블로킹 방식의 작업 완료 통보_2 작업 처리 결과를 외부 객체에 저장 스레드가 작업 처리를 완료하고 외부 Result 객체에 저장하면, 애플리케이션에서 Result 객체를 사용하여 작업을 진행할 수 있다. (대개 Result 객체는 공유객체가 되어, 두 개 이상의 스레드 작업을 취합할 목적으로 이용된다.)ExecutorService.submit(Runnable task, V result) 에서 V가 Result 타입이 된다. class Task implements Runnable{ Result result; Task(Result result){this.result = result;} @Override public void run(){ // 작업내용, result 저장 } } class Result{ //..
오늘의 삽질 일기.어제 쓴 내용과 비슷한 일을 하고 있었다.작업 내용은 내가 만든 프로젝트를 jar파일로 묶어서 실행하는 것이다.어제 글을 쓴거 처럼 생성된 jar는 pom.xml의 모든 dependency library를 포함하였으며, manifest도 만들어서 실행가능한 jar 상태이다. 문제는.. 리소스를 읽을 때 파일을 찾지 못한다는 것이다.project 내부에 있는 src/main/resources/font 폴더를 읽어야하는데, jar가 묶이기 전인 이클립스 프로젝트에서는 잘 실행이 되지만, jar파일이 패키징한 뒤 실행하면 font폴더를 찾지 못하는 것이다. (이것 또한 옛날에 겪은 내용인데, 적어놓지 않아서 까먹음..) 내용은 아래와 같다.getClass().getResource("font"..
블로킹 방식의 작업 완료 통보_1 ExecutorService의 submit() 메소드는 Runnable, Callable 작업을 스레드 풀의 작업 큐에 저장하고 즉시 Future 객체를 리턴한다.Future 객체는 작업이 완료될 때까지 기다렸다가(블로킹되었다가) 최종 결과를 얻는데 사용된다. (그래서 Future 객체를 지연 완료(pending completion)객체라고 한다.)Future의 get() 메소드를 호출하면 스레드가 작업을 완료할 때까지 블로킹되었다가 작업을 완료하면 처리 결과를 리턴한다. (블로킹을 사용하는 작업 완료 통보 방식) 주의할 점은 Future의 get() 메소드는 스레드가 작업이 완료될때까지 블로킹되므로 다른 코드를 실행할 수 없다는 것이다. 따라서 get() 메소드를 호출..
2019.03.14 - [프로그래밍 노트/JAVA] - [JAVA] 블로킹 방식의 작업 완료 통보_1 (스레드풀_2) 2019.03.16 - [프로그래밍 노트/JAVA] - [JAVA] 블로킹 방식의 작업 완료 통보_2 (스레드풀_3) 2019.03.16 - [프로그래밍 노트/JAVA] - [JAVA] 콜백 방식의 작업 완료 통보 (스레드풀_4) 스레드풀 병렬 작업 처리가 많아지면 스레드 수가 증가되고 그에 따른 스레드 생성과 스케줄링으로 인해 CPU가 바빠져서 메모리 사용량이 늘어난다. (애플리케이션 성능 저하) 따라서 스레드의 폭증을 막으려면 스레드풀(ThreadPool)을 사용해야 한다. 스레드 풀은 작업 처리에 사용되는 스레드를 제한된 개수만큼 정해 놓고 작업 큐(Queue)에 들어오는 작업들을 ..
스레드 그룹 스레드 그룹(ThreadGroup)은 관련된 스레드를 묶어서 관리할 목적으로 이용된다. JVM이 실행되면 system 스레드 그룹을 만들고, JVM 운영에 필요한 스레드들을 생성해서 system 스레드 그룹에 포함시킨다. 그리고 system의 하위 스레드 그룹으로 main을 만들고 메인 스레드를 main 스레드 그룹에 포함시킨다. 모든 스레드는 그룹을 갖으며 스레드 그룹을 명시적으로 선언하지 않으면 자신을 생성한 스레드와 같은 그룹에 속한다. public class ThreadInfoExample { public static void main(String[] args) { AutoSaveThread autoSaveThread = new AutoSaveThread(); autoSaveThrea..
오늘은 많은 것을 하였다.일단 svn server를 설치하였다. (다른 사람이 나의 컴퓨터에서 코드를 관리하기로 했기 때문이다.. 아주 private 하다..)그리고 font와 관련한 공부를 했다. 왜냐하면 PDF를 생성할 때 font 가 중요하기 때문이다. 어쩔때는 한글이 깨지고 어쩔때는 안깨지고.. (영어는 당근 안깨진다..)그래서 시스템에 기본적으로 셋팅되있는 font를 출력하는 프로그램을 만들었다.. (윈도우와 리눅스에서 default로 바라보는 폰트의 경로도 궁금했고, 무슨 font를 갖고있는지 궁금했다..) 윈도우 환경이랑 리눅스 환경에서 PDF 생성 테스트를 하기 위해서 jar로 package하여 테스트를 하기로 마음을 먹었다.그런데.. jar로 패키징 처음부터 난관에 봉착했다.mvn pac..
PMD - 정적 코드 분석PMD(Programming Mistake Detector)를 프로젝트에 적용코드에서 발견된 문제를 보고 하는 오픈 소스 정적 Java 소스 코드 분석기Eclipse [Help] - [Install New Software] - https://dl.bintray.com/pmd/pmd-eclipse-plugin/updates/ 주소 입력 후 다운PMD를 실행하면, 우리가 신경 못쓴 변수명(코딩 컨벤션)이라든지 안티패턴들을 잡아줌. 우리는 사람인지라.. 항상 실수를 한다. 코드를 짜고난 후 정적 코드 분석을 통해서 내가 빼먹은 부분이 있는지를 보는 습관을 들이면 좋을 것 같다는생각을 했다..
PDF 생성과 관련해서 MultiThread 테스트가 필요하였다.테스트 대상이 singleton 이고, @Inject를 하는 부분이 많이 존재하여서 test용 context.xml 를 새로 정의하여 junit을 돌렸다.Thread 생성하는 방법은 기존 Java에서 코딩하는 방식으로 하고 junit을 실행하였는데,, !!!! 먹통!! 이되는 현상이 발생했다..먹통이라하면.. 그냥 반응이 없이 끝나버리는... 로그를 보면 각기 다른 Thread가 생성된 것으로 보이는데 바로 destroy 됬다. (아직도 원인을 찾아보진 못했다.. 나는 일이 많아서...ㅠㅠ) 그래서 MultiThread 테스트 관련해서 구글에 검색을 해보니 goroboUtils 라는 라이브러리를 발견했다.TestRunnable 을 구현해서 ..
AES256 암호화시, Exception이 발생 암호화 확장 정책과 관련된 exception으로 아래 같은 이슈가 존재한다. [자바 암호화 확장 정책 설정 이유] Java의 기본 정책으로 JCE가 128비트만 지원하여 16바이트(128bit)키가 넘어갈 시 오류가 발생 (미 통상법에 의해 자국내에서만 AES256 방식 허용) 오류내용 Unsupported keysize or algorithm parameters. 또는, Illegal key size or default parameters. AES256를 사용하기 위해선 무제한 강도 정책(Unlimited Strength Jurisdiction Policy)을 설정해줘야함 [자바 암호화 확장 정책 설정 방법] jdk 1.6 첨부된 jce_policy-6...
깡냉쓰
평범한 개발자 노트