블로그 이미지
평범하게 살고 싶은 월급쟁이 기술적인 토론 환영합니다.같이 이야기 하고 싶으시면 부담 말고 연락주세요:이메일-bwcho75골뱅이지메일 닷컴. 조대협


Archive»


 
 

조직을 관리하는 방법


조대협 (http://bcho.tistory.com)


해당글은 https://www.coursera.org/learn/fundamentals-of-management/outline 코세라 강의를 정리한 글입니다.


management function이라고 정의되어 있는데, 딱히 한글로 번역을 하기가 어려워서 (관리 기능..?? ) 리더가 일하는 방법 정도로 정리를 한다.
리더 또는 매니져가 일하는 흐름에 대해서 설명해놨다고 보면 되는데, 크게 아래 그림과 같이 다섯개의 과정으로 정리 된다.




먼저 계획 단계.해야 할 일과 목표를 정의하고, 필요한 소요되는 리소스를 산출한 후에, 환경과 리스크 그리고 대안을 정의하는 계획 단계이다.
다음은 Organize 단계로, 계획을 수행하기 위한 틀을 만드는 단계로 볼 수 있다. 일을 수행하기 위한 조직 구조를 디자인 하고, 프로젝트에 대한 플랜을 수립하고, 필요한 사람들을 연결해놓고, 프로젝트에 대한 수행 프로세스를 정의한다.
이렇게 수행하기 위한 틀이 만들어졌으면, 이 틀안에 내용물을 쏟아 넣어야 한다. 이를 Staffing 단계라고 하는데, 쏟아 넣는 내용물은 사람이 된다. 필요한 역할별로 사람을 뽑아서 배치한후에, 이 인원들이 제대로 일하게 해줘야 하는데, 비젼을 심어주고 목표를 명확하게 해주며, 교육등.. (한마디로 사람관리) 하면서 일을 하는 단계이다.
일을 진행을 하면, 이 일이 잘 되는지 모니터링 하는 단계가 그 다음단계인데, 장애를 제거 하고, 진행 상황을 체크하며, 계획에 문제가 있는 부분을 보정해가면서 프로세스를 보강해 나가는 단계이다.
쭈욱 나열이 되어 있는 것을 정리해보니, 실제로 일하는 방법과 비슷하다. 실제 관리를 잘하고 일을 잘하는 사람들은 저 프로세스대로 일을 하는 듯 싶다.
반대로 일을 잘 못하는 리더나 매니저는 저기서 상당 부분을 빼먹고 그냥 “do it!!”만 열심히 외치는듯



EAI 프로젝트 추진 전략

2009-07-16
Oracle Korea / Principal Consultant
Byungwook Cho. (byungwook.cho@oracle.com)

 

EAI는 수년전에 소개된 이후로도 아직까지 국내 기업 시스템에서 신규 프로젝트가 발생되고 있고 업무에서 중요하게 사용되고 있는 시스템중의 하나이다. 본 문서에서는 EAI 프로젝트를 진행함에 있어서 필요한 중요 사항에 대해서 간단하게 정리하여 EAI 프로젝트의 성공적인 수행 전략에 대해서 설명하고자 한다

EAI 프로젝트의 접근 방법

EAI 프로젝트를 성공적으로 수행하기 위해서는 크게 EAI 4가지 관점에서 접근할 필요가 있다.


Business Requirement

제일 먼저 기업에서 EAI 시스템이 가져야할 요구사항이다. 어떤 시스템과 인터페이스를 할것인지, 거래에 대한 추적과 장애 처리를 어떻게 할것인지, 목표 성능은 어느정도 인지 그리고 어떤 시나리오에 따라 시스템들이 통신을 할것인지와 같이  EAI 시스템이 실제적으로 가져야하는 기능적/비기능적 요구 사항이다

Architecture

EAI라고 해서 모두 똑 같은 설계와 아키텍쳐를 가지는 것이 아니다. 앞에서 정의한 요구 사항에 따라서 그 아키텍쳐가 변경이 된다.  아키텍쳐는 EAI 시스템의 요구사항을 구현에 반영하는 중요한 블루프린트가 된다

Process

EAI 프로젝트의 가장 큰 특징중 하나는, EAI의 기본 목적이라는 게 다른 시스템과의 연동이기 때문에, 타 팀과의 Communication이 매우 많다는 것이다. 인터페이스(이하 IF)연계에 대한 서로 요건을 맞추고 테스트를 하고 변경 사항을 반영해야 하는 일이 많고 IF의 수도 보통 300~400개는 기본적으로 넘어버리기 때문에, IF에 대한 연계 방식을 협의하고 개발 및 배포하는 프로세스를 관리하는 것이 매우 중요하다

Development / Production Environment

마지막으로 개발 및 운영 환경에 대한 고려가 필요한데, 앞서 Process에서도 설명했듯이, 타팀과의 IF가 중요하기 때문에, 개발에서 완료된 IF EAI와 연동하는 시스템을 개발하는 팀이 자유롭게 사용할 수 있어야 한다. EAI 자체의 개발환경과 타팀을 위한 개발 환경이 존재해야 하고, 특히나 대외거래(B2B)의 경우 물리적으로 폐쇄망 (X.25와 같이 기업과 기업을 연결하는 독립적인 회선)이 존재하기 때문에, 개발 및 운영 환경을 어떻게 설계하고 환경간의 이행을 어떻게 해야 하는 가에 대한 고려가 필요하게 된다

간략하게 EAI 프로젝트를 수행하는 관점에 대해서 살펴보았다.  지금부터 각각의 관점에 대해서 자세하게 설명하도록 한다

첫번째 관점 Business Requirement

EAI가 기업 업무에서 무엇을 할것인가? 에 대한 정의이다EAI의 거래 업무 타입은 아래 그림과 같이 크게 3가지 패턴으로 정의 될 수 있다.


대내 거래는 기업 내부 시스템간의 업무를 통합하는 패턴이다. 대부분 온라인성 업무가 주류를 이루게 된다. 인터넷 뱅킹에서 계좌 정보를 조회해온다던지, 당행 계좌간 이체를 한다던지와 같은 실시간성 거래가 주류를 이룬다

대외 거래는 기업간의 거래를 정의한다. 계열사로 재무 내역을 전송하거나 전송 받거나, 협력 업체에 물품을 주문한다거나와 같은 업무가 주류를 이루며, 온라인성 업무와 디퍼드거래 그리고 배치성 거래들이 섞여서 구성된다. 대외 거래의 특징은 기업간 거래이기 때문에 분산 트렌젝션(XA)등을 이용한 트렌젝션 보장이 불가능하기 때문에 오류시 양쪽의 트렌젝션정보를 비교할 수 있는 거래로그를 저장하는 것이 중요하다.

또 다른 관점에서는 B2B 거래에 있어서는 별도의 한정된 개수의 폐쇄망(X.25, TCP)을 사용하는 경우가 있기 때문에, 회선이 1~2개 인데, 서버가 >2 일 경우 회선이 연결된 서버로 거래 요청을 라우팅 하는 기능과 회선의 상태를 확인하는 기능등이 중요하다

BATCH거래는 대용량의 데이터를 송신 시스템에서 수신 시스템으로 전송하는 요건인데, 다른 업무 시스템간의 거래 정보를 맞추기 위한 BATCH거래와 정보계(데이터를 분석하여 경영에 필요한 리포트를 뽑아 내는 Warehouse BI성의 업무) 두 가지 형태로 분리된다. 전자의 경우 운영 데이타로 사용되는 데이터에 대한 연계이기 때문에, 전달 보장 요건이 매우 중요하고(경우에 따라 XA를 사용할 수도 있음) 후자의 경우는 분석 데이터이기 때문에 전달 보장 요건은 그리 중요하지 않다.

 BATCH거래의 경우 보통 ETL 솔루션을 사용하기도 하는데, ETL 솔루션의 경우 XA기반의 전달 보장 요건이 없기 때문에, 위의 사례중의 후자 (정보계)에는 적절하지만 운영 데이터를 전송하는 과정에는 EAI 솔루션이 더 적절하다고 볼 수 있다

간략하게나마 기업 내부에서 EAI의 업무 요건에 대해서 살펴보았다.

사실 이외에도 MEP (Message Exchange Pattern) – 온라인성의 경우 SYNC,ASYN, 1:N,N:1 거래에 대한 정의와 BATCH성의 경우 Master-Detail, Merge & Insert등 여러가지 거래 패턴이 존재하며 필요한 거래 패턴에 대한 정의도 이 단계에서 이루어져야 한다.

그외에, EAI의 인프라성 기능 거래 추적, 모니터링 배포 등의 요구 사항도 함께 정의 되어야 한다.

 두번째 관점 EAI 개발 프로세스

두번째 관점은 실제 EAI 프로젝트를 수행하는데 있어서의 프로세스이다.

전통적인 Water-Fall 모델 관점에서 봤을 때, 각 단계 별로 EAI 프로젝트에서 필수적으로 수행해야 하는 작업들은 다음과 같다.


Analysis 단계

분석단계에서는 기업내에서 EAI가 무엇을 할것인가? 를 정의한다.

(1)    인터페이스 타입 정의

인터페이스 타입 정의란, 어떤 업무 시스템들과 연동을 할것인지, 그리고 해당 시스템의 기술적인 인터페이스 타입은 무엇인지(Tuxedo,EJB,Socket,WebService,MQ etc)를 조사하고 서로 협의한다. 이때 XA 지원 인터페이스도 정의한다.

(2)    메시지 패턴 정의

인터페이스를 할 시스템들이 정의되었으면 어떤 방식으로 인터페이스를 할지를 정의한다. 이를 MEP라고 한다. SYNC 방식인지, 1:N으로 분할 거래를 할것인지, ASYNC 방식인지, 디퍼드인지 각 업무별로 연계하는 방식에 대해 정의한다.

(3)    인터페이스 전문 정의

어떤 업무 시스템과 어떤 방법으로 연계할지가 정해지면 실제로 왔다 갔다 하는 메시지(전문)에 대한 포맷을 정의한다. XML로 할것인지, TEXT로 할것인지 헤더에는 어떤 데이터데 들어갈것인지, 메시지 ID는 어떻게 정의할것인지등에 대한 정의를 한다.

분석단계가 끝나면 EAI 시스템이 갖추어야 할 모양과 어떤 업무 시스템간을 어떻게 연동할것인지가 정의된다.

Design 단계

EAI 시스템의 요구 사항이 나오면 디자인 단계에서는 실제 인터페이스별로 아키텍쳐 디자인을 수행한다.

(1)   프로토타입 제작

EAI는 시스템의 특성상 기능적인 면(시스템간 연계) 보다 중요한 것이 비기능적인 요건이다. 시스템간의 연계를 주요 목적으로 하다보니, 거래 데이터의 전달 보장과 장애시에 거래 유실을 방지하는 아키텍쳐가 필요하다. 이를 위해서 디자인 초기에 요건이 나온 인터페이스 연계 타입에 대해서 프로토 타입을 구현을 해서 정상적으로 작동하는지 다른 RISK 요인은 없는지 검증을 하고 현업과 연동을 해봄으로써 현업과 연계 시나리오에 대한 동일한 VIEW를 가지도록 한다.

(2)   프로토타입 검증

프로토 타입이 완성되면 해당 프로토 타입에 대한 검증을 한다. 대부분 Micro Benchmark 테스트 형식으로, 시스템 장애에 대한 장애 발견,원인분석,복구 기능을 검증하고, 장기간 거래에 대한 안정성 성능을 측정하여 시스템에 대한 기초 데이터를 마련한다.

(3)   IF 리스트 수집

프로토 타입에 의해서 검증된 아키텍쳐를 기반으로 현업에서부터 실제 연계 IF 목록을 수집하고 개발 일정을 수립한다. 현업의 시스템 개발과 연계 일정에 대해 의존성을 가지기 때문에, 이 과정에서 자세한 인터페이스 방식과 스케쥴을 정의한다.

디자인 단계에서 가장 중요한 것은 주요 인터페이스 패턴 별로 프로토타입을 개발하고 검증을 하는 것이다. 검증된 프로토 타입을 가지고 실제 구현단계에서는 붕어빵(?) 찍어내듯이 같은 패턴으로 정해진 스케쥴에 따라서 인터페이스를 구현해주게 된다

프로토 타입의 중요성은 비기능적 요건의 경우 시스템의 코어 아키텍쳐와 깊게 연관이 되는 경우가 많고, 인터페이스 연계가 끝난 후에 비기능적인 요건에 문제가 있을 경우, 기존에 구현된 인터페이스를 수정하는데 많은 노력을 필요로 한다. 특히 EAI 프로젝트 특성상 타 업무팀과의 협의를 요하고 인터페이스 변경은 그 타업무팀에 새로운 작업을 요구하기 때문에 커뮤니케이션상의 많은 부담과 책임을 가지고 갈 수 있기 때문에, 요건이 정리된 후 되도록이면 빠르게 아키텍쳐를 프로토타입핑을 통해서 검증하는 것이 중요하다

Implementation 단계

구현 단계에서는 실제 스케쥴에 맞춰서 인터페이스를 연계 하고, 이를 개발이나 STAGING환경으로 이행하면서 연계에 있어서 오류가 있는 부분을 수정한다

(1)   인터페이스 연계

구현단계에서는 일정에 맞춰서 인터페이스를 연계한다. 이때 필히 테스트환경을 구축하여 인터페이스 구축시 마다 인터페이스에 대한 테스트를 수행해야 한다.

(2)   단계적 이행

EAI 개발시스템에서 개발된 인터페이스는 EAI STAGING 시스템으로 개발된다. EAI STAGING 시스템에는 업무 시스템에 대한 개발 시스템이 연동이 되어 있는데. EAI 개발 시스템에 연동을 하지 않는 이유는 개발 시스템에서는 잦은 RESTART와 디버깅등이 개발팀에서 이루어지기 때문에 이에 대한 영향을 타 업무 개발팀에 끼치지 않도록 하기 위함이다. STAGING으로 이행을 할때는 정해진 인터페이스 개발 스케쥴에 맞춰서 이행하여 업무 개발팀이 원할하게 업무 개발을 할 수 있도록 한다.

EAI 프로젝트 과정중에는 많은 이행단계가 있다. 개발,통합테스트,운영 시스템으로의 이행등 많은 과정을 거치는데, EAI 이행의 경우 EAI 시스템만 옮기면 되는 것이 아니라 업무와의 연결 포인트가 변경될 수 있고, 특히 B2B 거래의 경우 실제 회선을 물리적으로 이행을 해야할 경우가 있기 때문에, 이행에 대해서 일반 애플리케이션보다 정교한 계획이 필요하다.

(3)   모니터링 및 수정

EAI 프로젝트에서 인터페이스를 연계해놓고 나면 문제가 예상하지 못했던 인터페이스 에러나, 요건 수정이 발생한다. STAGING 시스템에서 이를 모니터링해서 에러를 수정하고 이에 대한 보강 아키텍쳐를 수립하여 반영하는 반복적인 절차가 필요하고, 인터페이스 요건 변경에 대한 반영역시 필요하다. 소프트웨어 개발 프로젝트의 특성상 요건에 대한 변경을 발생할 수 있으나, 거래 인터페이스 타입의 변경 (대상 시스템 타입이 바뀌거나, MEP 자체가 변경되는)은 발생해서는 안되며, 피치못하게 발생했을 경우 변경된 요건에 대한 아키텍쳐 영향도를 분석(프로토 타입핑을 통해서)후에 결정을 해야 완성된 EAI시스템의 안정성에도 문제가 없게 된다

EAI 프로젝트에서 구현 단계에서는 특히 현업의 요건 변경과, 현업의 인터페이스 미 준비등이 가장 큰 이슈가 된다. 스케쥴에 맞게 준비를 하지 않거나 인터페이스 표준을 따르지 않다가 통합 테스트등 프로젝트 마지막 단계에서 갑자기 몰아서 하면서 많은 문제를 만들어내거나, EAI팀이 인터페이스 연계가 늦어져서 업무 개발이 늦어진다는 변명 아닌 변명이 많은 것이  EAI 프로젝트의 특성이다

이를 방지하기 위해서는 구현단계에서 스케쥴에 맞춰서 인터페이스를 연동해주고, 장애나 문제가 있는 상황을 바로바로 로깅하여 백데이타를 확보하고 인터페이스 연계 지연이나 장애 목록에 대해서는 PMO (프로젝트 관리조직)을 통해서 리포팅하여 나중에 있을 수 있는 논쟁의 여지를 방지할 필요가 있다

세번째 관점. EAI 레퍼런스 아키텍쳐

많은 EAI 상용 EAI 솔루션들이 있지만 이러한 솔루션들은 프레임웍만 제공할뿐 실제 연계 아키텍쳐는 그 프레임웍을 기반으로 따로 설계해야 하는 경우가 보편적이다. 여기서는 EAI시스템이 갖추어야 할 요건에 대해서 통상적인 아키텍쳐를 소개하고자 한다


인터페이스

인터페이스 모듈은 EAI의 가장 기본적인 아키텍쳐 모듈로 송수신 시스템을 통합 시키는 부분에 대한 아키텍쳐이다.

(1)  Inbound

Inbound는 송신 시스템과 연동되어 요청을 받고 응답을 송신 시스템에 보내는 역할을 한다. Inbound는 크게 두가지 모듈로 구성된다.

Ÿ   Adapter

아답터는 다양한 플랫폼으로부터 메시지를 읽어드리는 Entry Point의 역할을 한다. 연동 시스템마다 각각의 아답터가 정의 되어야 한다.

Ÿ   메시지 변환

Adapter에 의해서 요청된 전문(메시지)는 각 연동 시스템의 플랫폼에 따라서 각각 다르다. FML이나 XML, 또는 TEXT형태의 전문, Binary등 여러가지 형태가 될 수 있으나, EAI내부에서 처리하기 위해서 이런 전문형태를 공통적인 데이터 구조로 변환한다. 흔히 상용 솔루션에서는 메시지 처리의 유연성을 가지고 가기 위해서 XML을 사용하고, In-House 개발의 경우 성능의 최적화를 위해서 HashTable형태의 Java POJO Object를 사용하기도 한다.

(2)  Mediation

Mediation은 입력된 메시지를 가공하고 중계하는 EAI의 핵심적인 기능 부분이다.

Ÿ   Routing

Routing은 입력된 메시지를 메시지의 내용(헤더나 인터페이스 정보)에 따라서 적절한 수신 시스템으로 Routing하는 역할을 수행한다. 이 과정은 1:1 Routing이 될 수 도 있지만 N:1, 1:N등 다양한 관계로 Routing을 수행할 수 있어야 한다.

Ÿ   Mapping

입력된 전문을 수신 시스템에서 요구하는 형태로 맵핑하는 작업을 수행한다. 필드간의 맵핑이나 간단한 메시지에 대한 변환을 수행한다.

Ÿ   MEP (Message Exchange pattern)

이부분에서 MEP에 대한 처리도 수행한다.SYNC ASYNC, 디퍼드성 거래에 대해서 JMS 와 같은 큐잉을 이용해서 MEP를 구현한다.

(3)  Outbound

Inbound와 마찬가지로 처리가 끝난 메시지를 수신 시스템의 플랫폼의 Native 메시지 형태로 변환하여 Adapter를 통해서 수신 시스템에 전달한다

모니터링 및 장애 관리

인터페이스 아키텍쳐가 가장 기본적인 연계에 관련된 아키텍쳐라면 EAI 아키텍쳐상의 매우 중요한 요소중의 하나가 거래 추적과 에러 처리 방식이다.

(1)  거래 로그

거래 로그는 EAI 시스템의 장애시 송수신 시스템과 거래 내용을 맞춰서 이를 복구하는데 사용한다. 거래 로그에 사용되는 거래 ID는 전사 표준 전문의 헤더에 정의하는 것이 일반적이고 이 거래 ID는 송신에서 수신 시스템까지 하나의 공통된 ID를 사용해야 한다.

거래 로그에 대한 접근 방식은 크게 저장 장소와 저장 방식에 대해서 고민해야 하는데,  데이터 저장 장소는 FILE DB 두가지를 선택할 수 있다. FILE의 경우 비교적 IO성능이 빠르고, DB 장애에 대해 의존성이 적다는 장점을 가지고 있지만 반대로 거래 추적을 할할 때 일일이 FILE을 뒤져야 하는 단점이 있고, DB의 경우 특정 거래를 찾거나 조건으로 검색을 하기는 용이하지만 별도의 DB하드웨어를 필요로 하고, DB 장애에 독립적이지 못한 문제를 가지고 있다

이를 보완하기 위해서 LOG WRITING하는 방식에 대해서 고려할 수 있는데, JMS 서버를 이용하여 비동기적으로 LOG WRITING하는 방법을 고려할 수 있다. 이 때 JMS의 메세지를 FILE에 저장할지 메모리에 저장할지도 고려해야 하는데, 업무상 감사(AUDIT)요건이 있는 중요한 로그는 JMS File store를 이용하여 저장하고 중요하지 않은 로그는 JMS Memory Store를 이용해서 저장하는 방법이 있다. (Memory Store의 경우 성능적 우위에 있지만, JMS 서버가 RESTART될 때 메모리상의 데이터가 유실되는 문제가 있다.) 

거래로그는 EAI의 필수적인 요건중에 하나이지만 IO를 유발하기 때문에 성능에 가장 큰 영향을 주는 부분으로 세밀한 설계와 검증 과정을 필요로 한다.

(2)  에러 처리 로직 (Error Hospital)

에러 처리 로직은 모니터링 요건과 더블어 EAI의 또다른 필수요건이다.에러 처리 로직의 요건은 장애 감지, 장애 원인 리포팅, 장애 해결 3단계로 이루어 진다.

모든 종류의 장애를 신속하게 감지해야 한다. 특히 B2B거래의 경우 회선 장애에 대한 감지 능력이 보강되어야 하고, 장애가 발생하였을 때 장애 원인을 추적할 수 있도록 그 내용이 리포팅 되어야 하고, 장애 내용에 대해서 해결할 수 있는 절차를 갖추어야 한다

장래 해결 방식은 여러가지로 분리할 수 있는데 장애에 대한 처리 정책을 Fault-Policy라 하고 인터페이스마다 정의하여 인터페이스별로 장애를 처리할 수 있도록 한다

이렇게 장애가 발견되고 리포팅이 되면 모든 장애 내용을 한곳에 모아서 위에서 언급한 Fault-Policy에 따라 처리하는데 모든 장애가 모이는 곳을 Error-Hospital이라고 정의한다

(3)  장애 처리 정책

앞에서 정의한 에러 처리 로직 (Error-Hospital)에 모인 장애 들은 장애 처리 정책에 따라서 처리가 되는데, 일반적으로 크게 아래와 같이 4가지 정책으로 정의할 수 있다.

Policy

Description

Note

Ignore

Simply ignore the fault and purge message.

 

Report

Report the fault. Optionally send notification message (Email,IM,SMS etc)

 

Retry

Automatically retry the transaction with specified time after specified sleep time

After failing all of retry, next error handling policy definition is required.

Manual

handling

Report the fault and let user select policy described above

 

무시하거나(Ignore), 장애 내용을 관리자에게 알리거나 (Report), 자동으로 재시도 하거나 (Retry), 또는 Work list등에 추가하여 관리자가 에러 처리를 수동으로 하도록 하는 방식이다.

인프라 기능

거래이외에 공통적으로, 처리해야 하는 기본적인 기능들이 있다.

(1)   트렌젝션 처리

EAI 프로젝트에서 통상적으로 10~30% XA 기반의 분산 트렌젝션 처리를 사용하는 경우가 있다. 양쪽에 거래에 대한 장애시 거래 데이터가 틀려지는 것을 방지하기 위해서 XA를 사용한다. XA 사용은 시스템의 복잡도를 높이고 높은 수준의 테스트가 필요하기 때문에, XA 거래는 되도록이면 사용하지 않는 것이 좋다.

(2)   동적 배포

EAI 시스템은 24 x 7 으로 무정지로 운영이 되기 때문에 새로운 인터페이스가 추가 되었을때 EAI 시스템을 정지하지 않고 인터페이스 배포가 가능해야 하며, 장애가 난 인터페이스가 다른 연계 인터페이스에 영향을 미치지 않도록 내릴 수 도 있어야 한다.  인터페이스에 대한 동적 배포 기능은 EAI 시스템의 운영 관점에서의 필수요소이다

네번째 관점 EAI 프로젝트 개발 환경과 이행

앞에서도 몇번 언급했던 내용인데, EAI 시스템은 개발중에도 독립적으로 개발이 불가능하고, 다른 업무 시스템과의 연관성을 가지고 개발을 하기 때문에 개발 과정중에도 업무 시스템간에 인터페이스를 해줄 수 있는 시스템이 필요하다.


이를 지원하기 위해서 크게 3가지 환경으로 나눌 수 있는데, 다음과 같다.

분류

역할

참고사항

EAI 개발 환경

EAI 개발팀만 사용, EAI 시스템 자체에 대한 개발, 인터페이스 개발

 

EAI Staging

개발된 인터페이스가 배포되는 환경. 업무 개발 시스템과 연결되어 업무 개발 환경을 지원함

 

EAI Production

실제 운영환경

 

특히 개발환경에서 Staging 환경으로는 주기적인 업데이트가 일어나야 하고, Production 환경으로 옮길때는 별도의 이행 계획을 세워서 이행을 진행한다. (회선과 서버 연결점에 대한 고려가 필요함)

개발환경과 Staging 환경은 별도로 하드웨어를 분리할 필요없이 같은 하드웨어를 공유해서 사용해도 되지만, 필수적으로 두개의 환경을 나눠서 운영하도록 한다.

 

마지막으로 국내 EAI 프로젝트의 특이성

국내에 진출을 한 몇몇 EAI 솔루션 벤더들이 있지만 이 솔루션들이 국내에서는 그리 평탄하게 프로젝트를 진행하고 있지는 않은 것으로 알고 있다. 비즈니스가 없다는 말이 아니라, 제품의 고유 기능만 가지고 국내 EAI 고객의 요구 사항을 맞추기가 어렵고 이로 인해서 Custom 개발이 많이 발생한다는 이야기다.

국내 EAI 요건은 EAI 패키지들이 제공하는 기능에 비해 훨씬 높은 편인데, 몇가지 주요 특이 사항을 나열해 보면 다음과 같다.

 

Ÿ   Config 방식의 연계 선호

전통적인 EAI 솔루션은 GUI 기반의 개발툴에서 송수신 시스템을 연결하는 인터페이스를 구현하고 이를 EAI 시스템으로 배포하는 구조이다.

국내 EAI 시스템을 운영하는 사람은 대부분 개발자적인 소양보다는 운영과 업무 관점의 인력이기 때문에, 개발 기반의 EAI 연계를 선호하지 않는다. 단순히 웹 관리 화면으로 송수신 시스템에 대한 CONFIG 정보 만으로 연동이 이루어지기를  선호하기 때문에 별도의 연계 Config 화면을 구현할 필요가 있다.

Ÿ   변환 라우팅 보다는 연계에 초점

EAI 솔루션의 특징중의 하나가 송수신 중간의 Mediation에 상당히 자유로운 비즈니스 로직을 넣을 수 있다는 것인데, 변환과 라우팅들이 그에 해당한다. 그러나 국내 EAI요건은 필드간의 맵핑이나 간단한 변환만을 사용할 뿐 EAI 개발 도구가 제공하는 복잡하고 강력한 맵핑이나 라우팅은 사용하지 않는다.

Ÿ   높은 성능 요구치

국내 기업의 경우 고객과 기업의 IT 인프라가 상당한 수준으로 발전해 있기 때문에, 시스템에 대한 응답시간에 대한 기대치도 높고 많은 업무가 이미 온라인으로 처리되기 때문에, 초당 트렌젝션양(TPS)에 대한 요구 수준도 매우 높다. 그래서 변환이나 라우팅 같은 고급 기능보다는 단순한 맵핑 기능들만을 사용하면서 성능을 높이고자 하는 요구 사항이 많다.

Ÿ   비표준 전문 구조 사용

특히 대외 B2B 연계의 경우 ebXML등의 국제 표준 전문 형태를 사용하기 보다는 업체간의 협약을 맺어서 단순히 TCP 기반에 TEXT 타입으로 전문 표준을 맺어서 사용하는 경우가 많기 때문에 이 경우 전문 포멧을 핸들링하기 위한 아답터가 별도로 필요할 수 있다.

Ÿ   SOCKET 아답터

Legacy와의 연동이 WebService IIOP,RMI,EJB등의 표준 기술이 아닌 TCP Socket 기반의 연계 패턴이 종종 있다. Socket을 이용한 연동 부분은 EAI 솔루션에서 대부분 제공하지 않기 때문에, In/Out bound Socket 아답터에 대한 구현이 필요한 경우가 많다.

Ÿ   X.25 기반의 대외 연계

대외계(B2B) 거래의 경우 X.25 회선을 이용하는 경우가 아직도 많기 때문에, X.25를 지원하는 아답터가 필요하나 EAI 솔루션에서 제공하지 않는 경우가 많기 때문에 구현이 필요하다

결론

지금까지 간략하게나마 한국에서 EAI 프로젝트를 진행함에 있어서 고려해야할 몇가지 사항에 대해서 정리했다.

 국내의 EAI 환경은 시스템간의 연계 시나리오 자체는 간단하지만, 연계에 대한 비기능적인 요건 (성능이나 장애 처리)에 대한 기대치가 높고, 기술적인 난이도가 높은 시스템이 대부분이다.

 범용적으로 개발된 EAI 솔루션을 가지고 일반적인 소프트웨어 개발 프로젝트식으로 EAI 프로젝트를 수행한다면 십중팔구는 실패를 하거나 시스템의 안정성에 치명적인 결과를 가지고 오게 마련이다.

한국 EAI 시스템에 대한 고객 요구 사항을 적절하게 분석하여 EAI 솔루션 위에 한국 고객의 요건을 반영한 EAI 프레임웍의 개발과 EAI 프로젝트를 위한 개발 프로세스가 잘 정의되어야 복잡하고 난이도가 높은 한국형 EAI 프로젝트를 성공적으로 마무리 할 수 있다.

'아키텍쳐  > EAI' 카테고리의 다른 글

Apache Camel Error Handling  (0) 2013.02.20
Apache Camel Overview  (0) 2013.02.17
EAI (Enterprise Application Integration) 추진 전략  (1) 2009.07.16
ETL vs EAI  (0) 2009.06.16
EAI 도입 전략  (0) 2007.08.21
현재 진행하고 있는 프로젝트에서 Trac을 도입해서 사용하고 있습니다.
Trac 뿐만 아니라 사실상 거의 모든 이슈 트랙킹 시스템을 이용하여 팀 일정 관리를 할때 공통적으로 생기는 문제 같은데,
팀관리에서 가장 중요한것은 어떤 TASK를 누가, 언제 하느냐 입니다.
이슈 트랙킹 시스템은, 어떤과 누가를 잘 추적할 수 있게 해줄뿐만 아니라 Comment등을 통한 History 기능으로 어떻게 하느냐까지 잘 관리할 수 있습니다.

그런데 문제는 "언제" 즉 시간에 대한 부분입니다.
이슈 트랙킹 시스템들은 대부분 Time Frame,Mile stone, Due date 식으로 대략 Task 단위의 시간을 제공합니다만, 프로젝트 관리에 있어서 간트 챠트만한것이 없습니다. 문제는 이 이슈 트랙킹 시스템들이 간트 챠트를 제대로 제공하지 않는 경우가 허다하다는 것입니다.

매일 아침 Scrum 미팅을 할때, 간트 챠트를 이용하면 팀원이 무엇을 하고 있는지, 어제와 그제 무었을했고, 이번주에 무엇을 하고 있는지를 비주얼하게 보여줘서 리소스를 할당하는데 편리한데
이슈 트랙킹 시스템은 각 태스크로 관점이 맞춰져 있어서 사실상 팀관리를 하는데 어려움이 많습니다. (사실상 이부분은 엑셀이 더 편할것 같습니다.) 몬가 방법을 더 찾아봐야할것 같습니다.

ALM-Project Management

ALM/Task Management | 2008.12.24 10:43 | Posted by 조대협
ALM의 이슈트랙킹 시스템을 통한 프로젝트 관리 방법입니다.
아래 그림이 구현하고자 하는 내용의 모두라고 볼 수 있습니다.
  •  PM : 요구 사항을 시스템에 등록하고 각 요구 사항에 대해서 스케쥴링을 한후에 각 요구사항을 해당 개발팀의 팀장에게 ASSIGN합니다.
  • PL : PL은 각 요구사항을 분석하여 실제 작업(TASK)로 쪼게고 개발자의 스케쥴과 역량 그리고 작업의 심각도와 긴급도에 따라서 개발자에게 ASSIGN합니다.
  • 개발자 : 개발자는 진척 상황을 TASK에 COMMENT로 로깅하고, 각 TASK에 연관된 단위 테스트 케이스를 작성하여 진행을 합니다.
  • PM은 요구 사항을 개발 PL뿐만 아니라, QA 팀에도 ASSIGN하는데 QA 팀에서는 각 요건을 검증할 수 있는 테스트 케이스를 개발 초기단계 부터 작성합니다. 이 테스트 케이스들 (실제로 구현된 JUnit과 같은 구현체)은 Test case management 라는 툴에서 관리 됩니다. 한번 등록된 테스트 케이스들은 이 툴에서 다시 Invoke될 수 도 있고, 그 결과 역시 시스템에 다시 레코딩이 됩니다.
  • 테스트 과정에서 발생된 문제는 Defect Management System(버그 추적도구)에 의해서 리포팅이 되고 각 버그는 하나의 TASK로 PM->PL을 거쳐 개발자에게 다시 ASSIGN이 됩니다.


    이 일련의 프로세스가 ISSUE TRACKING시스템을 통해서 구현되고 각각의 TASK가 추적성을 갖게 됩니다.

이것이 ALM의 PROJECT MANAGEMENT모듈의 개념입니다.
어떤 툴을 사용하느냐, 개발팀의 모델이나 일정 수준에 따라서 Variation이 상당히 많습니다. 그외에 PM이나 고객을 위해서 DASHBOARD를 제공하거나 개발자를 위해서 Eclipse에 플러그인(Mylyn)을 제공하거나 환경적인 설정 방법도 상당히 많습니다. 제대로 적용하면 상당히 효과가 좋은 모듈이지만 반대로 잘못하면 자체가 짐이 되버리는 경우가 많기 때문에 도입시에 많은 고려가 필요한 부분입니다.

개인적으로 JIRA,Mantis,Bugzilla를 프로젝트에서 사용해봤고, Trac,Polarion,Code Beammer, Rally Enterprice, VersionOne등의 이슈관리 도구들을 테스트해봤지만 개인적으로 가장 사용하기 편하고 유연성이 있으며 가격대비성능(ROI)가 높은 도구는 JIRA인것 같습니다.

SOA 가 어려운 이유..

아키텍쳐 /SOA | 2008.11.12 15:00 | Posted by 조대협
SOA가 나온지도 오래되었고 개념이 좋다는 것은 다들 인정하고 있지만 쉽게 확산 되지 않는 이유가 무엇일까?
결과부터 따져보자면

성공적인 SOA<-- 성공적인 거버넌스 <-- 강력한 파워와 조직

SOA는 기업의 모든 업무를 서비스화하여 재 사용하고자 하는 아키텍쳐이다. 단순한 프로젝트처럼 단기간에 끝낼 수 있는 것도 아니고, 한팀이나 TF형식으로 만들고 끝날 수 있는 것이 아니라. 장기적인 관점에서 소프트웨어 컴포넌트를 서비스화하여 자산화 하고, 이 자산을 재 사용해야 한다.

그러기 위해서 가장 중요한 것이 장기적인 계획을 세우고 각 비니지스 업무 부서를 조율하여 서비스를 생성 및 관리하고 조합하여 업무에 반영 하는 역할을 할 수 있는 것!!이 필요하다.
이 "것" 이 거버넌스 인데. 거버넌스는 전체 SOA를 통제할 수 있는 조직과, 프로세스, 그리고 이것을 뒷받침해줄 플랫폼이 포함된다. 물론 여기에 돈이나 시간도 들어가겠지만 가장 중요한것은 이 3가지인데...
대부분의 실패한 SOA의 문제점을 이 거버넌스에서 생각해볼 수 있다.

  • 거버넌스 조직 구성 부터 생각해보면, 거버넌스 조직은 SOA를 수행할 만한 기술과 업무에 대한 전문적인 지식과 함께, 각 비지니스 부서를 통제할 수 있는 POWER가 있어야 한다. 거버넌스의 실무 인원들이 그런 POWER를 가지기는  불가능하고, 거버넌스 조직의 LEADER가 결국 그 힘을 주는 것인데.. SOA 거버넌스 모델에서는 그런 사람을 BACKER라고 한다. 한국말로 하면 빽..!! 거버넌스 조직이 실력과 이만한 파워를 갖춰야 각 업무 부서를 통제하고 서비스를 착착 만들어 나갈텐데.. 이것이 안되니 SOA가 제대로 될리가 있나?? 보통 이런 조직은 기업에서는 CIO 산하의 정보전략이 리딩을 하는게 하는것이 맞는데.. 정보전략이 그만한 힘이 없거나 또는 그만한 전문성이 없거나 단기적인 프로젝트에 집중할때 문제가 생긴다.
SOA 프로젝트가 다른 프로젝트와 틀린것은 기존 프로젝트는 하나의 비지니스 업무에 대해서 한 LOB에서 단기간에 시스템을 구축하면 끝났지만, SOA는 전사적으로 아키텍쳐가 설정되어야 하고 거버넌스 조직에 의한 전략에 따라서 LOB 간의 협업이 중요한데.. 사람이 하는일이니 쉽지 않은가 보다.
  • 프로세스 측면에서는, 프로세스가 현실과 동떨어져 있는 경우가 많다. RUP가 거버넌스 프로세스는 아니지만 예를 들어보면 좋은 방법론과 프로세스임에는 확실하지만 무겁고 이해하기가 어렵다. LOB별이나 직원별의 기술 수준이 다르기 때문에 프로세스에 대한 적응도가 떨어질 수 밖에 없고 있는 거버넌스의 실패 그리고 통제의 실패와 프로젝트의 실패로 연결이 된다. 그러면 어떻게 해야 하나? 프로세스는 가볍고 이해하기 편해야 한다. 커뮤니케이션 파이프라인은 되도록이면 짧아야 한다. 내 경우에는 감히 "하향 평준화"를 하라고 이야기 하고 싶다.
  • 시스템 관점에서 보면, 거버넌스 시스템의 예로 PPMS(프로젝트 관리도구), SCM(형상 관리 도구) 등이 있지만!! 실제 프로젝트를 보면 툴 따로 실제 업무 따로인경우가 많다. 툴은 업무를 돕는것이지 툴에 업무를 맞추는게 아니다. 물론 툴이 무지 좋다면 그것도 방법은 되겠지만...
사실 거버넌스의 실패가 SOA에만 해당되는 이야기는 아니다. 일반 프로젝트도 거버넌스의 실패가 대부분의 실패 요인이 되니까는 그럼에도 불구하고 SOA에서 거버넌스의 중요성을 언급한것은 위에서도 이야기 했지만, SOA는 장기적이고 여러 부서에 걸쳐 있는 프로젝트이기 때문에 무엇보다도 통제가 중요하기 때문이다..

이글을 썼다가 날라가서 다시썼는데.. 내용이 좀 꼬이는듯 하네..

'아키텍쳐  > SOA' 카테고리의 다른 글

OMG released SOAML draft  (0) 2009.01.16
Composition 과 Mashup의 차이  (0) 2008.11.13
SOA 가 어려운 이유..  (0) 2008.11.12
관심이 가는 오라클 제품들  (0) 2008.10.15
2008년 SOA 전망  (0) 2008.01.10
Next Enterprise  (0) 2007.12.21
JIRA는 Atlassian사에서 개발한 Issue Tracking System이다. 원래 이 "이슈 관리 시스템"은 버그 추적 시스템에서 시작되어서 현재는 버그뿐만이 아니라 일반적인 이슈에서 부터 프로젝트 관리까지를 지원한다.

본 프로젝트에서는 JIRA를 프로젝트 스케쥴에 대한 관리도구와 개발원간에 작업을 배분하고 커뮤니케이션하는 도구로 사용한다.

  • Issue

지라에서는 각각의 작업을 이슈라는 단위로 관리하고 이슈의 종류를 다음과 같이 정의하였다.

  • User Story
    사용자의 요구 사항이나 개발의 대상이 되는 기능이다. User Story를 구현하기 위해서 각각의 User Story는 구체적인 작업인 Task를 하위작업으로 가지고 있다.
  • Task
    User Story의 하위 작업으로 User Story를 위해서 개발자가 실제로 작업해야 하는 각각의 단위 작업을 의미한다.
  • Bugs
    개발과정중에 보고된 버그
  • Enhancement Request
    기능 개선 요청으로 기능 추가 작업이다.
  • Issue 단위의 작업 절차 

이 이슈단위로 작업을 진행하는 절차를 정리해보면 다음과 같다.

  • 먼저 PM이 요구 사항을 취합하여 User Story를 작성한다.
  • 다음으로 User Story를 구현하기 위해서 실제 Task들을 해당 User Story 아래에 생성한다.
  • 다음으로 생성된 Task들을 개발자에게 지정(Assign) 한다.
  • 또는 Assign 되지 않은 작업에 대해서 개발자가 스스로 작업을 가지고 가서 작업을 진행한다.

실제로 하나의 예를 들어보자.

프로젝트 진행을 위한 환경 설정을 하기 위해서 개발 환경 설정이라는 이슈를 이슈#1에 User Story 타입으로 생성하였다.
다음으로 JIRA의 환경 설정 SubVersion의 설치, ANT설치를 각각 Task로 생성하고 JIRA 환경 설정은 choi씨에게 지정하였다. choi씨는 지라에 로그인하여 자신에게 "JIRA 환경 설정" 에 대한 Task가 지정되어 있음을 확인하고 해당 이슈를 진행한후 Close 하였다.

이와 같은 시나리오를 거치게 된다.

  • JIRA 사용법

자바스터디 지라 사이트에 접속한다. IP는 http://211.115.216.55:9000/jira&nbsp;아이디와 비밀번호는 bwcho75@지메일에 신청하여 발급 받는다. 발급받은 아이디와 비밀번호로 로그인을 한다.

사용자 삽입 이미지

로그인후에 HOME 을 보면 위와 같은 화면이 나오는데, 이 화면은 화면 우측 위쪽에 "Configure ON|OFF" 에서 ON을 누르면 HOME 에 자신이 필요한 기능들을 추가하거나 삭제하여 마음대로 초기화면을 구성할 수 있다. 현재 보이는 초기화면은 Calendar를 추가한 화면이다.
오른쪽에 "Open Issues: Assigned To Me"에 이슈가 리스팅 되어 있는 것이 보이는데, 이는 나에게 작업을 하도록 할당된 이슈이다.
또는 Home에서, "Filter Issues:" 메뉴에서

All을 선택하면 전체 이슈
Assigned to me 는 나에게 작업을 하도록 할당되어 있는 이슈
Reported by me 는 내가 보고한 이슈이다.

User Story등은 PM이 생성하고 일반 개발자들이 생성할일이 없으며, 일반 개발자들이 생성할 수 있는 이슈의 종류는 User Story아래에 있는 Task나 Enhancement Request (기능 개선 요청) 또는 버그이다.

아래 화면은 지정된 이슈를 클릭한 화면인데,

사용자 삽입 이미지

  • 왼쪽 상당의 상태는 현재 "Status : In Progress" 상태이다. 이는 현재 Task를 개발자가 받았고 실제로 작업을 진행중인 상태라고 표시되는 것이다.
    처음에 생성되고 개발자에게 지정되거나 또는 지정이 안된 상태의 이슈들은 진행이 아직 안되어 있는 것이기 때문에 "Status : Open" 으로 출력 된다. 이를 진행으로 바꾸기 위해서는 "Avaliable Workflow Actions"에서 "Start Progress"를 누르면 상태가 "In Progress"로 변경된다.
  • 만약에 이슈를 다른 사람에게 할당해야 할 경우에는 좌측 중간의 "Assign this issue"메뉴를 클릭하여 다른 사람에게 Issue를 할당할 수 있다.
  • 만약에 이 이슈가 자신이 해결할 수 없을 경우에는 PM에게 해당 이슈를 할당하여 PM이 적절한 사람에게 이슈를 할당하도록 한다.
  • 이슈에 대한 진행 내용은 빠짐없이 왼쪽 메뉴의 "Comment on this issue"를 이용하여 진행 현황등을 기록하고, 만약 PM이나 다른 사람과 의사소통이 필요할 경우에도 Comment를 단 후에 담당자에게 Assign하는 식으로 의사 소통을 진행한다.
  • 해당 이슈 해결이 끝난 경우에는 "Resolve Issue" 메뉴를 이용하여 이슈가 해결된 상태로 변경하고, 만약 이슈에 대한 검증이 필요할때는 해당 담당자에게 할당한다. 이런 흐름은 예를들어 개발을 완료한후에 QA조직에 테스트를 요청할 경우 이러한 흐름을 따르게 된다.
  • 테스트와 검증이 모두 완료되면 "Close Issue"를 통해서 해당 이슈를 완전히 종료 한다.
  • 본 프로젝트에서는 일반적인 환경 설정등의 작업은 개인이 CLOSE를 해도 되지만 개발에 관련된 Task는 Resolved 상태로 바꾼후에 PM에게 다시 Assign하여 PM이 CLOSE할 수 있도록 한다.

정리하면

  1. PM이 User Story를 만든다.
  2. PM이 거기에 해당되는 Task들을 생성
  3. PM이 Task를 개발자에게 배분
  4. 개발자가 해당 Task를 받은후 "In Progress" 상태로 바꾼다.
  5. 개발자가 진행 내용이나 의사 소통이 필요한 정보를 Comment로 적는다. (이때 필요하면 Attach 메뉴를 이용하여 파일을 첨부할 수 도 있다.)
  6. 개발자가 개발을 완료 하면 상태를 Resolve Issue 를 이용하여 상태를 바꾸고 PM에게 다시 이슈를 Assign한다.
  7. PM은 Resolved된 이슈들이 제대로 반영되었는지를 확인한후에 Close상태로 변경한다.

이번글에서는 이슈 처리에 대한 워크플로우와 프로젝트에서 사용할 이슈의 종류에 대해서 알아보았다. 다음글에서는 "버전" 에 따른 스케쥴 관리 방법에 대해서 알아보겠다.

'ALM > JIRA' 카테고리의 다른 글

Atlassian JIRA를 이용한 애자일 Scrum 프로젝트 관리  (15) 2013.12.20
JIRA 클라이언트  (0) 2008.11.07
Atlassian JIRA를 이용한 프로젝트 관리 (기초편)  (0) 2008.04.04
JIRA와 SVN 연동  (1) 2008.03.03