반응형

안녕하세요 가야태자 @talkit 입니다.

지난 번에 Hello World를 찍고 ^^ 당황 스럽긴 하겠지만 ㅋㅋㅋ 지금 하고 있는 프로젝트에서 암호화/복호화 관련 업무가 있어서 ^^ 적어 보도록 하겠습니다.

개요

우선, 암호화는 사람들이 모르도록 이상한 문자열 등으로 바꾸는 것을 이야기 합니다. 그런데 이게 보통은 해독할 수 있는 규칙이 있습니다. 그래야 공통으로 약속되어서 풀어 볼 수 있으니까요.

암호화는 또 단방향 암호화와 양 방향 암호화가 있습니다.

단방향 암호화는 그야말로 복호화가 없는 단방향의 암호화 입니다. 단, 암호화 할때마다 동일한 결과가 나옵니다.

양방향 암호화는 암호화와 복호화가 존재하는 암호화 기법입니다.

일반적으로 단방향 암호화는 비밀번호를 만드는데 쓰입니다. 비밀번호도 양방향 암호화를 해야 할 경우도 있지만, 일반적으로는 단방향 암호화를 진행 합니다.

양방향 암호화는 주로 문서교환을 위해서 사용 합니다. 또는 DB에 바로 저장 되면 안되는 개인 정보 등의 저장을 위해서 사용 합니다.

이번에 제가 만들어 본 암호화는 양방향 암호화 입니다. ^^

개인키, 공개키 생성 프로그램

--

양방향 암호화를 하려면, 개인키와 공개키가 필요 합니다. 이번에 암호화 려는 기법은 RSA 기법입니다. RSA는 다음에 알아보도록 하고 오늘은 JAVA 어떻게 코드를 작성하는지만 보겠습니다. ^^

package com.tistory.talkit;

import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.util.Base64;

public class MakeKeyData {

    public static void main(String[] args) throws NoSuchAlgorithmException {
        // RSA로 암호화 하겠다. 
        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();
         // Random 키를 이용해서 키페어 생성 준비
        keyPairGenerator.initialize(2048,secureRandom);

         // 키페어에 암호화된 내용을 담기 
        KeyPair pair = keyPairGenerator.generateKeyPair();

        // 공개키 획득
        PublicKey publicKey = pair.getPublic();

        // 공개키를 문자열로 출력
        String publicKeyString =
        Base64.getEncoder().encodeToString(publicKey.getEncoded());

        System.out.println("public key = "+ publicKeyString);

        // 개인키 획득
        PrivateKey privateKey = pair.getPrivate();
        // 개인키를 문자열로 출력
        String privateKeyString =
        Base64.getEncoder().encodeToString(privateKey.getEncoded());

        System.out.println("private key = "+ privateKeyString);

    }

}

위 코드를 만들어서 수행하면 아래와 같이 나옵니다.

