일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- RSA
- 한글조사
- 자바
- String
- Executor
- ORM
- AES
- mac
- PKCS
- 한글조사처리
- Postman
- DAMO
- JCE
- StringUtils
- PKCS#8
- 암호학
- ACAP
- Freemaker
- IPTV
- Executors
- xlet
- Instrumentation
- Runnable
- Java
- Log4J
- Callable
- sha1
- 이클립스 플러그인 개발
- 자바 암호화
- date
- Today
- Total
목록Java (54)
오늘은 어디로 갈까...
프로그램은 실행되면서 저장할 데이터가 있으면 메모리의 일정 공간을 할당받아서 사용하게 된다. 그런데 이 데이터가 더 이상 사용할 필요가 없는것이면, 사용항 메모리를 반납해야주어야한다. 자바는 친절히도 메모리 회수를 자동적으로 해준다. 즉, JVM(Java Virtual Machine)의 Garbage Collector란 놈이 사용하지 않는 메모리를 알아서 회수해주는것이다. 이 회수에 대한 행위를 GC(Garbage Collection)이라한다. JVM의 메모리 영역은 크게 Heap Area과 Non-Heap Area으로 나눌수 있다. 1. Heap Area 힙 영역(Heap Area)은 동적으로 할당하여 사용할 수 있는 메모리 영역으로서, 주로 실행중에 생성되는 객체들이 저장된다. 이 힙 영역(Heap ..
인터넷 뱅킹을 하시는 분이라면 대부분 공인인증서를 가지고 있다. 이 공인인증서를 가지고 전자서명을 해보도록하자(전혀 쓸데없는 일이긴 하다 ^^;) 필자의 경우 yessign에서 발급한 은행용 공인인증서를 가지고 있는데 그 경로는 C:\NPKI\yessign\USER\아래폴더... 에 위치해 있다. 그 디렉토리에 보면 CaPubs, signCert.der, signPri.key 세 파일이 존재한다. CaPubs은 무슨 파일인지 잘 모르겠다. signCert.der는 공인 인증서 파일이고, signPri.key는 개인키 파일이다. (der은 인증서 저장시 바이너르 형태로 저장하기 위한 포맷이고, pem은 문자열로 표현가능한 데이터로 인코딩(BASE64같은..)한 포맷이다.) 한국정보보호진흥원(http://w..
RSA(Rivest Shamir Adleman)는 현재 공개키 암호화방식으로 가장 널리쓰이는 알고리즘이다. 1977년에 Rivest, Shami,r Adleman이라는 세 명의 수학자들에 의해 제안됭 방식이다. 이 알고리즘은 두 개의 큰 소수를 이용한다. 이 수들의 추가(?) 연산을 통해 공개키와 개인키를 구성해서 사용하는 방식이다. 밀러-라빈 판정법, 유클리드 알고리즘, 빠른 법-지수 연산 알고리즘만 알고 있으면 간단히 구현이 가능하지만 귀찮아서 그냥 제공해주는것을 사용하겠다. (BigInteger 클래스를 사용하면 아주 간단히(?) 구현이 될지도....) package test.cipher; import java.security.InvalidKeyException; public class RsaTes..
오늘은 MD5와 SHA1에 대해서 간단히 알아보기로 하자. MD5(Message-Digest algorithm 5)는 말그대로 메시지 축약 알고리즘으로서 128비트의 해쉬를 제공한다. RFC-1321에 정의되어 있으며, 현재는 파일 무결성 검사용으로 많이 쓰이고 있다. 보안 관련 용도로 사용하기도 했지만, 현재 암호화 결함이 별견되어서 SHA1같은 다른 알고리즘을 사용하는것을 권장하고 있다. (MD5의 결함을 이용해서 SSL 인증서를 변조가능하다는것이, 2008년 12월에 발표되기도 했다. http://www.win.tue.nl/hashclash/rogue-ca/) SHA(Secure Hash Standard)는 암호학적 해쉬 함수들을 모아놓은것으로서 SHA-0, SHA-1, SHA-2(SHA-224, ..
MySQL에는 PASSWORD(str)이란 함수가 있다. 암호(?)를 암호화(?)해주는 함수이다. 예전에 MySQL에 있는 데이터를 Oracle를 변환하는 작업을 한적이 있었는데, 이 PASSWORD()로 암호화(?)되어 있는 놈들이 골치거리였다. MySQL을 사용한다면 sql문에 PASSWORD() 함수를 사용해서 값을 비교하면 되는데, Oracle에는 그 기능(?)을 하는게 없었다. 더군다나 PASSWORD() 함수의 알고리즘도 몰랐던터라, 수 많은 번뇌와 좌절속에서 방황을 했던 그때를 생각하면 한숨만 나온다. 현재 PASSWORD()는 OLD_PASSWORD()와 PASSWORD()로 나누어져있다. MySQL 4.1이전에 사용하던 PASSWORD() 함수가 OLD_PASSWORD()란 함수로 이름이..
자바는 친절하게도 암호화 및 메시지 검증 코드를 구현해주는 클래스를 제공해준다. JCE(Java Cryptography Extension)란 이름의 프레임워크가 바로 그놈이다. J2SE 1.4 이후부터는 JCE 1.2.2가 기본적으로 포함되어 있어서 별다른 라이브러리를 추가해주지 않아도 사용할 수 있다. 초기 버젼인 JCE 1.2는 미국 보안법(?)인가에 걸려서 국내에서는 사용할 수가 없었다. (무기밀매와 똑같은 처벌을 한다는 소문이..) JCE 1.2.1이 나오면서 제한이 풀어져서, 세계적으로 많이(?) 사용하게 되었다. 그런데 이 JCE 1.2.1 버전의 자체 디지털 서명이 2005년 7월 27일쯤인가 만료가 되서, 2005년도에 파란을 한번 일으킨적도 있다. (그럼 만료기간을 어떻게 알수 있을까? ..
비가 온다. 무심히 흘러내리는 저 빗방울들을 보면 인생의 덧없음이 느껴진다... 덧없음 하면 생각나는 단어는 volatile. 오늘은 비도오고 그러니 간단히 volatile 키워드에 알아보자. volatile 사전적으로는 1. 휘발성의, 2. 변덕스러운, 3. 덧없는, 순간적인 등의 의미를 가지고 있다. 아마 자바에서는 변덕스러운~ 뜻으로 쓰이는게 아닌가 싶다. 이 놈은 변덕쟁이라서 주의깊게 관찰하라~~ 뭐 이런뜻으로...(아님 말구.) 단일 쓰레드 환경에서, 혼자서 푹푹~ 찔러도 변덕을 잘 안부리지만, 멀티 쓰레드 환경에서, 여러명이 동시에 푹푹~ 찌르면 변덕을 부리는 놈이 있어서 만들어진(?) 키워드이다. 한마디로 말하자면 동기화를 해준다는것이다. 동기화 하면 생각나는것이synchronized 키워드..
요즘 이사준비로 정신이 없다. 왜이렇게 짐이 많은지.... 왠만한건 다 버릴려고 해도, 책이랑 문서는 이상하게 버릴수가 없다... 전혀 관리를 안해줬더니 곰팡이랑 동거를 시작해버린 종이들... 아 슬프다... ㅠㅠ 하지만, 더 슬픈것은... 짐 싸다 말구, 책들을 읽고 있는 나의 불쌍한 모습... 흑흑 ㅠㅠ 병이로다... 그 책들속에서 한장의 종이를 발견했는데, 거기에는 자바 코드가 있었다. 열심히 머리를 굴려본결과, 예전에 만든 로그 뷰어의 코드 같았다. (org.apache.log4j.net.SocketAppender를 응용해서, 다수의 서버에서 발생하는 로그를 한곳에서 모니터링하는 그런 프로그램이다.) 그리고 그 코드 옆에 chainsaw라는 낙서가 적혀있었는데... chainsaw? 전기톱? 저걸..
양력을 음력으로 변환하는 클래스를 만들어보자. 간단히 말해서 음력은 달을 기준으로 달이 지구 둘레를 한바퀴 도는 공전 기간을 달로 만든것이고, 양력은 태양을 기준으로 지구가 태양을 한바퀴 도는 공전 기간을 년으로 만듯것이다. 이 음력과 양력을 변환하는것은 천문학적인 복잡한 계산이 필요하다고 한다.(천문학이라서 천문학적인가...) 그래서 우리같은 범인들은 음양력 변환을 위해서, 아주 간단한 방법을 사용한다. 음력과 양력 기준일을 정해서 그 차이만큼 더하고 빼는것이다. 예를들면 양력 1991년 1월 1일은 음력 1900년 11월 11일(평달)이다. 그러면 양력 1991년 1월 3일은 음력으로 몇일일까? 음력 1900년 11월 13일(평달)일것이다. 양력에 2일을 더한것이나 음력에 2일을 더하면 그 값이 해당..
지난 시간에 배운 지식을 기반으로 날짜유틸 클래스를 만들어보자. 1. Date를 Calendar로 변환하기 /** * java.util.Date를 java.util.Calendar로 변환한다. * * @param date * @return */ public static Calendar toCalendar(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar; } - 지난 시간에 배운거라서 별로 어려운게 없다. 2. 년, 월, 일, 시, 분, 초를 입력받아 날짜형(Date)으로 만들기. /** * 년, 월, 일, 시, 분, 초를 입력받아 날짜형(Date)으로 변환한다. * * @param..
log4j에는 필터(Filter)기능이 존재한다. (1.2 기준으로 설명하겠다.) log4j 로깅이 일어날때, 즉, LoggingEvent가 발생하게 될때, 이 필터를 이용해해서 해당 이벤트를 무시할 수 있는것이다. 즉, 로깅(logging) 할때 특정 부분은 출력을 안할 수도 있고, 특정 부분만 출력하게 할 수 있다는 것이다. 하지만 주의할것은 DOMConfigurator은 이 필터 기능을 지원하는데, PropertyConfigurator은 지원하지 않는다. 쉽게 말하자면 xml 설정파일을 이용하면 필터기능을 사용할 수 있고, property 설정 파일을 사용하면 필터기능을 사용할 수 없다는 것이다. 이 필터 기능을 사용하기위해서는 org.apache.log4j.spi.Filter 클래스를 상속받아 d..
자바에서 날짜와 시간을 표현하는데에 java.util.Date를 클래스를 많이 쓴다. 그리고 java.text.SimpleDateFormat 클래스를 이용해서 원하는 형식으로 출력할 수 있다. Date date = new Date(); System.out.println(date); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); System.out.println(format.format(date)); new Date()를 사용하면 현재 시간으로 생성이된다. 원하는 날짜 시간으로 만들려면 어떻게 해야할까? Date 생성자를 보면 날짜를 입력하는게 있지만, Deprecated 생성자이다. 사용하지 말자. @Deprecate..
자바 AND 연산자는 '&'와 '&&'가 있다. 이 두개의 차이는 무엇일까? 몰라도 살아가는데 전혀 문제가 없지만, 심심하니 알아보도록 하자. 정답을 말해버리자면 &는 두 조건을 무조건 검사하는것이고, &&는 첫번째 조건이 참일때만 검사하는것이다. AND란 두 조건이 모두 참(true)이어야하므로, 첫번째 조건이 거짓(false)이면 굳이 두번째 조건을 검사할 필요가 없을 것이다. 이 '&&'이 그런 역할을 한다는 것이다. 직접 구현해보도록 하자. public class AndOrTest { public static boolean condition(String msg, boolean result) { System.out.println(result + " : " + msg); return result; }..
자, 이제 실제로 유틸리티 클래스를 만들어 보자. 단순히 웹 어플리케이션 개발을 할 경우 실제적으로 많이 쓰이는 것은 문자열을 숫자형으로 변환하는 것이다. 문자열을 입력받아 자바 기본 숫자형으로 변환하는 클래스를 만들어보자 /** * 문자열을 숫자(short)형으로 변환한다. * * * NumberUtils.toShort(null, 0) = 0 * NumberUtils.toShort("NaN", 0) = 0 * NumberUtils.toShort("1234", 0) = 1234 * * * @param value * @param defaultValue 기본값 * @return */ public static short toShort(String value, short defaultValue) { if (va..
숫자 유틸리티를 만들어 보기로 하자. 자바의 숫자형은 크게 정수형과 실수형으로 구분한다. 1. 정수형 - 자바의 기본 정수형은 unsigned type이 존재하지 않는다. 그래서 해당 정수형의 바이트(byte)수에 의해서 -2(비트수-1) 부터 2^(비트수-1)-1의 범위를 가지게 된다. 비트(bit)수에서 1비트를 빼는 이유는, signed type 즉 부호 비트로 최상위 1비트를 사용하기 때문이고, 최대값에 -1을 해주는 이유는 0부터 시작하기 때문이다. byte 1byte -128 ~ 127 (-27 ~ 27-1) short 2byte -32768 ~ 32767 (-215 ~ 215-1) int 4byte -2147483648 ~ 2147483647 (-231 ~ 231-1) long 8byte -..
한글 처리도 해봤으니, 이젠 한자 처리를 해보도록 하자. 기능은 아주 단순하다. 한자를 입력받으면 한글로 출력해주는것이다. 동형이음(同形異音) 처리등, 제대로 할려면 아주 복잡해지니, 단순히 한자-한글을 1:1 대응시켜서 변환시켜주는 아주 단순 무식한 클래스를 만들어보자. 여기서 사용하는 한자-한글 맵핑표는 김진숙님이 만든것은 무단 도용(?)한 것임을 밝혀둔다. 일단, 유니코드 사이트에 가서 한자에 대해 알아보자 Han Ideographs Unified CJK Ideographs 4E00-9FCF U4E00.pdf CJK Ideographs Ext. A 3400-4DBF U3400.pdf CJK Ideographs Ext. B 20000-2A6DF U20000.pdf CJK Compatibility Id..
오늘은 지난 시간에 만든 한글(Hangul) 클래스를 조금 이용하여 조사 처리하는 메시지 클래스를 만들어보자. 자바에는 java.util.MessageFormat 이라는 아주 유용한 메시지 포맷 클래스가 존재한다. 하지만 불행히도 한글 조사 처리를 해주지 않는다. 그리고 너무나 기능이 많다보니 약간의 오버헤드(overhead)가 있다. 그래서, 한글 조사 처리 기능만 추가한 아주 간단한 MessageFormat 클래스를 만들어보도록 하자. 너무 간단하여 메소드 안에 구현되어서, 복수의 쓰레드(Thead)가 동시에 접근해도 안전하다. (아마도..) 1. 간단해서 별 다른 설명이 필요없을거 같다. 소스를 보고 파악하자. package kr.kangwoo.util.hangul; import java.util...
문자하면 빼 놓을 수 없는게 한글이다.(한국에 사니...) 오늘은 한글에 대해서 알아보도록 하자. 지난번 시간에 자바는 유니코드 기반이라고 했으니, 유니코드 사이트(http://www.unicode.org/)에 가서 열심히 읽어보자. 유니코드 한국어 명세서(Unicode Korean specific)를 보면 네개의 영역이 있다. Hangul Jamo 한글 자모 영역 0x1100-0x11F9 U1100.pdf Hangul Compatibility Jamo 한글 호환 자모 영역 0x3130-0x318E U3130.pdf Hangul Syllables 한글 영역 0xAC00-0xD7A3 UAC00.pdf Halfwidth Jamo 반각 자모 0xFF00-0xFFEF UAC00.pdf 첫번째, 0x1100-0x..
StringUtils 클래스 만들기 위해선 알아야할 것이 무엇일까? 당연 String 클래스이다. 그럼 String 클래스에 대해 알아보도록 하자 String(문자열)은 말 그대로 문자의 집합이다. 내부 소스를 보면 char(문자) 배열로 구성되어진것을 볼 수 있다. public final class String implements java.io.Serializable, Comparable, CharSequence { /** The value is used for character storage. */ private final char value[]; java(자바)에서 문자 정보는 Unicode Standard v4.0에 근거해서 사용한다.(J2SE API 5.0 문서를 보면 자세히 나와있다.) Uni..
1. 자바 프로젝트 만들기 - New -> JavaProject를 실행해서 자바프로젝트를 생성한다. - Project 명을 여기서는 kr.kangwoo.util이라고 하겠다. - JDK 1.5를 사용하겠다. 2. 테스트 소스 폴더 추가 - 기본값을 생성했다면 src 란 소스 폴더가 만들어져있는데, 테스트를 위해 test란 소스 폴더를 하나 더 추가하겠다. - 해당 프로젝트를 선택한후 마우스 우클릭한 다음 Prperties를 실행하면 속성창이 나온다. - 여기서 Java Build Path를 선택한후 Source 탭에서 Add Folder를 클릭한다. - 아래와 같은 창이 뜨면, Create New Folder를 클릭후 test 폴더를 생성한다. 장상적으로 생성되었다면, 아래 그림처럼 보일것이다. 3. S..
현재는 자바 리소스 파일을 작성할때에, 국제화 등을 이유로 ascii 값의 ISO-8859-1로 작성해주어야 한다. 그래서 jdk에는 native2ascii($JAVA_HOME/bin)라는 실행파일이 있는데, 이 놈을 이용해서 모국어(?)로 작성한 properties 파일을 ascii값으로 변경해야하는것이다. 즉, "안녕하세요" 를 변경하면 "\uc548\ub155\ud558\uc138\uc694"라는 외계인어로 변경되는것이다. 이렇게 변경해야만 실행할때 원하는 값을 가져올 수 있다. 물론, 편법으로 properties 파일에 한글을 그대로 적어넣고, 해당 클래스 파일을 수정해서 사용할 수도 있지만, 이건 엄연히 국제화(?)에 위반되는 행위이기에 그냥 넘어가기로 하자. ANT에서 native2ascii ..
This package is the backport of java.util.concurrent API, introduced in Java 5.0 and further refined in Java 6.0, to older Java platforms. The backport is based on public-domain sources from the JSR 166 CVS repository, the dl.util.concurrent package, and the Doug Lea's collections package. The ambition of this project is to provide a concurrency library that works with uncompromised performance ..
ConcurrentHashMap 뉴욕 주립대학의 교수인 Doug Lea가 고성능 동시 접속처리를 위해 만든 util.concurrent 패키지에 포함되어 있는 클래스이다. 이 Map은 쓰레드로부터 안전(thread-safe)하며, Synchronized Map을 사용하는 방식보다 성능이 뛰어나다. 자바 1.5부터는 java.util.concurrent 패키지에 포함되어 있다. util.concurrent 패키지 소개 : http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html
Json 사용하기 json-lib는 beans, maps, collections, java arrays와 XML을 JSON으로 바꾸거나, 반대로 JSON을 bean, DynaBean 형식으로 바꾸는 자바 라이브러리이다. 공식사이트 : http://json-lib.sourceforge.net/ Json-lib을 사용하기 위해서는 아래 라이브러리들이 필요하다. jakarta commons-lang 2.3 jakarta commons-beanutils 1.7.0 jakarta commons-collections 3.2 jakarta commons-logging 1.1.1 ezmorph 1.0.4 Bean이나나 Map을 Json으로 변환하기 Map2Json Map model = new HashMap(); mod..