여러가지 문제.(죄송합니다....)로 런타임시 아래과 같은 에러메시지가 뜰수있습니다.


java.security.NoSuchAlgorithmException: Cannot find any provider supporting DES/CBC/PKCS5Padding

at javax.crypto.Cipher.getInstance(DashoA12275)
at com.cyberpass.crypto.DES.setKey(DES.java:20)

이럴때는 JCE를 새로받아서 설치하면 되는데

주소는 http://java.sun.com/products/jce/ 에서 들어가면 자세한 내용과 다운받을수있는 페이지를 확인할수 있습니다.


참고로 jdk 1.6 이상인 경우엔 

http://www.oracle.com/technetwork/java/javase/downloads/index.html 맨 아래쪽에 다운로드 링크가 있고


jdk 1.5 이하인경우에는

http://www.oracle.com/us/technologies/java/jce-140292.html 여기서 다운 받으면 되실듯....


jce를 받아서 jre/lib/ext 에 복사합니다.


Posted by 빨강토끼
,

> mysqladmin - u root -p create 생성할DB명


> mysql -u root -p

mysql> grant select, insert, update, delete, create. drop
      ->on 생성한DB명.* to '생성할유저명'@'localhost' identified by '사용할암호'

mysql> grant select, insert, update, delete, create. drop
      ->on 생성한DB명.* to '생성할유저명'@'%' identified by '사용할암호'


'%' 는 모든 외부연결을 허용합니다.



Posted by 빨강토끼
,
일주일간 스프링교육을 받았습니다.
교육시 배운내용을 정리하고 나름의 생각을 추가해보았습니다.
메뉴얼보다는 개인적으로 메모 및 참조용이라서 설명이 그다지 친절하지는 않고
심플합니다. 이해해주세요.^^

먼저
jdk 1.6 버전을 다운받습니다.
http://oracle.com
1.7 버전도 있는데 1.6이 안정적이라고 하더군요.

maven 을 가장 최신버전으로 다운받습니다.
http://maven.apache.org

tomcat 6.0버전을 다운받습니다.
http://tomcat.apache.org
7.0 버전도 있는데 jdk 1.6과 호환이 6.0과 잘되고 안정적이라고 하더군요.

이클립스를 다운받습니다.
http://eclipse.org

jdk 를 설치하고 환경설정에 반영합니다.
JAVA_HOME
커맨드라인에서 javac 를 실행해본다.

mavan을 적당한 폴더에 압축을 풀고 환경설정에 반영합니다.
M2_HOME
커맨드라인에서 mvn -version을 실행해본다.

tomcat을 적당한 폴더에 압출을 풀고 환경설정에 반영합니다.
CATALINA_HOME
커맨드라인에서 startup 을 실행해본다.

mavan 사이트에서 eclipse 용 ide 로 q2e 를 다운받습니다.
m2e를 사용하여 교육할줄 알았는데 강사님이 q2e가 더편하고 좋다고 하더라구요.
회사에서도 그렇고 인터넷에서도 그렇고 m2e를 더많이 사용하는것 같던데....
직접다운로드를 받아서 설치하는것이 아니고 eclipse에서 인스톨하는 방식입니다.
Enabling Features 를 뺀 Addition Integrations, Core features, Tooling 을 설치합니다.

spring 사이트에서 eclipse 용 ide 를 다운받습니다.
springsource.org에서 springide를 검색
직접다운로드를 받아서 설치하는것이 아니고 eclipse에서 인스톨하는 방식입니다.
Core / Spring IDE , Extensions(incubation) / Spring IDE , Extensions / Spring IDE 를 설치 합니다.

eclipse 사이트에서 AspectJ develop tool 을 다운받습니다.
http://www.eclipse.org/ajdt
직접다운로드를 받아서 설치하는것이 아니고 eclipse에서 인스톨하는 방식입니다.
AspectJ develop Tools (Requird) 를 설치합니다.

springsource tool suite(sts)는 교육과정중에 설치하지는 않았습니다.
아무래도 m2e 나 sts 는 개인적으로 공부를 해야될것 같습니다.
Posted by 빨강토끼
,
미들웨어는 애플리케이션들을 연결해 이들이 서로 데이터를 교환할 수 있게 해주는 소프트웨어로 알려져 있습니다.
다시 말해 웹과 분산 환경을 비롯한 각종 IT 인프라나 ERP, SCM, CRM과 같은 기업용 애플리케이션 사이에서 인터페이스가 원활 하도록 완충 작용을 수행하는 것이 미들웨어의 역할인 셈입니다.

