기술과 감성, 그리고.  
Front Page
Tag | Location | Media | Guestbook | Admin   
 
[SOA] #8. SOA의 디자인 원칙

SOA는 비지니스 로직과 데이터를 서비스 중심으로 전환함으로써 소프트웨어 아키텍처의 패러다임을 이동시킨다. SOA는 다음과 같은 4가지 원칙을 반영하는데, 이것이 바로 전통적인 소프트웨어 아키텍처 접근방법과의 차이점이다. 따라서, 기존의 아키텍처를 SOA를 기반으로 한 아키텍처로 바꾸어 디자인하기 위해서는 다음 4가지 사항을 유의하여 고려해야 한다.


프로세스 중심

서비스 혹은 애플리케이션 통합에 대한 요구는 결국 비즈니스 프로세스 자동화라는 필요에 의해서 발생된다.
실제로 비즈니스 서비스는 타인에게 자신의 서비스를 제공하는 반면 프로세스 서비스는 이들 간의 통합을 위한 공통 인프라를 제공한다. 비즈니스 서비스가 실제 비즈니스 로직을 제공한다면, 프로세스 서비스는 프로세스 오케스트레이션(Orchestration). 즉, 언제, 어디서, 누구를, 어떻게 통합해야 하는 지 같은 제어 역할을 담당하게 된다.

사용자 삽입 이미지

이렇게 비즈니스 서비스와 프로세스 서비스의 역할을 분리하지 않은 상태에서는 여러 가지 문제점이 나타난다. 이는 비즈니스 프로세스의 진행 상태를 추적하거나, 프로세스 상에서 발생하는 비즈니스 적인 예외 사항 처리를 힘들게 만든다. 또 프로세스 변경 시 각 애플리케이션들을 함께 변경해야 한다는 문제를 발생시키며, 서비스 내부로의 진입이 필요하기 때문에 보안의 문제까지 유발한다.
이러한 문제점들을 해결하기 위해 SOA에서는 프로세스 서비스를 별도의 구성 요소로 두어 통합에 필요한 메시지 처리와 서비스 오케스트레이션을 담당하게 하고 있다. 그렇게 함으로써 통합에 참여하는 애플리케이션이 자신의 고유 기능에만 집중할 수 있도록 한다.
이런 구조는 각 애플리케이션들의 서비스 진입 지점을 프로세스 서비스로 단일화하고, 업무 프로세스 추적을 가능하게 해준다. 이를 통해 비즈니스 외적인 예외 사항을 보다 쉽게 처리하게 할 수도 있고, 각 애플리케이션들은 업무 프로세스 변경에 독립적일 수 있게 된다.
물론 프로세스 서비스는 메시지 처리, 메시지 연계(Correlation), 비즈니스 트랜잭션 처리, 영속적(Persistent) 프로세스 관리 기능 등을 기본적으로 제공해야 하는데, 이 역시 결코 쉬운 일은 아니다. 이를 위해 몇 가지 솔루션을 사용할 수 있는데 이들은 BPEL4WS(Business Process Execution Language For Web Services)와 같은 표준 언어로 기술된 비즈니스 프로세스의 복잡한 과정을 자동화한다.


플랫폼 독립적 애플리케이션 통합

일반적으로 기업 내의 애플리케이션은 비즈니스 단위별로 작성되고 있으며 그 플랫폼 또한 다양하다. 이에 따라 각 애플리케이션의 통합을 위해 별도의 통합 계층을 두는 것이 일반적이었다. 물론 서로 다른 플랫폼일 경우에만 이러한 통합 계층이 나타나는 것은 아니다. 동일한 플랫폼이라 할지라도 서로 다른 버전을 사용하거나, 공급 벤더가 다를 경우 역시 이러한 통합 계층이 필요했다.
그런데 기업 비즈니스의 경우 기술이나 제품의 변화가 매우 빠르다고 해서, 연결된 애플리케이션들을 동시에 업그레이드하거나 재작성하는 것은  현실적으로 불가능하다. 결과적으로 기업 내 시스템들은 필연적으로 이질적인 환경을 가질 수밖에 없게 되는데, 이는 통합 계층을 점점 더 넓어지게 만든다. 또 이것은 성능, 신뢰성, 보안 등과 같은 문제들까지 더욱 복잡한 양상을 띄게 한다.
애플리케이션들은 서로 연결될수록 더 많은 요구를 처리해야 하기 때문에 더 높은 성능을 필요로 하게 되며, 다른 보안 수준의 기술을 사용하고 있는 애플리케이션들이 연결될 경우, 서로의 보안 수준에 영향을 끼치게 되어 연결된 시스템의 신뢰성이 자신의 신뢰성에 직접 영향을 끼치게 되는 경우도 발생한다.
SOA에서 지원하는 플랫폼 독립적인 통합이라는 의미는 단순히 모두가 합의할 수 있는 공통의 프로토콜을 규정함으로써 구현 기술에 관계없는 연결을 보장한다는 것만을 의미하는 것이 아니다. 통합에 따른 성능 요구에 적절하게 대응할 수 있는 스케일 아웃(Scale Out)이 가능해야 하며, 구현 기술에 관계없는 보안 수준을 제공하거나 이를 명시적으로 관리할 수 있어야 한다. 또한 애플리케이션 수준의 신뢰성을 보장할 수 있는 여러 가지 장치들도 모두 포함하고 있어야 한다.