public key = MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAppicAq5Xn8+KZFQyP825E4aDPjFpyxhK5WATI4k3HllMxGo8FBOwoDl+lgVEIPEGgfD+t1cmBOpPkT7Mx54UQ+bSSU2T1wDR7QwyGV2iuxe6DCtQfVLuzYd6uxZO3pWoN93q9DkhzbLLOW1bLOieodnhMRq293uoKRWCP+Sp586SVPxwW/hWZjy57NIta1ew+JnRtHsg7reWOjyiCXORXdQvRoGfAz9ZC0aZBqopy84ZtMCK42y0Wprm0Oi4u3bwk2h2EkvGUOIRBHEly//M0Ma4RGlHWU7jpg0CiXcJAdq1DRMd6hzFVxUV4n23575NOKLwEirvqbgZXoaLJSo/1QIDAQAB
private key = MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCmmJwCrlefz4pkVDI/zbkThoM+MWnLGErlYBMjiTceWUzEajwUE7CgOX6WBUQg8QaB8P63VyYE6k+RPszHnhRD5tJJTZPXANHtDDIZXaK7F7oMK1B9Uu7Nh3q7Fk7elag33er0OSHNsss5bVss6J6h2eExGrb3e6gpFYI/5KnnzpJU/HBb+FZmPLns0i1rV7D4mdG0eyDut5Y6PKIJc5Fd1C9GgZ8DP1kLRpkGqinLzhm0wIrjbLRamubQ6Li7dvCTaHYSS8ZQ4hEEcSXL/8zQxrhEaUdZTuOmDQKJdwkB2rUNEx3qHMVXFRXifbfnvk04ovASKu+puBlehoslKj/VAgMBAAECggEAXoMdnvfBhkx7usd5anEPmmApfNMTrcCuXMrQkMx7lKAcySFrzAgPoBZ+FiYOrJGQm49ZMjIiw48abNAv5N9tp8f/bM6yHLu+XLkagwF4HKQtTFIWa8Ls73T4z8KsI+LLeEZR0RPIdaYFXSMJIsUlmbS96Nm7C1P/5q7pIc5cBcFg8uyFA13yHUUd5oJaal7RPVIfRQAUZZNj3crSVdQYCfdB42nokQ0z5kv3Qm3eu04Wqli/GyWIKRbxaffTlYvEjzjN4cxptJOPSn6zQlLXIStmwohQLjmx1UQ1cWJWqwF0910QleIJyR1iBKEtbvUORxEc0hv+a/2trwQP973gAQKBgQD55jq7ofNXSsnhyC9IJEyGDfvSRTtMEDwEk4pXQy6RKFrUN3/5AD40EBb2V0txhIwQxPD2YBCkSVXW/swMMA/QSM1lLLMkSqRkQhBucAO2RimgDNVXbzakFAmDgWSUjNz0HrSXJuGmKnErb42I+0yc+hd+Sl+WqRgWZ7SkUPLN1QKBgQCqqcS1XGKLoVyRnIYGivsA2/83RIJVx8Mjzofgg6Ekd5Q1uKMZFowAy3wbqMCRRW8+qufVmElzCMP79Pijh2nrv7QfEBrTbWdDgiMJz+Sq6JGHDyAiGv7v5j/nbl0JlgNKKmx2fiNpITBNQTQWPs3cqxArKz3j0Apy3HphlWiqAQKBgQC8Qbe/QDrMaPf7Ek6kP0wytPgfKK6KF7TPEcLnCCJdkhQSyRisIYW6vOA/hfW8t8i4nVSVljsTOHflNh/Lkq1nEGFDNdBip6R+LtKoD9SMDQEwpFpXut1j8ABWxDRcQF33veX39H+LKXAF88yhBAdsPm9SYX7vRcVyo3+PRbgUXQKBgACIqWnb0R8YsR5ve+fXVXOqPIEiwLmd91lMUxZ7suxXR2pnmnMApA14lXnMrFWH/xIWHMWJRWmLtHk8Se7RBJ7NKbYTKdJRfEo0xQFJ2jBCq/ndLT+OEBAWC0shCD94bag0u8QfHuM8TFdhhdUv+xremh1YdEgbJX04fVWCzyIBAoGBAM4g8t3KCd+fcwn2tQOENr6G4pztm5qvFw1rsXK46K2P0Bggf54f+nrVBHUh1lSVk1uLyzx8QF7Btl++GD64w7MOWPC40osCNaL7uHqwFx1rrZdsuF0EM9lBtvzxBUbQkOh5T8U1cBCHupdETXsKmgAbdoBXyp22Z3En/zpSz8kJ

저 두개의 키가 암호화와 복호화를 위한 키 입니다.

암호화 함수 만들기


공개키와 개인키를 이제 만들었으면 우선 코드를 개별적으로 설명 드리겠습니다.

우선, encode 함수를 만듭니다.

    public static String encode(String decodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048, secureRandom);

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

        Cipher encryptionCipher = Cipher.getInstance("RSA");
        encryptionCipher.init(Cipher.ENCRYPT_MODE, privateKey);
        String message = decodeText;
        byte[] encryptedMessage = encryptionCipher.doFinal(message.getBytes());
        String encryption = Base64.getEncoder().encodeToString(encryptedMessage);

        return encryption;

    }

