http://blog.naver.com/PostView.nhn?blogId=tyboss&logNo=70033321734&redirect=Dlog&widgetTypeCall=true


http://sangu12.egloos.com/2784067


http://blog.naver.com/PostView.nhn?blogId=sneri&logNo=110018379120&redirect=Dlog&widgetTypeCall=true


http://suyou.tistory.com/16

Posted by 빨강토끼
,

http://hckim.tistory.com/108


http://tinywolf.tistory.com/103


http://omen666.tistory.com/40


http://fly32.tistory.com/438


http://ssiso.net/cafe/club/club1/board1/content.php?board_code=javaStudy|javaTuning&idx=7401&club=javaStudy&cp=1&cb=1&search=&search_word=


http://donzbox.tistory.com/150



Posted by 빨강토끼
,

SELECT A.SEGMENT_NAME,
              ROUND(SUM(A.BYTES)/1024/1024) "SIZE_MB",
              A.SEGMENT_TYPE
FROM DBA_SEGMENTS A,
            DBA_TABLES B
WHERE A.SEGMENT_NAME = B.TABLE_NAME
      AND A.SEGMENT_TYPE IN ('TABLE','TABLE PARTITION')
      AND A.OWNER = '유저아이디'
GROUP BY A.SEGMENT_NAME, A.SEGMENT_TYPE
ORDER BY 2 DESC;

Posted by 빨강토끼
,

http://blog.kangwoo.kr/58


http://javacan.tistory.com/124


http://namoda.springnote.com/pages/568469


http://xrath.com/javase/ko/6/docs/ko/api/java/util/concurrent/Executors.html


http://blog.naver.com/PostView.nhn?blogId=minis24&logNo=80152375114


http://blog.naver.com/PostView.nhn?blogId=seban21&logNo=70111658316&categoryNo=12&viewDate=&currentPage=1&listtype=0


http://ismydream.tistory.com/46 (어렵다, 책을 사서 봐야겠다)


JVM은 모든 스레드가 종료되기 전에는 종료되지 않고 대기하기 때문에 Executor를 제대로 종료시키지 않으면 JVM 자체가 종료되지 않고 대기하기도 합니다.

Posted by 빨강토끼
,

RSA 암호화를 사용하게 되었습니다.

앞글에서 언급했드시 seed, des , 등 이것저것 다 사용하는군요.ㅎㅎㅎ


지금까지 그랬드시

"이론, 배경지식, 그런거 벌써 검색을 통해 다 이해했으니

(혹은 개발시간도 별로 없고 바쁘니깐 그냥 소스를 알려달라!)"


하시는 분을위해 기본 소스를 먼저 공개하겠습니다.


import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.spec.RSAPrivateKeySpec;
import java.security.spec.RSAPublicKeySpec;
import javax.crypto.Cipher;
public class TestRsa
{
 public static void main( String [] args )
 {
  try
  {
   // RSA 공개키/개인키를 생성한다.
   KeyPairGenerator clsKeyPairGenerator = KeyPairGenerator.getInstance("RSA");
   clsKeyPairGenerator.initialize(2048);
  
   KeyPair clsKeyPair = clsKeyPairGenerator.genKeyPair();
   Key clsPublicKey = clsKeyPair.getPublic();
   Key clsPrivateKey = clsKeyPair.getPrivate();
   KeyFactory fact = KeyFactory.getInstance("RSA");
   RSAPublicKeySpec clsPublicKeySpec = fact.getKeySpec( clsPublicKey, RSAPublicKeySpec.class);
   RSAPrivateKeySpec clsPrivateKeySpec = fact.getKeySpec( clsPrivateKey, RSAPrivateKeySpec.class);
   System.out.println( "public key modulus(" + clsPublicKeySpec.getModulus( ) + ") exponent(" + clsPublicKeySpec.getPublicExponent( ) + ")" );
   System.out.println( "private key modulus(" + clsPrivateKeySpec.getModulus( ) + ") exponent(" + clsPrivateKeySpec.getPrivateExponent( ) + ")" );
  
   // 암호화 한다.
   String strPinNumber = "1234567890";
  
   Cipher clsCipher = Cipher.getInstance("RSA");
   clsCipher.init( Cipher.ENCRYPT_MODE, clsPublicKey );
    byte[] arrCipherData = clsCipher.doFinal( strPinNumber.getBytes( ) );
    String strCipher = new String( arrCipherData );
    System.out.println( "cipher(" + strCipher + ")" );
   
    // 복호화 한다.
    clsCipher.init( Cipher.DECRYPT_MODE, clsPrivateKey );
    byte[] arrData = clsCipher.doFinal( arrCipherData );
   
    String strResult = new String( arrData );
    System.out.println( "result(" + strResult + ")" );
  }
  catch( Exception e )
  {
  
  }
 }
}