느슨한 연결(Loosely Coupled) 지향

프로세스 설계를 용이하게 하기 위해서는 프로세스 자체를 단순화시켜야 하며, 이것은 서비스 사이에 발생하는 상호 작용을 단순화 시켜야 한다는 것을 의미한다.
실제로 각 서비스들은 기본적으로 독자적인 시스템이기 때문에, 기존 서비스의 비즈니스 로직은 얼마든지 추가, 변경 확장 될 수 있다. 또 이런 변화는 서비스의 인터페이스에 반영이 되기 마련이다.
하지만 일반적으로 비즈니스 컴포넌트를 작성하기 위해 주로 사용되는 기술들(COM+, EJB, CORBA 등)은 객체지향언어를 기반으로 하고 있다. 객체지향언어 기반의 기술들은 인터페이스의 변화에 대응하기 힘들며, 서비스 내부 구현에 사용되는 인터페이스와 외부로 노출되는 비즈니스 인터페이스를 구분하기가 힘들었다.
이런 문제를 해결하기 위해서는 서비스가 느슨하게 연결된 인터페이스를 제공해야 한다.

사용자 삽입 이미지

사용자 삽입 이미지

위 그림은 캠코더를 구입 혹은 판매하는 두 가지 방식에 대한 것이다. 전자는 판매상을 직접 방문하거나 전화를 통해 구입하는 방식인 반면, 후자는 팩스를 이용해 구입하는 방식이다. 위의 두 가지 경우 모두 판매업자와 소비자가 서로 상호 작용을 하게 되며, 이러한 상호 작용은 적절한 절차 즉, 프로세스를 따라 진행된다. 그리고 상호 작용이 적절한 순서대로 진행되었을 때 실제 구매 혹은 판매가 발생한다.
여기서는 후자의 방식이 전자의 방식에 비해 보다 느슨하게 연결되어 있는 것이다. 전자의 경우 손님과 점원 사이의 첫 인사와 마지막 인사 사이에 발생하는 모든 상호 작용이 동일한 상점, 비교적 짧은 시간 내에 모두 발생하는 관계로 각 상호 작용들이 순서, 시간, 장소에 매우 밀접하게 결합되어 있다.
반면, 후자의 경우, 각 상호 작용들은 순서, 시간, 장소에 비교적 느슨하게 결합되어 있다. 즉, 구매자가 어떤 경로를 통해 카탈로그를 구했든 구매자는 정확하게 그 카탈로그가 무엇을 의미하는 지 알 수 있으며, 카탈로그를 입수했다고 해서 바로 물건을 구매할 필요도 없다. 판매자의 입장에서도 이전 카탈로그 전송 여부에 상관없이 자신의 팩스로 들어온 정보가 무엇을 의미하는 지 이해할 수 있으면 그만이다. 또 다른 중요한 점은 전자에 비해 후자는 복잡한 상호 작용이 발생하지 않으며, 절차는 훨씬 단순해졌다는 점과 전자에 비해 비교적 적은 수의 종업원으로도 많은 주문을 처리할 수 있다는 점이다.
이런 차이가 발생하는 이유는 카탈로그가 전달하는 정보의 양이 훨씬 더 완전하기 때문이다.
결국 느슨한 인터페이스라는 것은 보다 완전한 정보를 포함하고 있어 시간, 장소, 순서 등에 독립적인 인터페이스를 의미한다.
주의할 점은 느슨함과 밀접함은 서로 선택적인 것이 아니라 연속적인 개념이라는 점이다. 그러므로 여러 가지 현실적인 고려 사항을 생각해 적당한 수준의 느슨함을 유지하는 것이 중요하다.
정리하자면, 느슨하게 연결된 인터페이스는 보다 완전한 정보를 기술하며, 서비스간의 종속성을 줄여주고 프로세스를 단순화시켜준다.