암호화 함수는 내용은 복잡하지만, 사용은 편하도록 encode(복호화된 텍스트) 형식의 함수를 만들었습니다.

나머지는 루틴이라고 생각하시면 되고 ^^ 앞에서 만든키를 키로 변환해 주는 과정이 필요합니다.

위 코드 중에

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

이 부분입니다. 이부분은 함수로 다시 작성해서 사용했씁니다.

    // 문자열 공개키를 Key 로 변환
    public static Key loadPublicKey(String stored)
            throws GeneralSecurityException, IOException {
        byte[] data = Base64.getDecoder().decode((stored.getBytes()));
        X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        return fact.generatePublic(spec);
    }

    // 문자열 개인키를 Private Key로 변환
    public static PrivateKey loadPrivateKey(String key64)
            throws GeneralSecurityException {
        byte[] clear = Base64.getDecoder().decode((key64.getBytes()));
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        PrivateKey priv = fact.generatePrivate(keySpec);
        Arrays.fill(clear, (byte) 0);
        return priv;
    }

개인키 공개키를 모두다 할 수 있도록 만들었습니다.

복호화 함수 만들기


다음으로 decode함수의 소스 코드 입니다.

     public static String decode(String encodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048,secureRandom);

        PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

        //Decrypt Hello world message
        Cipher decryptionCipher = Cipher.getInstance("RSA");
        decryptionCipher.init(Cipher.DECRYPT_MODE,publicKey);
        byte[] decryptedMessage =
        decryptionCipher.doFinal(Base64.getDecoder().decode(encodeText));
        String decryption = new String(decryptedMessage);
        //System.out.println("decrypted message = "+decryption);

        return decryption;

    }

위 코드는 암호화된 텍스트를 넣으면, 복호화된 텍스트를 리턴하도록 만들었습니다.

암호화와 마찬가지로 중간에 아래 코드가 중요하고 그 내용은 복호화에 넣어둔 코드를 확인 하십시오.


         PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

메인 함수에서 불러서 암복호화 해보기



      public static void main(String[] args) throws GeneralSecurityException, IOException {
        String encodeText = encode("Hello World. Welcome to Korea.  * ");

        System.out.println(encodeText);

        System.out.println("encoded Text : " + encodeText);

        String decodeText = decode(encodeText);

        System.out.println("decoded Text : " + decodeText);


    }

Hello World. 으로 시작하는 문자열을 암호화 했다가 복후화 하는 코드 입니다.

실행하면

encoded Text : c8AcbCp4bIARJA3EOW9cf41pRIefVhCvCWyxwcgwifWaDK8AX9RJoe8dOgPzuvauCZZG5ibbOMtvEPh06DUwojFzMngCtT3T6VOyzWDA/CBFN52jXZzqw9M1K1v3vZJ+0uft86TomxZvbWdxv5XPo5keh0HyWyexv3U5c5cXypMwBTDECUiQkUPjZN1aUf7dHGQG0uC+KuyNEKK4NDMddPWoo0gzlWxsxIBkm7oLpuKEcXP9ThM16JQD8rhskJbXwbhUL39xfmDSti8Om9DcrU6KCDakKeT7i72yRjAD5B60Da28jT1DlzwS9p7IlfPXdlybjLKUMUcQsF1rJ1Xvww==
decoded Text : Hello World. Welcome to Korea.  *

위와 같이 잘 복호화 되어서 나옵니다.

전체소스코드



package com.tistory.talkit;

import java.io.IOException;
import java.security.GeneralSecurityException;
import java.security.Key;
import java.security.KeyFactory;
import java.security.KeyPairGenerator;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Arrays;
import java.util.Base64;

import javax.crypto.Cipher;

public class RSAEncode {

    public static String publicKeyString1 = "만들어진 public key";