위와 같습니다.

그런데 문제는 실제 필드에서는 이렇게 사용하지 않죠.ㅎㅎㅎ

이유는 서버와 클라이언트간에 통신을 하는데

위의 소스는 그냥 로컬에서 스스로 인코딩하고 디코딩하는 로직입니다.

당연히 서버와 클라이언트간에 키공유 이슈는 빠져있습니다.


"그래 그래 당연하지 . 그러니깐 긴말하지 말고 당장 소스를 내놔라! 바빠죽겠다."


머 패킷통신으로 주거니 받거니 하는건 설명하지 않겠습니다.

결국 cipher 로 암호화하기 위해서는 publicKey 가 필요한데 파일에 저정되어있던 디비에 저장되어있던 하던 아니면 통신으로 받던 바이트배열형식으로 암호화기가 되어있다면 이것을 publiKey로 바꿔야합니다.

그래야 init을 하니깐요. private 도 마찮가기겠지요.


publicKey를 만드는 방법은


KeyFactory fac = KeyFactory.getInstance("RSA");
X509EncodedKeySpec x509Spec = new X509EncodedKeySpec(key); // key 가 바로 byte 배열
PublicKey publicKey = fac.generatePublic(x509Spec);


privateKey를 만드는 방법은


KeyFactory fac = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(key);
PrivateKey privateKey = fac.generatePrivate(keySpec);


이상입니다. 끝!

Posted by 빨강토끼
,

DES 암호화나 Base64 에 대한 설명은 하지않겠습니다.(구글이나 네이버 검색하세요. ^^ )

CBC 와 PKCS7 에 대한 설명은 http://blog.cjred.net/141 를 참고하세요.



Posted by 빨강토끼
,

어제 저에게 제목과 같은 일이 벌어졌습니다.

하나의 SVN에 여러개의 프로젝트를 등록해서 사용하고 있고

PC에서는 GIT를 사용하고 있었습니다.

여러 프로젝트를 작업하다가

그중 하나의 프로젝트를 commit 후 SVN 에 DCOMMIT을 했는데

중간에 간간히 뜨던 팝업을 그동안 그냥 무심코 Yes 를 클릭했었는데

무심코 마지막으로 뜨던 팝업에 No를 클릭했더니

commit 하지 않았던 프로젝트의 소스가 원래대로(commit 했던 상태) 돌아와버린것입니다.

우째 이런일이....ㅜㅜ;


그래서 정리해봤습니다.

작업한 사본이 명확하지 않습니다. 변경된 사항을 숨길까요?


No를 클릭하면 DCOMMIT 은 진행되지 않습니다.

Yes 를 누르면 DCOMMIT이 이루어지는데 그중간에 보면 commit 하지 않은 다른 소스들이 원래대로 돌아와있는 것을

확인할수있습니다. (후덜덜한 상태입니다....)





DCOMMIT 을 마치고 Close 버튼을 누르면



DCOMMIT 전에 숨겨놓은 변경사항을 다시 돌릴까요?

여기서 반드시 Yes 를 클릭해야됩니다.

No 를 선택하는 순간...

지옥의 문이 열릴겁니다. (아~ 디아블로 3 하고 싶다.)


(추가) 숨겨놓은 변경사항들을 다시 살리는 법이 있습니다.

마우스오른쪽버튼을 누르면 Stash save, Stash Pop, Stash List 라고 있습니다.

이곳에서 Stash List 를 확인후에 Stash Pop 을 이용하여 복구할 수 있습니다.^^


