팩토리 메소드 패턴의 정의??

생성하려는 객체의 클래스를 정확히 지정하지 않으면서 객체를 만드는 방법을 결정하는것
만드는 방법을 객체를 만드는 또 다른 메소드를 정의하여 처리. 
객체를 생성하기 위해 인터페이스를 정의하지만, 어떤 클래스의 인스턴스를 생성할지에 대한 결정은 서브클래스가 정하도록 한다. 

 
슈퍼 클래스에 기본적인 로직의 흐름을 만들고, 그 기능의 일부를 추상 메소드나 오버라이딩이 가능한 protected 메소드 등으로 만든 뒤, 서브 클래스에서 이런 메소드를 필요에 맞게 구현해서 사용하도록 하는 방법

스프링에서 자주 이용을 하는 디자인 패턴 

 
DNS 설정 중 값이 다시 원래대로 돌아오는 경우

변경 후 w!  로 저장.. 
1. What is Spring??
  스프링은 자바 엔터프라이즈 애플리케이션 개발에 사용되는 애플리케이션 프레임워이다.

스프링 컨테이너
스프링 : 스프링 컨테이너 or 애플리케이션 컨테스트라는 불리우는 스프링 런타임 엔진 제공.

스프링 컨테이너 : 설정정보를 참고해서 애플리케이션 구성하는 오브젝트를 생성, 관리, 독립적으로 동작할 수도 있지만 보통 웹 모듈에서는 동작하는 서비스나 서블릿으로 등록해서 사용한다. 
 

공통 프로그래밍 모델 : loC/Di, 서비스 추상화, AOP 
  Framework : 애플리케이션을 구성하는 오브젝트가 생성되고 동작하는 방시기에 대한 틀과, 코드 작성 기준을 제시


스피링의 3가지 핵심 프로그래밍 모델 

1. IoC/Di : 오브젝트의 생명주기와 의존관계에 대한 프로그램이 모델

2. 서비스 추상화 : 환경이나 서버, 특정 기술에 종속되지 않고, 이식성이 뛰어나는 이유-> 서비스 추상화 했기때문

3. AOP : 애플리케이션 코드에 산재해서 나타나는 부가적인 기능을 독립적으로 모듈화하는 프로그래밍 모델 

 

'-컴퓨터 지식 창고- > Spring' 카테고리의 다른 글

Spring 기본 설정(포털 강의 中)  (0) 2012.04.28
준비물 : Customize 할 Ubuntu iso 파일,  우분투 설치된 PC, 키보드? ㅋ 

일단 제가 하는 방식은 iso 파일을 마운트 시키고 복사하고 해서 하는 방법으로 별로 어렵지 않습니다. 그리고 커널이나 기타 옵션은 건들지 않겠습니다.. 왜냐?? ㅋ 제가 그럴 실력이 없습ㄴ다.  죄송요~ ㅋ

자 이제 시작하겠습니다 ^^



첫번째로 툴을 설치를 해야 합니다.
이것은 아마도 squashfs 파일을 건들고 iso 이미지 파일로 변환 시켜주는 툴을 둘다 설치하는 것입니다.


sudo apt-get install squashfs-tools genisoimage
 
 
두번째, 커스터마이즈를 하기 위헤서는 원본 우분트 파일이 필요한데요~ 이때 원본 iso 파일을 마운트 시켜줍니다. ^^

sudo mkdir mnt     (원본 파일을 마운트시킬 폴더)
sudo mount -o loop ubuntu.iso       (sudo mount -o loop 마운트 시킬 파일) 

위에 처럼 하면 마운트가 된다 .. 확인 방법은 명령어를 까먹음 ㅠㅠ 죄송(cd mnt 해서 들어가면 씨디에 있는 파일이 마운트를 확인 가능함)

세번째,  iso 파일의 내용을 풀어준다

sudo mkdir extract    (iso 푼 내용을 넣을 폴더 생성)
sudo rsync --exclude=/casper/filesystem.squashfs -a mnt/extract 


 네번째, 파일 시스템 내용 풀고 시스템 내용 복사

mkdir squashfs (시스템 파일을 마운트 시킬 폴더)
sudo mount -t squashfs -o loop mnt/casper/filesystem.squashfs squashfs 