    public static String privateKeyString1 = "만들어진 private key";

    public static void main(String[] args) throws GeneralSecurityException, IOException {
        String encodeText = encode("Hello World. Welcome to Korea.  * ");

        System.out.println(encodeText);

        System.out.println("encoded Text : " + encodeText);

        String decodeText = decode(encodeText);

        System.out.println("decoded Text : " + decodeText);


    }

    public static String decode(String encodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator =
                KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048,secureRandom);

        PublicKey publicKey = (PublicKey) loadPublicKey(publicKeyString1);

        //Decrypt Hello world message
        Cipher decryptionCipher = Cipher.getInstance("RSA");
        decryptionCipher.init(Cipher.DECRYPT_MODE,publicKey);
        byte[] decryptedMessage =
        decryptionCipher.doFinal(Base64.getDecoder().decode(encodeText));
        String decryption = new String(decryptedMessage);
        //System.out.println("decrypted message = "+decryption);

        return decryption;

    }

    public static String encode(String decodeText) throws GeneralSecurityException, IOException {

        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        SecureRandom secureRandom = new SecureRandom();

        keyPairGenerator.initialize(2048, secureRandom);

        PrivateKey privateKey = (PrivateKey) loadPrivateKey(privateKeyString1);

        Cipher encryptionCipher = Cipher.getInstance("RSA");
        encryptionCipher.init(Cipher.ENCRYPT_MODE, privateKey);
        String message = decodeText;
        byte[] encryptedMessage = encryptionCipher.doFinal(message.getBytes());
        String encryption = Base64.getEncoder().encodeToString(encryptedMessage);

        return encryption;

    }


    // 문자열 공개키를 Key 로 변환
    public static Key loadPublicKey(String stored)
            throws GeneralSecurityException, IOException {
        byte[] data = Base64.getDecoder().decode((stored.getBytes()));
        X509EncodedKeySpec spec = new X509EncodedKeySpec(data);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        return fact.generatePublic(spec);
    }

    // 문자열 개인키를 Private Key로 변환
    public static PrivateKey loadPrivateKey(String key64)
            throws GeneralSecurityException {
        byte[] clear = Base64.getDecoder().decode((key64.getBytes()));
        PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(clear);
        KeyFactory fact = KeyFactory.getInstance("RSA");
        PrivateKey priv = fact.generatePrivate(keySpec);
        Arrays.fill(clear, (byte) 0);
        return priv;
    }

}

개인키와 공개키는  제가 만든 저위에 있는 것을 복사하셔도 되고, MakeKeyData를 이용해서 만드셔도 됩니다. 

그러나, 되도록이면 만들어서 사용하십시오. 공개된 개인키와 공개키를 사용하면 다음에 해킹 당했을 때 위험할 수 있습니다.

그리고, 주의할 점은 저 공개키와 개인키는 무조건 보관해두고 잃어버리시면 안됩니다. ^^

다음에 복호화가 안될꺼니까요.

감사합니다. 

 

반응형
반응형

제가 Java를 처음 시작할때는 eclipse가 아닌 EditPlus라는 편집기를 이용해서 Java개발을 한적도 있습니다. 

그런데, 요즘은 eclipse가 없으면 작업을 못합니다. 

저는 순수 eclipse도 사용하지만, 지난 글에서 이야기한 전자정부 프레임워크 개발 툴을 주로 사용 합니다. 

자바/Java 전자정부 표준프레임워크 개발환경 설치 및 실행하기 https://talkit.tistory.com/685

그래서 저 위에 있는 화면도 전자정부 프레임워크를 실행한 화면입니다.  ^^

오늘은 maven 프로젝트만 만들고 Hello World 만 찍어 보고 끝낼 생각 입니다. ^^

File >> New >> Maven Project 를 실행 하십시오

여기서는 Create a simple project(skip archetype selection)을 선택하고 Next를 누릅니다. 

위와 같이 Gropup 아이디는 가지고 있는 도메인이 있으시면 꺼꾸로 적으시고 ^^ 아니면 임의로 만드시면 됩니다. 