WAS
사용자 폭주와 트래픽 증가로 기존의 웹서버만으로는 기업들이 사용자의 요구에 부합하는 동적 서비스를 제공하기가 불가능 해졌습니다. 따라서 이용자의 대규모 접속과 대용량 업무에 대해 안정성과 호환성을 제공하는 자바 표준 기술 기반의 WAS가 등장했습니다. WAS는 웹 기반의 다계층 환경에 적용되는 애플리케이션과 컴포넌트들을 구현하고 운용하기 위한 실행 환경을 제공하는 것으로, 이름 그대로 웹상의 애플리케이션을 위한 서버로서 역할합니다.

MOM
MOM은 메시지 지향 미들웨어(Message Oriented Middleware)의 약자로 애플리케이션과 미들웨어간의 상호 연동을 담당합니다. 즉 애플리케이션에서 미들웨어로의 작업 요청이 바로 이워질 수 있게 하는 것으로 안정성에 초점을 맞추고 있으며 일반적으로 기업용 인프라 소프트웨어에 통합되어 제공됩니다.

TP 모니터
TP(Transaction Processing) 모니터는 분산 컴퓨팅 환경에 필수적인 미들웨어로 서버와 클라이언트 사이에서 이뤄지는 통신 부하를 조절하고 서버 애플리케이션이나 자원을 효율적으로 관리하는데 목적을 둡니다.

ESB
ESB(Enterprise Service Bus)는 EAI(Enterprise Application Integration) 구현을 위한 실제적인 방법 가운데 하나로, 웹서비사나 인텔리전트 라우팅(Intelligent routing) 등의 기술을 바탕으로 SOA를 지원하는 차세대 미들웨어 플랫폼이다. 소프트웨어 서비스와 애플리케이션 컴포넌트간에 연동이 이뤄지도록 경량화된 백본(backbone)을 제공하는 것이 핵심 역할이다.

ORBs
객체요구 브로커(Object Request Brokers)의 줄임말로 애플리케이션과 네크워크 서비스 사이의 데이터 전달 기능을 담당한다. 서비스와 상호운영 애플리케이션을 위한 더 넓은 아키텍처 표준들의 핵심으로 이해할 수 있습니다.


Posted by 빨강토끼
,
컴포넌트 기술들의 통신 메커니즘
COM : RPC 기반의 DCOM
JAVA : RMI
CORBA : IIOP

문제점 : 각 컴포넌트간의 상호운영성이 떨어집니다.

SOAP의 등장
SOAP(Simple Object Access)은 XML과 HTTP를 사용하여 플랫폼에 독집적으로 서버스 혹은 분산 객체를 액세스하는 방법을 정의합니다.

SOAP는 XML 메시지를 처리하는 플랫폼이나 프로그래밍 언어를 제한하지 않으므로 HTTP 프로토콜을 이해하고
SOAP의 XML메시지를 이해하기만 한다면 어떤 프로그래밍 언어로 구현을 하든지 상관이 없습니다.

Web Service 개념
인터넷 상에서 SOAP 메시지와 HTTP를 통해 운영체제나 구현기술에 구애 받지 않고 다양한 크라이언트에게 어떤 기능을 제공하는 것을 웹서비스라 합니다.

"전통적으로 X.25와 같이 보안성이 높은 네크워크를 사용하거나 암호화된 TCP 메시지를 통해 슨인 요청을 받고 그에 대한 처리결과를 반환해 왔다. 메인 프레임 기반으로 구성된 금융권의 계정계 시스템에서 이러한 방식은 소위 '전문' 방식이라 하며 아직도 많이 사용하는 메시지 처리 기법이다. 전문방식의 문제점은 스크립트 언어 기반의 클라이언트가 X.25 혹은 TCP와 같은 하위 프로토콜 수준의 프로그래밍이 쉽지 않다는 것돠 클라이언트로 하여금 카드회사의 프로토콜을 따르도록 강요하는 정도이다. 따라서 전문 방식의 통신은 카드 가맹점들이 사용하는 POS(Point of Sale 시스템을 제약할 뿐만 아니라 카드 회사의 비즈니스 영역을 제한하는 효과를 가져올 수 있다."

Web Service 적용상의 문제점과 대응책들

문제점
* SOAP 스펙을 준수하는 웹서비스 구현 사이의 미미한 차이점에서 오는 호환성 문제
* SOAP 메시지에 대한 다양한 기능 강화
* SOAP 메시지에 대한 인증. 암호화와 같은 보안에 대한 표준 스펙부재
* SOAP과 HTTP를 통해 느슨하게 연결된 (loosely coupled) 웹서비스 사이의 트랜잭션 요구
* SOAP 메시지의 전달에 대한 신뢰성 부재
* WSDL(Web Service Descripttion Language)을 통해 전달되는 웹 서비스의 메타 데이터에 대한 상세 내역 결여