시스템 파일 복사
mkdir systemedit   (시스템 파일 복사할 폴더 생성)
sudo cp -a squashfs/* systemedit/ 

 
다섯번째, chroot를 하기전에 네트워크 설정과 호스트르 ㄹ복사 해주어야 함.(임시로 파일 시스템 구성)
(네트워크 연결을 위한 시스템 구성)
sudo cp /etc/resolv.conf systemedit/etc/
sudo cp /etc/hosts systemedit/etc/

임시 시스템 구성
sudo mount --bind /dev/ systemedit/dev
sudo chroot systemedit      (권한이 systemedit 로 쉘이 실행)

mount -t proc none /proc
mount -t sysfs none /sys

(GPG키 갱신)
export HOME=/root
export LC_ALL=C
 
 
여섯번째, 패키지 설치하기(평범하게 설치하심 됩니다 ... )

apt-get update
apt-get install <설치할 패키지>

칠곱번째, 정리!!! 커스텀하면서 했던 것들을 정리하는 것임.

apt-get clean

rm -rf /tmp/* ~/.bash_history

rm /etc/resolv.conf

umount /proc
umount /sys
exit
sudo umount systemedit/dev 

마지막!!!! 메니페스트 재구성 및 수정한 파일 시스템 압축 그리고!!! ISO 파일 화@@

메니페스트 재구성

chmod +w extract/casper/filesystem.manifest
sudo chroot edit dpkg-query -W --showformat='${Package} ${Version}\n' > extract/casper/filesystem.manifest
sudo cp extract/casper/filesystem.manifest extract/casper/filesystem.manifest-desktop
sudo sed -i '/ubiquity/d' extract/casper/filesystem.manifest-desktop

수정한 파일 시스템을 압축
sudo mksquashfs systemedit extract/casper/filesystem.squashfs

기존의 MD5 삭제하고 새로 구성
sudo -s
rm extract/md5sum.txt
(cd extract && find . -type f -print0 | xargs -0 md5sum > md5sum.txt)
exit

ISO 파일 만들기

 
cd extract
sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-custom.iso . 
 

 
생각보다 간단함... 
wget 받을 인터넷 파일 경로

 이 명령어를 친 곳에 파일이 있다..`
Java로 SSL 프로토콜을 위한 키를 생성하기 위해 keytool를 이용함. ㅋ

 여기서 Keytool 이란!!
#Keytool
키와 인증서를 관리하는 유틸로서, 개인키 공개키 및 자신이 권한을 부여한 인증서를 관리 할 수 있게 하며, 자료의 보장과 전자서명에 의한 인증을 관리할수 있게 한다. 여기서 생성된 키와 인증서는 keystore라는 곳에 저장을 하게 되며 파일로 구현이 되며, 비밀번호를 이용하여 키나 인증서를 보호한다. 
 
그럼 생성 방법은?? ㅋ

-개인키 생성
 
keytool -genkey -keyalg RSA -keystore private
 
 
 
위와 같은 화면이 나옵니다. ^^ 명령어에서-keyalg 는 RSA라는 알고리즘을 사용한다는 것!!

공개키 추출

keytool -export -file file -keystore privateServer

privateServer 라는 것에서 file 이라는 이름으로 추출한다는 의미 

privateServer(위에서 생성한 키)의 비밀번호를 입력을 하면 공개키가 추출이 된다. 이 키를 이용하면된다. ^

공개키를 publicServer라는 파일 에 저장

keytool -import -keystore publicServer -file key
 
이렇게 하면 keytool 를 이용하여 privatekey와 publickey 를 관리 할 수 있을 것이다! 
http://kwakyc87.tistory.com/trackback/108
java -Djavax.net.ssl.trustStore=생성한 키 -Djavax.net.ssl.trustStorePassword=비밀번호 EchoCleint

이렇게 써야 실행을 할 것을!!!! 간단하게 하는 방법이 있다.!! ㅎ

서버와 클라이언트에 각각 메인 첫 부분에다가

System.setProperty("javax.net.ssl.trustStore", "키가 있는 경로");

System.setProperty("javax.net.ssl.trustStorePassword","생성한 키 비밀번호");

 
이런식으로 해주면 된다!! ㅎ 

서버도 마찬가지로 해주면 될듯싶다ㅏ..

이 코드가 생성자에서 먹힐 줄 알았는데 안 먹힌다..... -ㅁ- 

'-컴퓨터 지식 창고- > JAVA' 카테고리의 다른 글

자바에서 생략되어 있는 형태 - 출처 : 열혈강의 JAVA  (0) 2012.02.25
자바 중첩 클래스  (0) 2012.02.25
keytool를 이용한 키 생성!!  (0) 2011.12.06
Java + SSL 구현  (0) 2011.11.19
Token.....  (0) 2011.07.29
SSL를 자바로 구현한 소스!!!(서버와 클라이언트)

여기서 SSL이란??
SSL(Secure Socket Layer)은 넷스케이프사세ㅓ 전자상거래 등의 보안을 위해 개발... 이후 TLS(Transport Layer Security)라는 이름으로 표준화 되었다. SSL은 특히 네트워크 레이어의 암호화 방식이기때문에 HTTP뿐만 아니라 NNTP, FTP등에도 사용할 수 있는 장점이 있다. 기본적으로 Authentication, Encryption Integrity를  보장한다. 라고 위키 백과에서 말을 하고 있네요 ^^

SSL프로토콜의 일밙거인 규칙!!

1. SSL  통신은 항상 두 개의 컴퓨터 간에서만 이루어지며, 3개 혹은 그 이상의 통신은 있을 수 없다.... ㅋ

2. 한 쪽은 항상 서버 역할을 하며, 다른 한쪽은 항상 클라이언트 역할을 해야한다.

SSL 통신 순서

1. 클라이언트가 서버에 접속하면 ㅎ서버 인증서(서버의 공개키를 인증기관이 전자서명으로 인증한것)을 전송 받는다.

2. 클라이언트는 받은 서버 인증서를 분석하여 신뢰할 수 있는 인증서 인지를 검토한, 서버의 공개키를 추출한다.

3., 세션키로 사용할 임의의 메시지를 서버의 공개키로 암호화하여 서버로 전송

4. 서버에서는 비밀키로 세션키를 복호화하여 그 키르 ㄹ사용하여 대칭키 암호방식으로 메시지를 암호화, 클라이언트와 통신하게 된다. 


구현 소스!!
일단 키 값을 생성을 하여야 한다,
생성한 키는 클라이언트와 서버에 둘다 있어야 한다!!! ㅠ
keytool -genkey -keystore mySrvKeystore -keyalg RSA
 

서버 소스

import javax.net.ssl.SSLServerSocket;
import javax.net.ssl.SSLServerSocketFactory;
import javax.net.ssl.SSLSocket;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class EchoServer{
public static void main(String[] args){
try{
SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory)SSLServerSocketFactory.getDefault();
SSLServerSocket sslserversocket = (SSLServerSocket)sslserversocketfactory.createServerSocket(443);
System.out.println("Wating Connection");
while(true){
SSLSocket socket = (SSLSocket)sslserversocket.accept();
ThreadServer thread = new ThreadServer(socket);
thread.start();
}
}catch(Exception ex){ System.out.println(ex);}
}
}

class ThreadServer extends Thread{
private SSLServerSocket sslsocket;
private SSLSocket socket;
private InputStream input;
private InputStreamReader reader;
private BufferedReader br;

public ThreadServer(SSLSocket socket){
this.socket = socket;
}

public void run(){
try{
String fromClient = null;
input = socket.getInputStream();
reader = new InputStreamReader(input);
br = new BufferedReader(reader);

while((fromClient = br.readLine())!=null){
System.out.println(fromClient);
System.out.flush();
}
}catch(Exception e){
}
}
}


이 서버 소스를 컴파일 한후 실행을 하여한다.
만약 그냥 실행을 했을 경우?? ㅎ

 
이렇게 나와서 실행이 안된다....

java -Djavax.net.ssl.keyStore=생성한 키 -Djavax.net.ssl.keyStorePassword=비밀번호 EchoServer
 
이렇게 해야 실행이 된다....


클라이언트
 
import javax.net.ssl.SSLSocket;
import javax.net.ssl.SSLSocketFactory;
import java.io.*;

public
class EchoClient {
    public
            static
    void
            main(String[] arstring) {
        try {
            SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
            SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket("localhost", 9999);

            InputStream inputstream = System.in;
            InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
            BufferedReader bufferedreader = new BufferedReader(inputstreamreader);

            OutputStream outputstream = sslsocket.getOutputStream();
            OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
            BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

            String string = null;
            while ((string = bufferedreader.readLine()) != null) {
                bufferedwriter.write(string + '\n');
                bufferedwriter.flush();
            }
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }
}
      

실행

서버와 마찬가지로 해줘야한다...

java -Djavax.net.ssl.trustStore=생성한 키 -Djavax.net.ssl.trustStorePassword=비밀번호 EchoCleint

c출처  : http://stilius.net/java/java_ssl.php

+ Recent posts