저는 일단 블로그 주소를 꺼꾸로 만들었습니다. ^^

Finish 를 클릭하시면 프로젝트가 생성 됩니다. 

위와 같이 나오면 잘 생성이 된 것입니다. 

JDK가 무쟈게 낮은 버전으로 제가 설정 했네요 ^^ 저건 다시 다음에 설정하고 일단 지금은 간단하게 Hello World만 찍을 꺼여서 실제 Maven 프로젝트의 중요 파일인 pom.xml 만 한번 살펴 보겠습니다. 

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.tistory.talkit</groupId>
  <artifactId>HelloWorld</artifactId>
  <version>0.0.1-SNAPSHOT</version>
</project>

위와 비슷하게 나와 있으면 잘 된 것입니다. ^^

왼쪽에 src/main/java를 클릭하시고 오른쪽 마우스 클릭하셔서 New 선택하시고, Package를 선택하심시오.

그리고 위와 같이 화면이 뜨면 저처럼 저렇게 입력하셔도 되고 본인의 고유 패키지를 입력하십시오.

이렇게 변경 되었을 꺼구요. 저기다가 Java 프로그램을 하나 만들겠습니다. 

여기서는 프로그램이 아니고 Class 입니다. 

패키지를 클릭하고 오른쪽 마우스 누르고, New 누르고, Class를 선택하십시오.

Class 명령은 HelloWorld로 했구요. 나머지는 그대로 두시고, public static void main(String[] args)를 체크하고, Finsih를 누릅니다. 

그러면 위와 같이 나올껍니다. 

저기 중간에 있는 코드 창에다가 우리가 작업하려고 하는 코드를 넣으면 됩니다. 

// TODO Auto-generated method stub

위 코드를 지우시고, 아래 코드로 변경해 보십시오.

		System.out.println("Hello World!!");

위 코드만 넣으시면 됩니다. 

패키지가 다를 수도 있지만, Full Code는 아래와 같습니다. 

package com.tistory.talkit;

public class HelloWorld {

	public static void main(String[] args) {
		
		System.out.println("Hello World!!");

	}

}

저걸 복사하시고 package 부분만 변경해주셔도 됩니다. ^^

그럼 이제 실행해보겠습니다. 

HelloWorld.java를 클릭하시고 오른쪽 마우스를 누른다음에 Run As >> Java Application 순으로 실행하시면 됩니다. 

하단의 콘솔창에 저희가 출력한 Hello World!! 가 출력 되었습니다. ^^

일단 이번에는 여기까지 하고, 다음에는 pom.xml에 필요한 라이버러리를 추가하고 패포를 위한 설정을 하는 등의 과정을 보여 드리겠습니다. 

감사합니다. 

 

반응형
반응형
이클립스 다운로드 사이트에서 CDT를 받으면

순수한 CDT에는 ant 빌드 도구가 없습니다.

그래서 저는, JDT를 설치하고

CDT 플러그인을 추가 했습니다.

그러면 ANT와 MAKE 도구가 모두 이클립스에 탑재 되게 됩니다.

^^;;

http://commons.apache.org/downloads/download_net.cgi
commons-net-1.4.1.zip
에서 1.4.1 버전을 다운로드 하십시오.

http://archive.apache.org/dist/jakarta/oro/

jakarta-oro-2.0.8.zip

2.0.8 버전을 다운로드 하십시오.


zip 파일을 풀어서 jar 파일을 추출 하십시오

그리고 ANT와 CDT가 함께 설치 된 eclipse를 실행 하십시오.

Window >> Preferences >> Ant >> Runtime 을 선택 하시면 아래 그림과 같이 나옵니다.



Ant Home Entries 를 클릭하시면

옆에 있는 Add External Jars 버튼이 활성화 됩니다.

그걸 눌러서 아까 다운 받은 폴더에서 선택 하십시오

그러면 이제 ant를 이용한 리모드 빌드가 준비가 되었습니다.