대응책
* Compatibility
WS-I(WS-Interoperability) Base Profile :  SOAP 표준과 WSDL 을 적용하고 구현하는데 호환성을 지키기 위한
가이드 라인 및 테스트 도구

* Messaging
WS-Addressing : SOAP 메시지가 HTTP 뿐만 아니라 TCP나 SMTP 등의 다른 트랜스포트를 통해서도 전송이 될 수 있도록 메시지를 수신하는 서비스에 대한 정보를 SOAP 헤더에 명시함으로써 메시지가 인터넷 상에 다양한
매개체를 통해 라우팅 될 수 있도록 하는 것을 목적으로 합니다.

MTOM(Message Transmission Optimization Mechanism): SOAP 메시지를 통해 커다란 바이너리 데이터를
전송하기 위해 고안된 표준 스펙입니다. SOAP은 XML을 사용하고 XML은 텍스트를 사용하기 때문에 바이너리 데이터를 전송하기 위해서는 Base64 혹은 Uuencoding 등의 바이너리 인코딩을 사용해야합니다. 이러한 변환 작업은
SOAP 메시지의 크기를 33% 정도 더 크게 만들며, 메시지 크기가 커짐에 따라 네트워크 대역폭 역시 손해를 감수햐야만 합니다. MTOM은 이렇게 바이너리 데이터를 전송할 때 효율적으로 SOAP 메시지를 구성하도록
 MIME(Multi-part Message Encoding)을 사용하여 SOAP 메시지를 재구성하는 방법을 정의하는 표준입니다.
MTOM을 사용하여 바이너리 데이터가 직접 전송되게됩니다.

* Security of Web Service
SOAP는 보안을 위하여 일반적으로 HTTP에 적용할 수 있는 인증(authentication) 기술과
SSL(Secure Socket Layer) 기반의 보안 통신을 사용하면 된다고 생각했기 때문에 원격 호출 개념이 강한 웹 서비스에는 이러한 기술이 한계를 나타낼 수 밖에 없었습니다.
첫째. 웹 서비스가 HTTP를 트랜스포트로 사용할 때 많이 사용되는 SSL 과 같은 기술은 트랜스포트 수준의 보안으로써
클라이언트와 서비스가 직접 연결되는 경우에만 유효한 보안 채널이라는 접입니다. 인터넷 상에서 클라이언트와
사이에는 프록시 서버, 캐시 서버, 방화벽등 다양한 중간 매개체가 존재할 수 있기 때문에, SSL 과 같이 종단간
(Point-to-Point) 보안은 취약할 수 밖에 없습니다.
둘째. SOAP 메시지가 HTTP 가 아닌 TCP 나 SMTP 같은 다른 트랜스포트를 통해 전송될때는 SSL 과 같이 HTTP에
의존적인 보안을 사용할 수 없습니다.
WS-Security, WS-Trust, WS-SecurityConversion : WS-Security가 핵심이되며 이 스펙은 SOAP 메시지 자체를
메시지 수준에서 인증하거나 암호화하는데 필요한 표준을 정의하고 있습니다.

* Reliability
WS-ReliableMessagine : 신뢰도가 낮은 네트워크나 인프라 상황에서 신뢰도 놓은 SOAP 메시지의 전달을 위해
정의된 표준입니다.

* Transaction
WS-AtomicTransaction, WS-Coordination : SOAP 메시지를 통해 2-phase commit 프로토콜을 구현하며 플랫폼과
트랜잭션 관리자와 무관하게 분산 트랜잭션을 처리할 수 있도록 하는 웹 서비스 표준입니다.

* Rich Metadata
SOAP와 같이 등장한 스펙이 웹서비스의 메타 데이터에 대한 표준인 WSDL(Web Service Description Language)
입니다. WSDL은 웹서비스가 어떤 기능을 가지고 있으며 매개변수는 어떠한지에 대한 정보뿐만아니라 웹서비스를
호출하는데 필요한 트랜스포트 정보역시 제공합니다. 하지만 서비스가 어떤 보안을 사용하는지, 세션을 사용하는지,
트랜잭션을 지우너하는지 등의 정보는 제공하지 않습니다.
WS-Policy, WS-MetadataExchange : 웹서비스가 어떤 방식으로 메시지를 주고 받는지에 대한 풍부한 메타데이터를
제공합니다.