메시지 및 프로세스 상태 관리

SOA 도입시 주의를 기울여야 할 원칙 중 하나는 상태 관리 측면이다.
일반적으로 컴포넌트는 메소드(method) 호출을 통해 비즈니스 로직을 구동한 후, 컴포넌트를 호출한 애플리케이션의 데이터 저장소에 영속적(persistent) 데이터를 저장하게 된다. 여기서 영속적 데이터란 '고객의 주문 내역'과 같이 일반적으로 관계형 데이터베이스에 저장되는 정보를 의미하는데, 서비스는 각각이 독립된 시스템이기 때문에 연속적 데이터를 각 서비스에서 관리하게 된다.
SOA에서의 서비스는 프로세스 및 메시지 상태의 관리를 요구한다.
메시지 상태의 관리란 중복된 메시지, 비동기 메시지 등을 효과적으로 다루기 위해 필요하다. 즉 물건에 대한 주문서를 상점에 보냈음에도 불구하고 응답이 없어 다시 주문서를 보냈다고 하자. 이때 상점에서 주문서를 두부 받았지만, 이 주문은 한차례의 것으로 처리해야 한다.
프로세스 상태 관리는 전체 비즈니스 프로세스 상에서 서비스 자신이 어떤 순서에 도달해 있는 지 관리하기 위해 필요하다. 전체 프로세스 중, 어떤 작업까지를 완수했는지, 앞으로 어떤 작업을 계속 해야 하는지, 프로세스 도중 발생한 예외나 오류를 어떤 방식으로 보정할 것인지 등을 관리하기 위해 필요하다.

크리에이티브 커먼즈 라이선스
Creative Commons License
Tag : , ,


BLOG main image
아직 산을 오르는 이유는 산 만한 사람을 만나지 못했기 때문이고 산 만한 사람이 되지 못했기 때문이다.
 Notice
 Category
분류 전체보기 (162)
일상을 늘어놓다 (42)
나를 찾아 떠나다 (53)
마음을 데우다 (18)
최고를 꿈꾸다 (32)
Resume (16)
 TAGS
Document-View MVC패턴 PAC 패턴 MVVM패턴 MVP패턴 MVVM Document-View패턴 Pattern MVC
 Calendar
«   2010/09   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30    
 Recent Entries
MVC패턴과 그 가계(家系)
[리쿠르트] Trust yourself? or Trust only..
[오감도] S1. His Concern
[패턴] 정의와 의의
[소설] 신의 축복이 있기를, 로즈워터씨
[잡지 기고문] NGF 그리고 프레임워크
이정표
항구
하늘, 초보의 습작품.

 Recent Comments
멋진 글이네요.
dd - 03/20
김영하! 아, 정말 말..
Bailar - 2008
어릴때 단양에 다녀..
짱구눈썹 - 2008
택시 타고 돌아댕길..
택시 - 2008
오랜만에 넷상에서..
쨈 - 2008
너도 잘 지내지? 뭐..
짱구눈썹 - 2008
잘지내고 있어? 친구..
진영 - 2008
질러라~~~ ㅎㅎㅎ 잘..
찬 - 2008
맘에 있으면 먼저 지..
bart - 2008
요즘 차에 관심있다..
Yim, Hyung-jun - 2008
 Recent Trackbacks
 Archive
2010/08
2010/04
2010/02
2009/03
2009/01
 Link Site
OnOffMix
SmartPlace
강성재, Microsoft
김유철, .NETXPERT
노현종, Miracom Inc.
류한석, SoftBank
안재우, .NETXPERT
이건복, .NETXPERT
이동범, .NETXPERT
전병선, ENSOA
정용주, Miracom Inc.
황순영, Feelanet
황재선, SoftBank
 Visitor Statistics
Total : 57,390
Today : 15
Yesterday : 23
rss