이제 준비 하셔야 될것은

C 프로젝트와

ant build.xml 파일입니다.

다음 게시물에서는

간단하게 Hello World 프로젝트를 컴파일 하고 실행해 보겠습니다





반응형
반응형

요즘 이클립스를 IDE(통합개발환경)으로 사용하다 보니

이클립스에 많은 프로젝트들이 떠 있습니다.

그런데 이클립스가 점점 느려 지는 겁니당

프로젝트를 진행 할수록 말입니다. ^^;;

이유가 뭘까 하고 생각을 해봤습니다.

이클립스는 특정시간 마다 또는 파일이 변경 될때 마다 관련 파일이 변경 되었는지 찾는 작업을 합니다.

그리고, 관련 파일이 변경되면 다시 컴파일을 해 줍니다.

그래서 첫번째로

저는 java, php, C 프프로젝트를 아예 workspace를 나눠서 사용합니다. ^^;;

두번째가 바로 오늘 이야기 하려는 겁니당

제가 작업하고 있는 곳에 사이트가 좀 많아서 php 프로젝트가 한 7개 쯤 한 workspace에 열려 있습니다.

처음에는 이생각도 했습니다.

저 프로젝트들을 각각 workspace를 만든다

근데 스위치 기능을 이용하면 되겠지만

저것도 상당히 귀찮은 작업입니다. ^^;;

그래서 요즘 사용하게 있는것이 Close Project와 Open Project 기능입니다.

제가 현재 작업하는 프로젝트 외에는 다 Close Project 해 버리는 겁니다. ^^;;

우선 제가 프로젝트 탐색기에는

아래와 같은  프로젝트가 있습니다.

ㅎㅎ 작업들은 숨겼습니다.

저중에서 n으로 시작하는 프로젝트가 지금 제가 사용하는 프로젝트구용

저기 u로 시작하는 프로젝트를 닫으려고 합니다. ^^;;

그러면 오른쪽 마우스를 누르고

Close Project를 선택 하시면 됩니다.


위 그림곽과 같이 말이죠 ^^;;

반대로 열때는

Open Project를 해주시면 됩니다. ^^;;

Open Project를 하면 가끔 물어 보는게 연관있는 프로젝트를 같이 열겠느냐입니다. 이때

예/아니오는 알아서 해주시면 됩니다. ^^;;


반응형
반응형
라인 넘버가 보이지 않을때 라인넘버를 보이게 하는 법입니다.


이클립스의 중간에 있는 회색줄에서 오른쪽 마우스를 누르시면 Show Line Numbers 메뉴가

보입니다. 저 메뉴를 클릭하면 토글로

줄번호가 보였다 안보였다 합니다.




반응형
반응형
eclipse 로 자바 프로젝트를 하시는 분들은 다 시리라고 생각하시면

가금 자바 작업을 하는 저로서는 맨날 까먹어서 ^^;;

적어 둡니다.

우선 이클립스를 열구요

프로젝트를 선택하고

오른쪽 마우스를 클릭합니다.

그리고, 프로퍼티(properties)를 선택한 다음에

Java Compiler 을 선택 하십시오

그리고 다음 그림의 부분을 원하는 버젼으로 선택하시면 됩니다.


JDK는 아무버젼이나 까시구요

단, 상위버전은 불가능하고 현재 버전의 하위 버전만 가능합니다. ^^;;

반응형
반응형
http://shinji.springnote.com/pages/619311

요즘 이슈 관리툴로 mantis를 사용해서 작업을 하고 있다.

trac을 사용하려고 했지만

trac이 잘 안되가지고 ㅋㅋㅋ

맨티도 무지 괜찮은 툴이더라구요

그런데

박재성님이 쓰신 자바 프로젝트 필수 유틸리티 책에 보니깐

trac과 eclipse의  MyLyn을 연동하는 부분이 나옵니다.

그래서 mantis와 eclipse는 연동이 안될까 하는 생각을 했습니다.

