일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
- 이클립스 플러그인 개발
- RSA
- 한글조사
- 자바
- ACAP
- DAMO
- 암호학
- Executor
- Executors
- String
- Java
- date
- 자바 암호화
- Callable
- Freemaker
- AES
- Runnable
- Postman
- Instrumentation
- mac
- sha1
- ORM
- Log4J
- 한글조사처리
- PKCS#8
- StringUtils
- IPTV
- xlet
- PKCS
- JCE
- Today
- Total
목록낙서 (43)
오늘은 어디로 갈까...
가져다 쓰면 편할것을... 생각해내서 만들어 쓰는것은 머리를 아프게 한다. 하지만, 이게 재미있으니... 어쩔수 없지. Client Server 간에 안전한 통신을 하기 위해서는 어떻게 해야할까? 아주 간단히 생각한다면 대칭키 암호화 알고리즘을 사용해서 데이터를 교류하면 될것이다. 그런데 대칭키 암호화를 사용할려면 동일한 비밀키를 C/S 두군데 가지고 있어야한다. 문제는 누군가가 이 비밀키를 알게 될 경우(만든 사람은 안다~~ ㅋㅋㅋ), 또는 클라이언트가 해킹당해서 비밀키가 누출되면... 모든 데이터에 빵꾸~~가 난다는 것이다. 거기다 꼬리가 길면 밟힌다고, 동일한 비밀키를 오래쓰면, 암호해독법에의한 공격에 취약해지기 마련이라서, 대칭키 암호화에 사용되는 비밀키는 단기간의 세션(SessionKey) 형태..
1. 잡설 서버와 클라이언트간의 데이터를 암호화하기 위해서 RSA와 AES를 사용하기도 했다. 문제는 클라어언트의 JAVA가 나이가 연로(年老)하셔서 RSAPrivateKey를 지원안하는줄 알고 한번 구현해보고자 하는 그릇된 욕망으로 인해 삽질을 시작하게되었다. 1.3에서는 있는거 같은데, STB(셋탑)의 JAVA께서는 지원을 하시는지 확실히는 몰겄다. 언제나 느끼는 것이지만, 만들기 전에 찾아보는 현명한 습관을 하루 빨리 체득해야하는데 말이다.. --; 단지 지적 욕구를 충족하고자 하시는분만 이 글을 읽으시고, 절대로 현실세계에서는 사용하지 말기 바란다. 2. RSA용 키 생성 일단 RSA에 사용하기 위한 키를 생성해보자. package kr.kangwoo.moon.sample; import java...
오프라인 브라우저인데, 한마디로 웹사이트를 통째로 다운로드 받아주는 프로그램이다. 프리 소프트웨어라 마음껏 가져다 쓰면 된다. http://www.httrack.com/ 가끔 javadoc 무단 취식할때 사용한다.. --;
스태가노그래피는 일반 사진이나, 동영상, 음악 파일등 위장 자료 아래에 각종 문서, 이미지, 동영상등의 실제 정보를 숨기는 기술이다. 따라서 겉으로 보기에는 일반적인 사진이나 동영상처럼 보이지만, 해독용 소프트웨어를 사용하면, 원래의 숨겨진 정보를 볼 수 있는것이다. 일반적인 사람이라면 쓸모 없는 것이진 하지만, 지적유희를 즐기기엔 상당히 좋은 분야임에 틀림없다. openstego(http://openstego.sourceforge.net/)라는 자바로 만든 스태가노그래피 소트프웨어가 있다. 오픈소스이기에 마음껏 사용할 수있다. 아직까지는 이미지 위에 정보를 숨길 수만 있고, 대용량 파일 처리가 미숙하기는 하지만 맛보기에는 쓸만하다. 위의 그림은 윈도우에 샘플로 들어 있는 그림인데, 다른 그림이 숨어있다..
어떤분(?)이 댓글로 AES를 이용한 파일 암/복호화 예제를 만들어달라고 요청을 해왔다. 그래서 간단히 만들어봤다. 하지만, 세상에 공짜는 없는법~~~ 언제가 될지 모르겠지만, 나중에 혹시 만난다면 차나 한잔 사주세요. ^^;; package cydar; import java.io.BufferedInputStream; 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 java..
요즘 프로그래밍 삼매경에 빠져있다 보니, 블로그를 소홀히 하는것같아서 의무적(?)으로 몇글자 적어보겠다. 사실 삼매경이라기 보다는, 능력 부족으로 인해서 허우적거리고 있다는게 맞는거 같지만 말이다. ^^; JDBC를 이용해서 데이터를 처리할때, 실행 쿼리를 로그로 출력했으면 하는 마음을 가졌던 적이 있을것이다. Connection을 가져오고, Statement를 생성해서 실행하는 원초적(?)인 방법을 사용하는곳에서는, 로그 출력하는 부분을 매 코드마다 추가해 줄수도 있지만, 너무 귀찮지 아니한가. 그래서 좀더 쉬운 방법을 연구해보자. 본인같은 무식한 성격의 소유자는 java.sql.Connection, java.sql.PreparedStatement 등을 상속 받아 구현한 Wrapper Class를 만든..
daemon을 모니터링하는것은 중요한 일이다. 이놈이 살았는지 죽었는지 알 수 없다면 참 난감한 일일 것이다. 그렇다면 어떻게 모니터링 할 수 있을까? ps -ef 를 사용해서 단순히 프로세스가 살아있는지 확인을 할 수도 있지만, 살아 있어도 살아 있는게 아닐 수도 있어서 신용이 안간다. 그렇다고 살아있다~고 매초마다 파일로 출력하자니 모양새가 좋지 않고, 소켓을 통해 구현할려고 하면 귀차니즘이 발동하고... 어떻하면 좋을까? 결론부터 말하자면 걱정하지 말아라, 자바에서는 JMX란 아주 좋은(?) 관리 API를 제공하고 있다. (솔직히 JMX를 배우는게 더 힘들지 않을까 ^^;) 1. JMX(Java Management Extensions) - JMX는 말그대로 여러 자원을 감시(?) 관리 하기 위한 자..
이번 시간에는 자바 데몬을 한번 만들어보자. 일반적으로 실 운영 환경은 UNIX 인 관계로 유닉스에 초점을 맞추도록 하겠다. 각고의 노력(?) 끝에 만든 PostMan. 이 놈도 성격상 데몬이기에 데몬처럼(?) 돌려야한다. 본인의 경험으로는 대부분의 사이트에서 crontab에 등록하여 자바를 실행하는 형식으로 사용하는것 같다. 다행인지 불행인지 몰라도, 본인은 crontab을 한번도 사용못해본(?) 풋내기 사용자라는것이다. 그래서 crontab은 거들떠보지고 않고, 자바 독립적(?)으로 데몬을 돌리곤 했다. PostMan은 자체 스케줄링 기능이 있는 관계로, crontab을 사용하면 왠지 이상하지 않은가? 그러니 자체 실행을 해보도록 하자. 1. nohup 사용하기 - 가장 간단한 방법은 nohup을 이..
최적화라는 거창한 단어를 사용하긴 했지만, 사실 별 볼일 없다. 최적화라는것은 운영 환경, 데이터의 모델등 여러 요소를 복합적으로 고려해서 해야하는것이므로, 사실상 정답은 없다. 단지 최선의 방법만이 존재할뿐... 현재 본인의 상황에서 PostMan의 병목현상은 메일 전송 부분에 있다. gmail을 이용해서 보내고 있는데, 메일 1개 전송하는데 보통 3-4초가 소요된다. 아무리 유희를 위해서 만들었다지만, 너무 심하지 않는가... 그래서 약간 수정을 가해서 빠르게 전송하는것처럼(?) 만들어보자. 사실, 구조 자체를 바꿔버리고 싶은 욕망이 꿈틀되지만, 이번만은 참도록 하겠다. ^^; 만약 전용(?) 메일서버를 사용하다면, 이것보다는 빠를거 같지만, 가난한 개발자 & 게으른 개발자인 본인에게는 머나먼 얘기이..
봄을 재촉하는 비가 내리고 있다. 이런날을 커다란 창문이 있는 곳에 앉아, 하염없이 내리는 비를 바라보는게 즐거움일텐데, 어쩔 수 없이 모니터만 뚫어지게 바라보고 있다. 봄하면 생각나는게 spring~ 그렇다. PostMan을 spring화(?) 하자. 스프링을 사용하는김에 Persistant layer도 제대로 구현해보도록 하겠다. 여기서는 iBatis를 사용하겠다. (Spring Batch를 사용할까도 생각해봤지만, 구조를 설명하는게 좌절인거 같아서 간단한(?) spring만 사용하겠다.) 1. 관련 라이브러리 - 갑자기 라이브러리가 많이 필요해졌다. 대충 정리하면 아래와 같은데, 알아서 구해보시길. ^^; - spring 2.5.6 (http://www.springsource.org/download..
지난 시간에는 실제적인 메일 전송은 하지 않고, 로그로만 출력했는데, 찜찜한 관계로 한번 해보도록 하자. 자바 진영에서는 JavaMail이라는 훌륭한(?) 메일 라이브러리를 제공한다. IMAP/POP3/SMTP를 지원한다. 이 JavaMail을 사용하기 위해서는 JAF(JavaBeans Activation Framework)가 필요하다. JDK 1.6부터는 자체적으로 포함되어있다. 여기서는 JDK 1.5를 사용하는 관계로 다운 받도록 하겠다. 1. 라이브러리 설치하기 - JavaMail의 mail.jar과 JAF의 activation.jar을 클래스패스에 잡아주자.(mail.jar는 mailapi.jar + imap.jar + smtp.jar + pop3.jar라고 보면 된다.) JavaMail 1.4...
지난 시간(메일 템플릿에 대한 단상(斷想))에 이어서 템플릿을 이용한 메일 발송에 대해 좀 더 알아보도록 하자. 완전체(?)를 만들면 4월 한달 내내 우려먹을 수 있을거 같기는 하나, 저질 체력인 관계로 대충 끝내보도록 하자. 프로젝트 명은 메일관련이므로.... POSTMAN이라 하겠다. 1. 테이블 만들기 - 데이터베이스에서 전송할 자료를 가지고오는 구조이므로, 일단 테이블을 만들도록하자. MAIL MAIL_NO NUMBER Not Null 메일 번호 TEMPLATE_ID CHAR(3) Not Null 템플릿 아이디 STATUS_CODE CHAR(2) Not Null 상태 코드 TO_ADDRESS VARCHAR2(200) Not Null 받은이 주소 TO_NAME VARCHAR2(100) 받는이 이름 ..
요즘 메일 템플릿 변경 작업을 하고 있는데, 기분이 별로이다. 이곳의 메일 구조는 메일 전송 테이블에 전송 데이터를 넣으면, 데몬이 모니터링하고 있다가 발송하는 구조이다. 뭐, 이런 구조야 흔하디 흔한것이라 별로 반감은 없는데, 문제는 메일 내용을 생성하는 부분이다. 테이블에 URL을 입력하고 데몬이 URL을 호출하여 랜더링된 HTML을 받는다. 즉, 일종의 HttpClient가 웹서버를 호출해서 응답 페이지를 받는것이다. 물론 전혀 문제될게 없는 구조이다. 그럼에도 불구하고, 본인의 성격이 괴팍한것인지, 왠지 마음에 안든다. 굳이 웹페이지를 호출할 필요 없이, 템플릿 엔진을 사용해서 간단하게 구현하면 될것인데, 왜 이렇게 구현해놨을까 하는 쓸데없는 생각은 마음을 갉아먹고 정신을 혼미하게 만들었다. 그래..
HTTP(Hyper Text Transfer Protocol)은 웹상에서 정보를 주고 받을 수 있게 정의한 통신 규약을 말한다. 1996년 1.0 버전이, 1999년 1.1 버전이 발표되었으면, IETF(Internet Engineering Task Force)의 RFC에 자세히 기술되어 있다. 현재 가장 많이 쓰이는 버전은 1.1이다. 사용하는 기본 포트는 80번이다. HTTP의 특징(?) 중 한가지가 무상태(Stateless) 즉, 상태 정보를 유지하지 않는다는 것이다. 사용자(Client)는 매번 요청을 할때마다 서버에 접속을 하고, 응듭을 받으면 연결을 끊어버린다. 그래서 서버의 입장에서는 요청을 하는 사용자가 누군지 알지 못하는 슬픈 일이 생긴다. (넌~ 누구냐~?) 이 상황을 해결하기 위해, ..
HTML의 장점이자 단점은 바로 융통성이다. 융통성 있는 구조를 가지다 보니, 대충(?) 만들어도 브라우저같은곳에서 잘 보여준다. 그런데... 문제는... 프로그래밍해서 html을 분석하기에는 참 난해한것이다. 규격에 안맞다보니, 섬세하게(?) 제어할려고 하면 꽥~~하는 습성이 있는것이다. 뭐 일일이 수작업(?)으로 분석할 수는 있지만, 그건 너무 잔혹하지 않는가. 이런 고민을 한방에 해결해 줄 라이브러리가 있으니, 그건 바로 Html Cleaner!!! (http://htmlcleaner.sourceforge.net/) 이름 그대로 깔끔한 성격이라서, 매우 마음에 든다. 대상 html을 마음껏 요리할 수 있는 자체 API도 제공하고, xml로 변환하여 처리할 수도 있다. 1. 사용하기. - 아래처럼, ..
클래스 재반영(reload). 누구나 한번쯤 생각해 본적이 있을것이다. VM을 종료시키지 않고 변경된 클래스를 반영하는 일. 아 생각만해도 행복하다. ^^; 다년간 삽집을 통해 얻어낸것이라고는 클래스는 재반영(reload)이 안된다는 사실... (이 지식을 습득한 시점이 2002년도였으므로 지금은 어떤지 확실히 모르겠고, 이 글이 거짓말로 도배된것일 수 있으니 주의바란다.) 그럼 많은 J2EE Application Server에서 지원하는 hot deployment 기능은 뭐란 말인가? 그 베일을 벗겨보면, 클래스를 재반영하는것이 아니라, 클래스로더를 바꿔치기 해서 재반영된것처럼 보이게 하는것이다. 클래스는 클래스로더에 의해서 적재된다. 그래서 사용하는 클래스로더를 바꾸면 새로운 클래스가 로딩되는것이다...
1. 소개 1.1 JPPF - JPPF(Java Parallel Processing Framework)은 손쉽게 병렬 처리 프로그램을 만들수 있게 도와주는 프레임워크이다. - 단순히 1대의 컴퓨터에서만 작동하는것이아니라, 네트워크로 연결된 수많은 컴퓨터를 사용하여 분산처리할 수 있게 도와준다. - 한마디로 요약하면, 오픈 소스 그리드 컴퓨팅 플랫폼(open source Grid Computing platform)이라 할 수 있는것이다. 1.2 준비물 - Java 1.5 이상 - Apache Ant (실행 스크립트가 build.xml로 되어있다. 알아서 해결할 경우 필요없다.) - JPFF driver and node binary package (http://sourceforge.net/project/sh..
멀티 쓰레드(Multi Thread)란 프로세스(Process)안에서 여러개의 쓰레드가 동시에 동작하는것을 말한다. 자바 1.5부터 java.util.concurrent 패키지가 추가됨으로서 멀티 쓰레드 프로그래밍을 아주 손쉽게 할 수 있다. (아득히 먼(?) 옛날에는 멀티 쓰레드를 잘(?) 사용하기 위해서 ThreadPool, BlockingQueue도 직접 만들어 사용하는등 많은 삽질이 필요했는데, 지금은 너무나 간단하게 구현이 가능하다. 물론 Thread에 대한 기본 지식은 가지고 있어야한다.) 자바를 실행하면 main 쓰레드라 불리우는 놈이 해당 객체의 main(String[]) 메소드를 실행해준다. 즉, 프로그램이 실행되면, 최소한 한 개 이상의 쓰레드 동작중인것이다. 1. Thread 생성 및..
오늘은 log4j의 Filter 기능과 설정파일 직접(?) 지정하기에 대해서 알아보겠다. 필터(Filter)기능이란 로그 이벤트가 합당한 조건에 일치하는가를 판단하는 기능이다. Appender에 Filter를 설정해서 사용할 수 있다. 자세한 사항은 이전에 끄적였던 글(http://blog.kangwoo.kr/40)로 대체한다. ^^; log4j는 기본적으로 클래스패스(classpath)에서 log4j.xml나 log4j.properties 파일을 찾아서 설정 정보를 읽어온다. 이 설정정보 파일을 명시적으로 지정하려면 어떻게 해야할까? 모르겠다. 삽을 들자. --; 일반적으로 Logger.getLogger(String) 메소드를 이용해서 로거를 할당 받는다. public class Logger exten..
1.3. log4j.xml - 또 하나의 설정 파일인 log4j.xml에 대해 알아보자. 단순히 log4j.properties 파일을 XML 형식으로 만든것이라고 보면된다. (클래스패스에 log4j.xml, log4j.properties 두 파일이 동시에 존재하면 log4j.xml가 우선시 된다.) ### log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPatte..
지난 시간에는 Logging Facade Libraries에 대해서 알아보았다. 오늘은 진짜(?) Logging Libraries에 대해 알아보도록하자. 가장 유명한게 log4j와 jdk14Logger가 있겠다. 여기서는 log4j만 다루도록 하겠다. 1. log4j log4j는 로깅(logging)을 위한 라이브러리이다. 현재 Apache의 서브프로젝트로서, 홈페이지는 http://logging.apache.org이다. 이 log4j의 가장 큰 특징은 계층(category) 로거라 불리우는 것인데, 로거(logger)를 사용할때 "카테고리(category)"라는 이름을 붙여서 사용한다. 이렇게함으로서 여러 소스로부터 출력되는 로거들중에 필요한 부분만을 로깅할 수가 있는것이다. log4j의 또 하나의 특..
프로그램 개발을 할때 가장 중요한 부분이 로그(log) 처리부분이 아닐까 생각한다. 신규 개발은 물론 유지/보수 할때에도 로깅을 얼마나 체계적으로 잘 사용하느냐에 따라서 작업하기가 한결 수월해질 수 있다. 자바에서는 1.4부터 java.util.logging 패키지가 포함되어 자체적으로 지원을 하고 있지만, 뒤늦게 출현한 덕분인지, 아니면 모양새가 맘에 안들어서 그런지 잘 사용이 안되고 있다. 아마 대부분 log4j를 사용하고 있는것으로 알고 있다.(아닐수도 있다~) 그런데 재미있는것은 이 로깅 라이브러리를 facade 하는 라이브러리도 존재한다는것이다. 간단히 말해서 기존 로깅 라이브러리를 wrapping해서 사용한다고 할 수 있는데, 로깅 요청을 기존에 존재하는 로깅 라이브러리(log4j같은)로 전달..
프로그램은 실행되면서 저장할 데이터가 있으면 메모리의 일정 공간을 할당받아서 사용하게 된다. 그런데 이 데이터가 더 이상 사용할 필요가 없는것이면, 사용항 메모리를 반납해야주어야한다. 자바는 친절히도 메모리 회수를 자동적으로 해준다. 즉, 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..
전자서명에 널리 이용되는 알고리즘은 DSA(Digital Signature Algorithm)과 RSA의 PKCS#7이다. DSA는 전자사명의 생성과 검증을 목적으로 만들어진 알고리즘으로서 이산대수문제(Discrete logarithm problem)를 수학적 기반으로 사용한다. 자세한 사항을 FIPS-186(http://www.itl.nist.gov/fipspubs/fip186.htm)를 참고하길 바란다. JDK 1.5에서 기본적으로 지원하는 Signature 알고리즘은, DSA (SHA1withDSA), MD5withRSA, MD5withRSA, SHA1withRSA, SHA256withRSA 등이 있다. Signature 클래스를 이용해서 해당 알고리즘에 맞는 인스턴스를 생성한 다음 사용하면 된다...
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 키워드..