Posted by 빨강토끼
,
폴드 기능
코드의 특정영역을 접을(fold) 수 있는 기능입니다.
먼저 v 혹은 ctrl+v 를 눌러 원하는 영역을 선택후
z를 누른후 f (접기)
z를 누른후 o (접기해제)
z를 누른후 c (다시접기)

해더파일 읽어오기
소스파일에서 읽어오고자 하는 해더 파일의 이름에 커서를 둡니다.
ctrl+wf 를 입력하면 창이 수평으로 분할 되면서 파일이 열리게 됩니다.

자동완성 기능의 사용
타이핑을 하다가 ctrl+p 나 ctrl+n 을 누르면 자동완성기능을 이용할 수 있습니다.
ctrl+p (커서 위치에게부터 위를 향하면서 자동완성이 가능한 단어가 있는지를 찾음)
ctrl+n (아래로 내려가면서 찾음)
일반적으로 ctrl+n 보다 ctrl+p 를 많이 사용합니다.

여러개의 파일 편집
$vim file01.c file02.c file03.c
:b1 ~ :b3 가 매칭이 됩니다.
:b2 를 입력하면 file02.c 가 열립니다.
:bw 누르면 파일을 닫습니다.

여러개의 파일 편집2
$vim -p file01.c file02.c file03.c
지정한 문서들이 탭형식으로 열립니다.
:tabn (다음탭), :tabp (이전탭)
:tabnew (새로운탭으로 문서열기)

셀 명령어 사용
:!명령어 (vim으로 빠져 나갔다가 명령이 수행된후 다시 vim으로 돌아감)
Ctrl+z (셀로 빠져나갔다가 vim 으로 돌아오려면 fg 명령사용)

Posted by 빨강토끼
,
rsync 에는 ssh 를 이용하여 원격서버에 접속하여 동기화를 하는 기능이 있습니다.

대략의 내용은 아래와 같습니다.
rsync -azrtv --delete --stats -e "ssh -i /root/.ssh/개인키" 원본서버계정@원본서버주소:원본경로/ /백업경로/

그럼. 자세히...

일단 접속하기 위한 원격주소의 계정 정보가 필요합니다.
즉 ssh 로 원격서버로 로그인을 하는것입니다.
하지만 crontab을 이용하여 자동으로 스케쥴링을 하려면은 암호를 입력하는 단계가 걸림돌이죠
바로 자동로그인을 해야된다는 의미입니다.

그러기위해서는 ssh 키를 이용하는데
먼저 키를 생성합니다. 주의 할점은 개인키를 가진쪽이 공개키를 가진쪽으로 접속한다는 것입니다.
즉... 접속대상서버가 아니라 접속을 시도하는 백업서버에서 키를 만든다는 것입니다.
[~]$ ssh-keygen -d -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/inkaftp/.ssh/id_rsa):
Created directory '/home/inkaftp/.ssh'.
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again: <ENTER>
Your identification has been saved in /home/inkaftp/.ssh/id_rsa.
Your public key has been saved in /home/inkaftp/.ssh/id_rsa.pub.
The key fingerprint is:
11:ce:7a:2d:60:0d:09:b3:2a:8b:3f:de:9a:8f:96:20 root@nhn.com

아무것도 입력하지않고 엔터만 두번누르면 RSA 방식의 키가 생성됩니다.

.ssh/id_rsa
.ssh/id_rsa.pub

위와 같은 파일이 생성된것을 발견할 수 있습니다.

그다음으로는 공개키를 전송합니다.
#scp /root/.ssh/id_rsa.pub 원본서버계정@원본서버아이피:~/.ssh/authorized_keys
원본서버계정에 .ssh 디렉토리가 없으면 미리 만들어둬야합니다.
패스워드를 입력하면 끝

(하지만 전 scp 가 잘되지 않아서 그냥...ftp 로 전송했습니다.)

그럼 접속이 잘되는지 확인해봅시다.
#ssh -i /root/.ssh/id_rsa 원본서버계정@원본서버아이피
RSA key fingerprint is 03:c0:4d:25:a6:5d:0c:41:70:a7:11:0e:f7:12:ee:c8.
Are you sure you want to continue connecting (yes/no)? yes <ENTER>
접속이 잘된다면 성공

이제 본격적으로 rsync를 사용해봅시다.
rsync -azrtv --delete --stats -e "ssh -i /root/.ssh/id_rsa" 원본서버계정@원본서버주소:원본경로/ /백업경로/

-a : 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v : 자세한 정보출력
-z : 전송시 압축
-r : 하위디렉토리포함
-e ssh : ssh를 이용한 rsync 동기화
--delete : 서버동기화후 원본에서 파일이 삭제되면 백업에서도 파일을 삭제
--stats : 결과출력

