1. ESB(Enterprise Service Bus)의 개요
가. ESB (Enterprise Service Bus)의 정의(다양한 정의가 가능합니다.)
ESB(Enterprise Service Bus)는 웹서비스(Web Service), 인텔리전스 라우팅(Intelligent routing), 트랜스포메이션(Transformation) 기술을 기반으로 SOA(Service Oriented Architecture)를 지원하는 미들웨어 플랫폼이다.
- ESB = EAI (Enterprise Application Integration) + 표준화 + 분산화
- 비즈니스 내에서 서비스, 애플리케이션, 자원을 연결하고 통합하는 미들웨어 또는 인프라 
- 비즈니스 단위들의 통합을 수월하게 하면서 이종의 플랫폼과 환경들을 잇는 가교 역할을 하는 인프라 
- 느슨하게 결합되었거나 결합되지 않은 구성 요소들 간에 중재적인 관계와 직접 통신을 지원하는 웹서비스가 가능한 인프라 : Gartner Group
- ESB란 표시는 그 제품이 MOM과 웹서비스 프로토콜 모두를 지원하는 일종의 통합 미들웨어 제품
- 표준 기반 통합 백본, 통합 메시징, 웹서비스, 변환, 그리고 인텔리전트 라우팅 : Sonic Software
- 통신과 연결, 변환, 보안을 위한 표준화된 인터페이스를 구현하는 엔터프라이즈 플랫폼
- 쉽게 말해 웹스피어 MQ와 그 밖의 다른 웹스피어 브로커 그리고 통합 서버를 가지고 있다면 당신은 ESB를 가지고 있는것 : Bob sutor, IBM
- ESB는 벤더의 독자 기술을 판매하기 위한 일종의 마케팅 전술 : 채펠 앤 어소시에이트 CEO
나. ESB (Enterprise Service Bus)가 주목 받은 이유
- EAI에서 Hub and Spoke 통합방식의 한계점 발견
- SOA의 핵심 필요 기능으로 중요성 증대

 특징 전통적인 EAI  ESB 
 통합의 종류 어플리케이션 통합  서비스 통합, 서비스 호스팅 
 통합 방안 시스템별 어댑터 사용으로 복잡성 증가  표준 기술 사용한 단순 통합 
 표준 벤터별 전송기술 상이  개방형 표준(웹서비스) 
 통합형태 단단한 결합(Static. 1:1 결합)  느슨한 결합(Dynamic, 1:N 결합) 
 비용 통합대상 시스템별 어댑터 구입 또는 개발로 지속적 비용 발생  동일 표준 기반이므로 추가 개발비용 절감, 비즈니스 로직 재사용을 통합 비용 절감 
 구현 아키텍처 집중형 (Hub & Spoke)  분산형 (Distributed) 

2. ESB(Enterprise Service Bus)의 중요성 및 개념도
가. ESB(Enterprise Service Bus)의 중요성
- 분산된 서비스 컴포넌트를 쉽게 통합 연동할 수 있어 신뢰성 있는 메시지 통신이 가능
- 각 레거시 시스템과의 연동을 위한 다양한 표준 프로토콜의 지원을 기본으로, 재사용 가능한 컴포넌트들을 조립함으로써 서비스 지향적인 기업 환경을 만들 수 있는 기반 제공
나. ESB(Enterprise Service Bus)의 개념도


3. ESB의 특징 및 구성 요소
가. ESB의 특징
- 다양한 시스템과 연동하기 위한 멀치 프로토콜 지원
- 느슨한 결합(loosely coupled)
- 소프트웨어 컴포넌트를 조합하여 서비스를 조립하는 BPM 지원
- 이벤트 지향적, 표준 지향적
나. ESB의 구성요소
1) 어댑터 형태의 레거시 연동 컴포넌트
-  ESB는 기본적으로 다양한 표준 프로토콜을 어댑터형태로 지원해야 한다.
- 통합 개발 환경에서 플러거블(Pluggable)할 수 있도록 간단한 형태여야 한다.
2) 메시지의 변환, 가공
- 데이터 포맷과 형태 등을 통합 개발 환경 등을 통해 자유롭게 변화하고 가공한다.
3) BPM
- 다양한 시스템의 데이터와 애플리케이션과의 연동을 통해 하나의 서비스를 이용한다.
4) 컨트롤과 모니터링
- 여러과정들은 통합적인 조작과 모니터링이 가능해야 한다. 
- 모니터링의 대상 : 어댑터 단에서의 진행되고 있는 프로세스의 상태 및 데이터 값
5) 통합개발환경
- 통합개발환경은 ESB에서 필요한 요소 중 하나이다. 