그리고 만일 DCOMMIT 하지 않고 commit 만 한 상태로

다른 프로젝트를 commit 하고 DCOMMIT 하면 기존에 commit 했던 부분도 같이 DCOMMIT 됩니다.

어떻게 생각하면 당연한 일이지만,

혹시 DCOMMIT 을 원하지 않았던 부분도 같이 DCOMMIT 되는 결과가 나오는 것이므로 주의 하세요.



Posted by 빨강토끼
,

저의 경우는 이렇습니다.

개인적으로 작업을 할때에 GIT가 편하고 유용한데 회사에서는 아직 SVN을 쓰고 있을때

(다른 경우는 생각을 안해봤습니다. 다른분들은 어떤경우인가요?)


GIT에 대한 강좌는 엄청 많지만 너무 이론적인 것이 많고 일반인이 그저

쉽게 TortoiseGit 등을 사용하는 경우에 참고할 수 있는 블로그는 개인적으로


http://blog.naver.com/empty_wagon?Redirect=Log&logNo=20144797011


이곳을 추천합니다.


저는 제가 사용하면서 했던것들을 정리해보도록 하겠습니다.


일단 회사시스템이 SVN이였습니다.

저는 GIT를 쓰고 싶었구요.


관리자나 아니면 직접 SVN서버에 저장소를 만들어놓았을경우에

그리고 그곳에 이미 소스들이 있을 경우에 어떻게 소스들을 받냐면요.


소스를 다운받을 폴더에서 마우스 오른쪽 버튼을 누르면



Git Clone 을 선택합니다.


SVN URL 을 입력하고 From SVN Repository 를 선택하고 OK 를 클릭합니다.


그런데 만일 전체 소스가 아니고 SVN에 올라와 있는 일부 디렉토리의 소스들만 필요한 경우가 있습니다.

특히 SVN는 그 기능이 비교적 단순해서 매번 여러개의 SVN Repository 를 만들지 않고

팀별 혹은 문서, 폴더 , 기타등등을 몰아서 하나의 Repository에 넣어놓는 경우가 종종있었습니다.


그럴경우에는


SVN/trunk/디렉토리경로.... 를 입력하고


위와 같이 Trunk, Tags, Branch 의 모든 체크박스를 언체크해주면 됩니다.


이번엔 필요한 작업을 마친후에 SVN에 등록하는 법을 설명하겠습니다.

작업중에 틈틈히 GIT에 commit 를 해주시고

마지막 commit 후에


DCommit 버튼을 클릭하면됩니다.




둘다 상관없지만 저는 Normal SVN Commit 를 사용합니다.


그럼 SVN에 Commit이 됩니다.


다른 방법으로는 작업한 폴더에서 마우스 오른쪽 버튼을 누르면

나오는 GIT 메뉴에서

SVN DCommit.. 을 선택합니다.

그이후는 전과 같습니다.


다음음 다른사람이 SVN에 Commit 한 소스를 update 하는 방법입니다.

마우스 오른쪽 버튼을 눌러서 GIT메뉴중에 

SVN Rebase.. 를 선택합니다.


이상입니다. ㅎㅎ


Posted by 빨강토끼
,

매번 eclipse 에서 만 junit 을 사용했었는데

console 에서 junit를 사용해야 되는 상황이 있습니다.

(예를 들어 리눅스에서 테스트하기 위해)


일단 도스에서 하는 방법은


junit.jar 파일을 bin 폴더에 복사한후


set  CLASSPATH=.;junit.jar

라고해서 클래스패스를 지정후에


만일 junit 버전이 3.x 라면

> java junit.textui.TestRunner 클래스명


만일 junit 버전이 4.x 라면

> java org.junit.runner.JUnitCore 클래스명



Posted by 빨강토끼
,

static 은 Attribute 나 Method 을 선택후 Properties 창의 Detail 에 있는 OwnerScope 를 INSTACNCE에서 CLASSIFIER 로 바꿔주면

해당 Attribute 나 Method 에 밑줄이 생깁니다.


final은 Attrubute 를 선택후 Properties 창의 Detail 에 있는 Changeability 를 FROZEN 으로 바꿔주면 됩니다.


Posted by 빨강토끼
,