백업이 잘되면 자동화를 위하여 cron에 등록합니다.
먼저 rsync 명령을 실행할 .sh 파일을 만듭니다.
# vi ./rsync_cron.sh
rsync -azrtv --delete --stats -e "ssh -i /root/.ssh/id_rsa" 원본서버계정@원본서버주소:원본경로/ /백업경로/

파일을 만들고나서는 실행권한을 줍니다.
#chmod 755 ./rsync_cron.sh

crontab 을 실행합니다.
#crontab -e
30 4 * * * /root/rsync_cron.sh

참조
http://blog.naver.com/forioso?Redirect=Log&logNo=10025992292
Posted by 빨강토끼
,
솔찍히 조금만 구글링을 하면 보다더 자세히 설명해주고 있는곳이 많지만 제가 필요할때 마다 참조하려고 개인적정리입니다. (즉 대충... 자세한 설명은 생략)

1. redmine DB 백업
mysqldump -uroot -p비밀번호 redmine디비명 | gzip > /백업경로/redmine_`date +%y_%m_%d`.gz

2. redmine 첨부파일백업
rsync -avz --delete /redmine설치경로/files /백업경로
or
rsync -avz --delete -e ssh /redmine설치경로/files 사용자계정@서버아이피:/원격의백업경로

-a : 심볼릭 링크, 속성, 퍼미션, 소유권 등 보존
-v : 자세한 정보출력
-z : 전송시 압축
-r : 하위디렉토리포함
-e ssh : ssh를 이용한 rsync 동기화
--delete 서버동기화후 원본에서 파일이 삭제되면 백업에서도 파일을 삭제

3. 일정날짜가 지난 백업파일을 삭제
find /백업경로 -name *.gz -mtime +90 -delete

4. 위의 과정을 진행하는 sh 파일작성
vim bkscript.sh

5. crontab 을 사용하여 주기별로 sh 파일을 실행
#분 시 일 월 요일(월=1 화=2 ... 일=7)
0 6 * * 6 /백업경로/bkscript.sh

참조
http://khtinsoft.egloos.com/379902
http://blog.nul.kr/246
Posted by 빨강토끼
,

maven 으로 jar 를 생성하여 배포할때 종속적인(dependency) 라이브라리들이 실행시 필요합니다.

war 프로젝트는 WEB-INF 라는 폴더아래로 필요한것들을 넣어주지만 jar에서는 일일히 dependency로 추가된
라이브러리들을 처리하는것이 무척 귀찮고 막막합니다.

하나씩 잡아줘보지만 한두개도 아니고....
이럴땐 2가지 방법이 있습니다.

첫번째는 dependency를 따로 폴더안으로 모두 복사해오고 META-INF/MENIFEST.MF를 수정하는 것입니다.
아래와 같이 플러그인을 추가하고 goal로 install을 실행하면 모든 dependency 들이 lib안으로 복사하여 모으고 jar파일생성시  META-INF/MENIFEST.MF를 수정합니다.




두번째방법은 jar 안에 모든 dependency를 포함시키는 것입니다. jar하나로 모든 라이브러리들이 포함되어 실행이 되는 구조입니다. 당연히 파일크기가 커지겠지요.



그리고
maven assembly:assembly 라고 콘솔에서 실행하면
abc-0.0.1-SNAPSHOT.jar
abc-0.0.1-SNAPSHOT-jar-with-dependencies.jar

위와 같이 라이브러리가 포함된 jar와 일반 jar 가 생성된것이 보입니다.

참조

http://entireboy.egloos.com/4615383
http://redrebel.tistory.com/entry/maven-으로-생성한-jar-파일이-실행이-안될때-NullPointerException


Posted by 빨강토끼
,
자바를 잘몰라 배우고 있는데 C/C++ 처럼 seek 을 이용하여 임의의 파일포인터위치부터 읽기가 가능한 함수를 찾았습니다.

RandomAccessFile() 입니다.
InputStream이나 OutputStream의 서브 클래스는 아니지만 파일의 읽기, 쓰기를 위한 독립적인 메소드를 제공합니다.
아래는 간단한 예제입니다.




내용은 간단합니다. 텍스트형식의 파일을 읽고 10줄까지 화면에 뿌린후 읽은곳 까지의 포인터위치를 저장후
파일을 닫고 다시 연후 좀전에 저장한 포인터 위치부터 읽어서 화면에 뿌리는 형식입니다.


참조
http://docs.oracle.com/javase/1.4.2/docs/api/java/io/RandomAccessFile.html
Posted by 빨강토끼
,