ESB의 특징 참고
http://jin11010.blog.me/24517450

SOA를 실현하는 ESB 

ESB 의 이해와 기술 동향
http://blog.daum.net/comoffi/8516983 

Apache serviceMix 분석
http://www.dbguide.net/knowledge.db?cmd=view&boardUid=126051&boardConfigUid=19&boardStep=&categoryUid=574

Apache synapse 분석

http://www.dbguide.net/knowledge.db?cmd=view&boardUid=126062&boardConfigUid=19&boardStep=&categoryUid=574  


Posted by 빨강토끼
,
ActiveMQ in Action 이라는 책의 예제소스를 실행중에 챕터4에 보시면 brokerB 를 실행하는 단계가 있습니다.
그런데 책에 나와있는 주소나 사이트에서 다운받은 소스로는 윈도우환경에서 아래와 같이 에러가 나며 실행이 안됩니다.

C:\apache-activemq-5.4.1>bin\activemq \ 

xbean:file:C:/amq-in-action-example-src/src/main/resources/org/apache/activemq/book/ch4/brokerB.xml

Java Runtime: Sun Microsystems Inc. 1.6.0_21 C:\Program Files\Java\jdk1.6.0_21\jre
Heap sizes: current=15872k free=14606k max=506816k
JVM args: -Dcom.sun.management.jmxremote -Xmx512M -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dactivemq.classpath=C:\apache-activemq-5.4.1\bin\../conf;C:\apache-
activemq-5.4.1\bin\../conf; -Dactivemq.home=C:\apache-activemq-5.4.1\bin\.. -Dactivemq.base=C:\apache-activemq-5.4.1\bin\..
ACTIVEMQ_HOME: C:\apache-activemq-5.4.1\bin\..
ACTIVEMQ_BASE: C:\apache-activemq-5.4.1\bin\..
Loading message broker from: xbean:file:C:/amq-in-action-example-src/src/main/resources/org/apache/activemq/book/ch4/brokerB.xml
ERROR: java.lang.RuntimeException: Failed to execute start task. Reason: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from URL [file:C:/amq-in-action-example-src/src/main/re
sources/org/apache/activemq/book/ch4/brokerB.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'broker'.

java.lang.RuntimeException: Failed to execute start task. Reason: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 12 in XML document from URL [file:C:/amq-in-action-example-src/src/main/resources
/org/apache/activemq/book/ch4/brokerB.xml] is invalid; nested exception is org.xml.sax.SAXParseException: cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'broker'.


The line that it is complaining about is Line12:

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="BrokerB" dataDirectory="${activemq.base}/data"> 


 이유는 brokerB.XML 파일이 잘못되서입니다.
http://code.google.com/p/activemq-in-action/downloads/list  에서 문제가 수정된 가장최신의 소스를 다운받으실수 있습니다. 

 
Posted by 빨강토끼
,
history : 이전에 입력한 명령들을 보여줍니다.
!! :  이전명령을 다시 실행합니다.
!n : n번째 행의 명령을 실행합니다.
!-n : n번째 이전의 명령을 실행합니다.
!문자열 : 문자열로 시작하는 가장최근 명령을 실행합니다.
!?문자열? : 문자열을 포한하는 가장 최근 명령을 실행합니다.

 
Posted by 빨강토끼
,

Maven으로 PMD check 중에
[WARNING] Error while parsing xx/xx.java: Can't use generics unless running in JDK 1.5 mode!
라는 메시지가 떠서 구글을 검색해봤는데

<properties> 

   <targetJdk>1.6</targetJdk> 
</properties> 


이것을 추가 하라고 나옵니다.
Posted by 빨강토끼
,
리눅스에서 jenkins 를 사용하고 있는데
Jenkins의 새버젼이 나왔다고해서 업데이트를 하려고 하는데 하는 방법을 몰라 인터넷을 찾아보니 보이지 않았다.
사실알고보니 처음에 jenkins.war 가 있던 곳(java -jar jenkins.war)에 새로운 jenkins를 복사하면됩니다.
.
.
.
Posted by 빨강토끼
,

메일설정(gmail)
SMTP server : smtp.gmail.com
Default user e-mail suffix : 비움
System Admin E-mail Address : gmail address

(체크) use SMTP Authentication
User Name : gmail address(전체주소)
Passwork : 비밀번호
Use SSL : 체크
SMTP Port : 465
Charset : UTF-8

Posted by 빨강토끼
,
redmine 을 사용시 작업에 관한 사항들을 이메일로 전달하고 싶은데 따로 smtp 서버를 구축하기가 번거롭다면
gmail 을 사용하는 것을 고려해볼수 있습니다.
게다가 요즘에는 회사에서도 google app 을 많이들 사용하는 추세이므로 매력적인 선택이 될수있겠습니다.

먼저 plugin 을 설치해야됩니다.
아래명령을 실행하거나
ruby script/plugin install git://github.com/collectiveidea/action_mailer_optional_tls.git

혹은 아래 주소로 가서 소스를 다운받아 redmine설치경로/vendor/plugins/action_mailer_optional_tls 에 압축을 풀면 됩니다.
http://github.com/collectiveidea/action_mailer_optional_tls

그런후 redmine설치경로/apps/redmine/config/ 에 있는
email.yml.example 를 email.yml 으로 하나 복사합니다.
cp email.yml.example email.yml

그런다음 email.yml 을 아래와 같이 수정합니다.
production:
  delivery_method: :smtp
  smtp_settings
:
    tls: true
    enable_starttls_auto: true
    address: "smtp.gmail.com"
    port: '587'
    domain: "smtp.gmail.com"
    authentication
: :plain
    user_name: "your_email@gmail.com"
    password
: "your_password"



Posted by 빨강토끼
,
SEED는 정보통신 및 정보보호의 비밀성 서비스를 제공하기 위하여 한국정보보호 진흥원이 주관이 되어 1998년 개발, 공개하여 한국 표준 암호 방식으로 선정한 128비트 블록 암호 방식입니다. SEED는 암호 방식의 입력으로 평문 128비트와 암호화 키 128비트가 입력되어 128비트의 암호문을 출력합니다.

일단 SEED 관련 소스나 정보를 얻기 위해서 한국정보보호진흥원(http://www.kisa.or.kr)에 접속하여 소스를 신청(http://seed.kisa.or.kr/kor/seed/request01.jsp) 하실수 있습니다.

신청을 하게되면 신청이메일주소로 소스가 오게 됩니다.

압축을 풀면 소스코드 메뉴얼과 소스들이 나옵니다.
그대로 사용하시면 되는데

문제는 CBC 가 아닌가합니다. 인터넷에도 소스도 별로 없고 이론적 설명뿐이고 실제 개발과정에서 참고 할만할게 별로 없었습니다. 이것은 의외로 구글링을 통한 외국사이트도 마찮가지였습니다.

일단 CBC의 알고리즘과 기본이론은 지겹도록 봐서 알겁니다.
(솔찍히 저역시 처음엔 그것만 아무리봐도 이해가잘 안되는부분이 많았습니다. 소스코드는 어디에 있는지....ㅜㅜ)

CBC 모드 암호화 의사코드

어쩌라고......

일단 내용은 이렇습니다.(긴말 필요없다 . 당장 소스코드를 내놓아라~!)
먼저 비밀키를 가지고 라운드키를 생성합니다.
SeedRoundKey(dwRoundKey, (BYTE *)cKeyValue) 함수입니다.
P는 원문이고 C는 암호화된문입니다.(P1,P2 ....과 C1,C2 등은 각블럭들....)
일단 버퍼에서 SEEDBLOCKSIZE(16) 만큼을 가져와서(P1) 그전 암호화된 C블럭과
(^) 연산을 하게 됩니다. 처음엔 InitVecter 값이 들어가게 됩니다.
그래서 나온 I블록(inputBlock)을 SEED 로 암호화합니다.
SeedEncrypt(inputBlock, dwRoundKey) 함수입니다.

그래서 나온 O 블록을 C에 차곡차곡 쌓으면 됩니다.(C1,C2,C3.........)

CBC 모드 복호화 의사코드


이번엔 복호화 입니다.
일단 라운드키 생성을 먼저 하시고,
암호화된 C블럭(암호화된)을 복호화합니다.
SeedDecrypt(inputBlock, dwRoundKey) 함수입니다.
그렇게 해서 나온 O블럭을 그전 C블럭(처음엔 InitVecter)과 (^) 연산합니다.
그결과 값이바로 P블럭(원문)입니다.

이제 기다리시던 소스를 공개하겠습니다. 원래알고리즘과 다소 다른부분이 있습니다.
소스에는 pkcs5 이슈도 포함되어있지만 설명은 생략하겠습니다.




마지막으로 운영체제가 64bit일경우 KISA의 소스 그대로 사용하시면
라운드키가 매번 다르게 생성되는 것을 발견할수있습니다.
이유는
SEED_KISA.h 의 내용중
/******************************* Type Definitions *****************************/

// If your machine uses different data types, you must change them to proper ones.
#ifndef TYPE_DEFINITION
    #define TYPE_DEFINITION
    #if defined(__alpha)
        typedef unsigned int        DWORD;        // unsigned 4-byte data type
        typedef unsigned short      WORD;        // unsigned 2-byte data type
       
    #else
        typedef unsigned long int   DWORD;        // unsigned 4-byte data type
        typedef unsigned short int  WORD;        // unsigned 2-byte data type
    #endif
    typedef unsigned char           BYTE;        // unsigned 1-byte data type
#endif

구문이 있는데 64bit 에서는 자료형 크기가 달라 생기는 현상입니다.
운영체제나 상황에 따라 여러가지 해결방법이 있는데 저는
typedef int32_t        DWORD;        // unsigned 4-byte data type
typedef int16_t     WORD;        // unsigned 2-byte data type
이렇게 수정하여 해결하였습니다.
단...이것은 여러가지 환경에 따라 달라질수있기때문에 여러분이 직접 각 자료형을 대입해보고
선택해야됩니다.

Posted by 빨강토끼
,
Primary Key 는 Constraints(제한,제약 적)이고 Unique는 인덱스입니다.
이말은 Primary Key는 암묵적으로 Not Null Constraints(Null 을 사용할수없음)을 갖습니다.
그리고 Unique는 컬럼에 Null 값을 인정한다고 가정합니다.

따라서 만일 select count(*) from table_1 이라는 sql 의 경우
테이블에 Primary Key 가 없는 한 Table Full Scan 을 하게 되고
만일 Constraints가 존재하는 경우 index Fast Full Scan 을 하게 됩니다.
Posted by 빨강토끼
,
이야기는 이렇습니다.
어느날 http://some:81/svn/AAA/trunk/ 라고 쓰던 저장소를
http://some:81/svn/BBB/trunk/ 라는 곳으로 옮기자고 이야기가 나왔습니다.
관리자는 단순히 BBB라는 Repository 만 만들어놓고 손놓구 있고
사용자인 제가 client에서 옮겨야되는 상황이었습니다.
물론 새로만든 Repository는 비어있구요.
relocate 를 해도 그리고 switch를 해도 아래와 같은 에거 가나면서 잘안되는 것이었습니다.

relocate UUID(XXXXXXX) doesn't match

저장소의 UUID가 달라서 옮길수없다는 내용이었습니다.

이렇게 해결했습니다.

새로운 폴더를 만들거나 기존 svn정보가 남아있는 폴더를 선택후
Export 를 해서 저장소에 있는 소스들을 백업을 한후
그것을 새로운 저장소에 등록하였습니다.
(몰론 과거의 작업log는 사라졌습니다.)

혹시 전에 작업에 대한 History도 남기고 싶다면....
구글을 찾아보세요^^
Posted by 빨강토끼
,