네 박사와 구글신에 문의를 해본 결과 위에 링크에 그 답이 있었습니다.

그런데

클라이언트는 제대로 설치를 했는데

제가 한 작업 중에 말썽이 있었습니다. ^^;;

mantis의 Web Service 서버버젼을 압축을 풀명 webservice/mc 이렇게 시작 합니다.

ㅋㅋㅋ 그래서 그대로 두었습니다.

그런데 T.T 저게 문제였습니다.

mc는 무조건 mantis가 설치된 디렉토리 아래에 설치 하십시오

이름은 어떻게 바꿔도 되지만 ^^;;

서버에 web service 설치 하실때 꼭 mantis의 하부 디렉토리에 설치 하셔야 됩니다. ^^;;

저같이 삽질 하는 사람이 없기를 바라면서 적습니다.^^;;

저도 다음에 삽질을 안하려구요.

PS.참 그리고, 이슈 관리툴로 mantis를 선택하게 된 이유는

mantis가 PHP로 되어 있다는 겁니다. ^^;;



반응형
반응형

자바 프로젝트 필수 유틸리티

 

자바 프로젝트 필수 유틸리티 - 10점
박재성 지음/한빛미디어

  원래 이책을 산 이유는 Maven이라는 툴에 대해서 알고 싶어서였습니다. 하지만, 사고 나서 보니 Maven 보다는 이책에서 지향하는 목표가 참 마음에 들었습니다.

  이책의 저자인 박재성님은 자바지기(http://www.javajigi.net)라는 웹사이트를 운영하고 계시는 분이니다. 저는 박재성님의 책을 몇권더 읽었습니다. Spring 과 스트럿츠에 관한 책입니다. 그 책들도 프로젝트 하는데 실질적으로 도움이 많이 되었습니다.

  아직 이책을 다 읽진 못했지만 이책에서 필요한 점들은 도입하고 있습니다. ^^;; 우선 이책을 읽기전에 제가 하는 프로젝트에 여러명의 개발자가 참여 하기 때문에 Subversion을 버전 관리툴로 사용하고 있었습니다. 프로젝트를 진행하다가 이 책을 사게 되었습니다. 우선 애자일(기민한) 방법론에 대한 이야기가 참 마음에 들었습니다. 그리고, 저자가 이야기 하는 이야기 중에 애자일 방법론을 완벽하게 국내에 도입하기는 어렵다 하지만, 필요한 부분만 잘 적용하면 좋은 프로젝트 방법론이 될 것이라는 이야기는 실감이 나는 이야기 입니다. 저도 프로젝트를 많이 해봤지만, 애자일 방법론을 적용하기는 무리가 좀 있다고 생각합니다. 하지만, 방법론에서 사용하는 여러가지는 참고하고 사용해볼만하다고 생각합니다.
 
  그리고 프로젝트 관리툴을 도입하는 이야기가 적혀 있습니다. 이책에서는 Trac에 대해서 이야기 하고 있지만 저는 이번 프로젝트를 하면서 Trac을 도입하고 싶었습니다. ^^;; 하지만, Trac까지는 설치를 했는데 Subversion 연동이 잘 되질 않아서 ^^;; Mantis라는 이슈관리툴로 만족하고 있습니다. 이 책에 보면 Trac과 eclipse의 연동 방법이 나옵니다. 그 부분은 Trac을 Mantis로만 바꿔서 사용하면 그대로 적용할 수 있습니다.

  아직 다 읽지 못했기 때문에 뒤쪽에 소스코드 관리라던지, 정작 필요한 Maven에 관한 내용은 건너 띄고 읽고 있습니다. ^^;;

  Java 프로젝트를 진행하는데 정말 도움이 되는 책입니다. ^^;; 이 책에서 읽은 내용과 인터넷에서 찾은 내용들은 다음 포스트에서 차근 차근 이야기를 풀어 볼까힙니다. ^^;;

http://talkit.tistory.com2009-03-28T01:00:020.31010
반응형

+ Recent posts