블로그 이미지
생각처럼

카테고리

전체보기 (209)
TOOL (1)
다이어리 (1)
Bit (200)
android (8)
C&C++ (3)
C# (26)
VB.Net (4)
MFC (0)
Win Ce (5)
아키텍쳐 (4)
WPF (9)
Rom (0)
읽어보기 (25)
Linux (24)
Java (0)
HELP? (0)
Total
Today
Yesterday

달력

« » 2025.2
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

공지사항

태그목록

최근에 올라온 글

개집을 지을 때는 그냥 만들면 된다통나무집을 지을 때는 목수만 있으면 가능할 것이다하지만 63빌딩을 지을 때는당산철교를 다시 만들 때도 ‘그냥’ 만든다는 표현이 가능할까어느 정도 이상의 규모가 되면 복잡도가 기하급수적으로 증가하여 인간이 직관적으로 봐서 이해할 수 있는 크기를 훌쩍 넘겨버린다그래서 아키텍쳐는 등장하게 된다. <?XML:NAMESPACE PREFIX = O />

(참고많은 문헌에서 소프트웨어 아키텍쳐를 설명하기 위해 건축 설계의 비유를 들곤 한다이와 같은 비유를 메타포어 (Metaphore)라 하는데이를 단순히 어떠한 사실을 설명하기 위해 설정한 예일 뿐이라고 간과하기에는 그 중요도가 좀 크다고 볼 수 있다메타포어를 어떻게 잡느냐에 따라 개발자의 마인드가 바뀔 수 있기 때문이다예를 들어최근 객체지향이나 컴포넌트 기반의 개발방법은 반복적인(iterative) 개발 라이프 사이클을 강조하고 있다그러나 위에서 사용한 건축의 메타포어는 이 같은 패러다임 내에서 오해를 불러올 수 있다실제 반복적으로 건설되는 건축물은 하나도 없다그럼에도 불구하고 건축 메타포어를 사용하는 이유는시스템이 비대해지면서 발생하는 복잡도를 설명하는 데 무리가 없기 때문이다메타포어에 관련된 내용을 보고 싶다면Steve C McConnell의 명저 Code Complete나 최근의 경향으로서 Alistair Cockburn의 글 ‘Games Programmer Play’ 등을 참고하기 바란다.

http://www.sdmagazine.com/documents/s=2398/sdm0202a/0202a.htm )

 

1.     소프트웨어 아키텍쳐의 필요성

 

노트패드는 ‘그냥’ 만들 수 있지만 흔히 우리가 무슨 무슨 시스템이라고 부르는 중대형 프로젝트의 결과는 절대로 ‘그냥’ 만들어지지는 않는다인식하고 있건 아니건 모든 소프트웨어는 아키텍쳐를 가지고 있다누가 만드냐에 따라 다르겠지만일반적으로 인식하고 만들어진 아키텍쳐는 그렇지 않은 아키텍쳐보다 훌륭할 것이다.

Fredrick P. Brooks가 그의 신화적 저서 ‘The Mythical Man-Month’에서 지적한 ‘9명의 여자가 투입된다고 해서 아기를 한달 만에 나을 수는 없다’ 라는 속담의 비유는 우리에게 많은 것을 시사하고 있다.프로젝트가 어느 정도 이상의 규모를 뛰어넘으면 산술적인 계산으로는 나오지 않는 새로운 이슈들이 등장하게 된다[Brooks 1975]

 

1.1.   의사소통과 규모

5명의 개발자가 참여하는 프로젝트와 10인의 개발자가 참여하는 프로젝트는 단순하게 규모가 2배가 늘어났음을 의미하지는 않는다. 5명일 때의 대화 통로는 10개이지만 10명일 때는 45개가 가능하다.

 

1.2.   활동비율과 규모

프로젝트 규모가 증가하고 형식적인 의사 소통의 필요성이 증가함에 따라프로젝트가 필요로 하는 활동의 종류는 극적으로 바뀐다소규모 프로젝트에서 구현은 가장 두드러진 활동으로 전체 개발 시간의 80%를 차지한다중간 규모 프로젝트에서구현은 여전히 주도적인 활동이지만전체 노력에 대한 비율은 약 50%로 떨어진다아주 대형 프로젝트에서는 아키텍쳐통합성시스템 테스트가 구현과 동일한 혹은 그 이상의 비율을 차지한다. [Brooks 1975]

 

1.3.   프로그램상품시스템시스템 상품

코드 행수와 팀 크기가 프로젝트 규모에 영향을 미치는 유일한 요소는 아니다더 치밀하게 영향을 미치는 것은 최종적인 소프트웨어의 품질과 복잡성이다. 2500행의 프로그램 개발에 1개월이 걸린다면5000행의 프로그램은 6개월이 걸린다.

상품으로 제작되는 프로그램은 패키징문서화치장 등의 여러 작업으로 인해 일반 프로그램보다 약3배 정도의 비용이 든다또한 함께 작동할 프로그램 그룹인 시스템은 단일 프로그램에 비해 약 3배의 비용이 들고 이를 제품화하기 위해서는 단일 프로그램의 약 9배의 비용이 든다.[Boehm 1981]

 

1.4.   오류

오류의 종류와 양은 프로젝트의 크기에 영향을 받는다소규모 프로젝트에 있어 구현 상의 오류는 모든 오류의 약 75%이다더 큰 프로젝트에서 구현 오류는 전체 오류의 약 50% 정도로 줄어든다나머지 오류는 아키텍쳐와 분석에서 발생하게 된다.[Grady 1987]

결함의 종류가 크기와 함께 변하는 것처럼 결함의 수도 증가한다다음은 프로젝트의 크기와 오류 밀도간의 상관관계를 표현한 표이다.[Jones 1977]

 

프로젝트 크기(코드의 행)

오류 밀도

2K 이하

천행의 코드(KLOC)  0-25 오류

2K-16K

KLOC 0-40 오류

16K-64K

KLOC 0.5-50 오류

64K-512K

KLOC 2-70 오류

512K 이상

KLOC 4-100 오류

 

1.5.   생산성

생산성은 프로젝트 크기에 있어 소프트웨어의 품질과 많은 점을 공유한다작은 크기의 프로젝트에서 생산성의 가장 큰 영향력은 프로그래머 개인의 기술이다그러나 프로젝트 크기가 증가함에 따라,팀 크기와 조직이 생산성에 대단한 영향을 미친다다음의 표는 프로젝트의 크기와 생산성의 상관관계를 표현한다.[Jones 1977]

 

프로젝트 크기(코드의 행)

월별 코드 행수

2K 이하

333-2000

2K-16K

200-1250

16K-64K

125-1000

64K-512K

67-500

512K 이상

36-250

 

 

2.     일반 설계와 아키텍쳐의 차이

 

아키텍쳐와 설계와의 공통점은 둘 다 요구사항을 만족하기 위한 해법을 제시한다는 것이다둘 간의 차이는 아키텍쳐는 보다 큰 그림에 초점을 맞추고 설계는 좀 더 미세한 문제에 초점을 맞춘다는 것이다다음의 비교는 아키텍트(Architect)와 비 아키텍트 간의 차이를 좀 더 직관적으로 이해할 수 있도록 도와줄 것이다.[suntone]

 

아키텍트가 다루지 않는 부분

아키텍트가 다루는 부분

버튼이 눌렸을 때 어떻게 반응할까?

버튼이 얼마나 자주 눌릴까?

얼마나 많은 동시 사용자가 버튼을 누를까?

버튼을 누르는 사람들이 인트라넷 내에 있을까바깥에 있을까?

시스템이 이벤트에 어떻게 반응하는가?

각 이벤트간에는 어떠한 시간적인 순서와 제약 조건들이 존재하는가?

업무 규칙이 어떠한가?

업무 규칙이 얼마나 복잡한가?

얼마나 자주 변하는가?

개인에 의해 개발되는가독립된 팀에 의해 개발되는가?

그 규칙들이 별개로 변하는가서로 영향을 주며 같이 변하는가?

데이터베이스 스키마가 어떠한가?

스키마가 얼마나 복잡한가?

기존의 시스템에 의한 제약은 어떠한 것들이 있는가?

그 메시지에는 어떤 필드들이 있는가?

그 메시지와 상호작용하는 외부의 시스템은 어떤 것이 있으며 그들은 어떤 특징을 갖고 있는가?

 

위의 표를 통해 아키텍트가 아키텍쳐를 설계할 때 어떤 점들을 고려하는지 직관적인 이해를 할 수 있었을 것이다이제 좀 더 정확한 차이를 비교해보자.

어떤 사람들은 윈도우보다 리눅스가 좋은 시스템이라고 하고 어떤 사람들은 리눅스보다 솔라리스가 더 좋다고 한다이 때 무엇을 기준으로 좋다 나쁘다고 사람들은 얘기하는 것인가가장 쉽게 눈에 보이는 요소는 시스템의 기능일 것이다하지만 그것은 누구나 파악할 수 있는 요소이고 사실 기능의 구현은 누구나 할 수 있는 것이다예를 들어 마우스 클릭 이벤트를 받을 수 있어야 한다는 기능은 모든 플랫폼이 다 가지고 있는 기능이다하지만 그 마우스 클릭에 대한 이벤트를 처리하는 방식은 플랫폼마다 다르다예를 들어 윈도우는 Callback이란 모델을 사용하고 자바의 경우는 Observer라는 모델을 사용한다여러 가지 이유로 Callback보다는 Observer모델이 더 바람직하기 때문에 자바가 윈도우보다 우월한 이벤트 모델을 가지고 있다고 얘기한다 (논란의 여지가 있지만). 이 때 그러한 여러 가지 이유에 해당하는 것들이 품질속성 (Quality Attribute)들이다그리고 아키텍쳐가 다루는 요소는 시스템의 개별적인 기능이 아닌 바로 이러한 품질속성 들이다. [suntone]

 

 

3.     품질속성 (Quality Attribute)

 

절대적인 기아의 상태에서는 음식의 맛을 가리지 않는다고른 영양가와 몸에 좋은 음식안 좋은 음식 등에 대해서도 고려할 여지가 없다일단 배를 채우고 봐야 한다그러나 좀 먹고 살만하게 되면 음식의 맛과 향칼로리와 각종 영양분과 같은 질적인 문제를 고려하기 시작한다.

분야마다 차이가 있겠지만 90년대 초까지 국내 소프트웨어 개발의 경향은 소프트웨어의 질적인 부분에 대한 고려 보다는 양적인 문제 즉소프트웨어의 기능적 특징에 대해 주로 다루어 왔다지나치게 눈 앞에 보이는 결과에만 집착한 듯 하다그러나 시스템의 수명이 매우 길고복잡하며 업무 핵심적(mission-critical)인 분야에 사용될 경우에는 소프트웨어의 기능에 대한 관심 뿐만 아니라 좀더 고차원 적인품질 문제가 중요하게 다루어 지게 된다.

어떤 것의 품질을 다룰 때는 여러 가지 세부 항목을 두고 살피게 된다변경용이성상호운용성효율성안정성시험용이성재사용성과 같은 소프트웨어의 품질 요소 (Quality Attributes)들이 이에 해당한다이러한 소프트웨어의 품질 요소는 IEEE-Std 830-1993과 같은 표준, CMU SEI에서 발표한ATAM(Architecture Tradeoff Analysis Method)과 같은 연구소의 산출물, Rational RUP와 같은 개별 기업의 솔루션에서도 나타난다.

하나 하나 이들에 대해서 살펴보자. [POSA I]

3.1.   변경용이성 (Changeability)

변경사항에 대해 쉽게 대처할 수 있는 소프트웨어가 고품질 소프트웨어이다소프트웨어 공학에서 지금까지 매우 중하게 다루어온 문제가 바로 변경/비용 곡선이다나중에 변경할수록 비용이 기하급수적으로 늘어간다변경의 종류나 시점에 따라 다음과 같이 유지보수성확장성재구조화성이식성 등으로 세분해 볼 수 있겠다.

l         유지보수성 (Maintainability): 나중에 문제가 발생했을 때 얼마나 쉽게 고칠 수 있느냐에 대한 것이다수술을 할 때 온몸 전체를 건드리는 것이 아니라 특정한 부분만 건드려도 고칠 수 있는 구조를 가져야 한다.

l         확장성 (Extensibility): 기능을 추가확장또는 제거하기 얼마나 쉬운 가에 대한 것이다.

l         재구조화성 (Restructuring): 컴포넌트들을 재배치해서 구조를 고도화 시키기 얼마나 편하냐에 대한 것이다.

l         이식성 (Portability): 다양한 종류의 플랫폼에 이식시키기 얼마나 편하냐에 대한 것이다.

 

참고 -------------------------------------------------------------

다음 그래프는 요구사항의 변화 혹은 결점을 해결하기 위한 비용이 시간대별로 얼마나 급격하게 증가하는지를 보여준다. IBM, GTE, Safeguard Software 프로젝트, TRW등에서 있었던  실제 대형 프로젝트들을 조사한 결과이다. [Boehm 1981]

대부분의 문제가 유지보수 단계에서 발생하고 유지보수가 시스템 개발 비용의 80% 정도를 차지하는 것을 생각하면 이 곡선의 기울기를 낮추기 위한 노력이 얼마나 값어치 있는 것인지를 실감할 것이다.[Ambler 1999]

 

 

이 곡선의 문제를 해결하기 위해 수많은 방법이 나왔다초기에 요구사항을 명확히 규정하고 향후 요구사항의 변화에 대처하기 위한 방법 등을 다루는 요구 공학유연한 설계를 통해 변화를 해결하는 비용을 줄이기 위한 패턴들최근의 이슈로서 곡선 자체를 직선으로 바꾸기 위해 엽기적(?)으로 노력하는XP (extreme programming)와 같은 방법론 등이 그 예이다그리고 그 모든 방법들의 중심에 있는 것이 소프트웨어 아키텍쳐이다아키텍트는 요구 공학유연한 패턴의 도입올바른 아키텍쳐 방법론 등을 통해서 어떤 변화에도 흔들리지 않는 강건한 아키텍쳐를 만들기 위해 노력해 왔다그리고 그러한 노력은 헛되지 않아 SUN J2EE Blueprint SunOne, MS .NET, IBM Sanfrancisco Framework, 미 국방부(DoD) C4ISR 등 많은 참조 아키텍쳐가 나왔고, SUN Suntone, Open Group TOGAF, 필립스의 Gaudi, BredMeyer Action Guide 등 아키텍쳐 구축에 사용되는 여러 방법론이 나왔다.

-------------------------------------------------------------------

 

3.2.   상호운용성 (Interoperability)

외부 시스템과의 연동이 얼마나 용이하게 되어 있느냐에 대한 능력이다다른 언어다른 규약다른 자료 형식을 가진 시스템과 연동하는데 문제가 없도록 만들어야 한다가장 낮은 단계의 상호운용성은 디스켓을 통한 자료 전달이 있을 것이고점점 상위 단계로 올라가면 동일한 프로토콜을 사용하여 연동하는 웹 서비스 혹은 IIOP와 같은 기술이 있을 수 있다.

 

3.3.       효율성 (Efficiency)

가지고 있는 자원을 얼마나 최대한 활용해서 효율적인 시스템을 만드느냐에 대한 문제이다응답 시간이나 많은 동시사용자의 수용 등과 관련된 문제들을 해결하기 위해 최소한의 비용으로 최대의 효과를 얻어내는 것이 목표이다.

 

3.4.       안정성 (Reliability)

예외적인 상황이나 예측 못한 상황에 직면했을 때 얼마나 시스템의 기능을 유지할 수 있느냐에 대한 문제이다여기에는 두 가지 세부 분류가 가능하다.

l         고장 감내 (Fault Tolerance): 에러가 발생했을 때 이것을 ‘복구’할 수 있느냐는 것이다현재 보잉 747기에는 747기용 시스템과 737기용 시스템이 동작하고 있다비교적 최신인 747용 시스템이 다운될 경우기능은 좀 떨어지겠지만 수년간 사용되어서 검증된 737기용 시스템으로 교체되므로 소프트웨어 버그로 비행기가 추락할 일은 거의 없다고 봐야 할 것이다.[Simplex]

l         강건성 (Robustness): 시스템의 정상 상태를 얼마나 깨뜨리기 어려운가에 대한 문제이다윈도우에서 애플리케이션이 잘못된 연산을 수행할 경우 윈도우는 도스처럼 정지되지 않는다그 애플리케이션만을 종료시킴으로써 문제를 해결한다물론 때때로 자신을 도스로 착각하는 가슴 아픈 경우가 있기는 하다.(정말 눈물나게 가슴 아프다.)

 

3.5.   시험용이성 (Testability)

많은 개발자들이 개발보다 디버깅에 시간과 노력을 많이 빼앗기고 있다어렵게 만들어 놓은 코드는 역시 문제가 또 발생할 수 있다쉽게 테스트 할 수 있다면 문제가 많이 해결된다테스트하기 쉬운 소프트웨어는 그 자체만으로도 품질이 좋다고 말할 수 있다주로 하드웨어와 연관성이 적은 경우 시험용이성이 좋은 경향이 있다기존에 사용하던 컴포넌트를 충분히 테스트하지 못하고 사용했다가 공중 분해된 미국의 챌리저 우주왕복선은 시험용이성의 중요성을 잘 시사해준다.

 

3.6.       재사용성 (Reusability)

개발 비용과 시간을 줄이기 위한 방법으로 재사용이 계속 강조되어 왔다재사용은 재사용 컴포넌트를 개발하는 것과재사용 컴포넌트를 사용한 개발의 두 가지 측면으로 살펴볼 수 있다모든 개발자가 인식하지만 실제로는 아무도 안 하는 것 중의 하나가 재사용일 것이다최근에는 막연한 재사용을 실제로 하기 위한 여러 가지 방법들이 제시되고 있다프레임워크와 같이 제품을 통한 아키텍쳐의 재사용, Product-Line과 같은 조직 혹은 산업단위의 방법론적 해결방법 등이 그것이다.

 

 

4.     아키텍쳐 스타일

 

이러한 품질속성을 만족하는 아키텍쳐를 발명 한다는 것은 어지간한 천재가 아니라면 불가능하다.사실 대부분의 경우에 아키텍쳐는 만들어지는 것이 아니다기존의 잘 만들어진 아키텍쳐들을 선택하고 우리 시스템에 적합하게 수정 작업을 한다이러한 기존의 잘 만들어진그리고 수 십년 동안 수많은 시스템으로부터 시행착오를 통해 정제되고 검증된 아키텍쳐들을 아키텍쳐 스타일이라고 부른다가장 널리 쓰이는 아키텍쳐 스타일인 Layer에 대해서 살펴보자.[Shaw, Garlan 1996]

 

4.1.   Layer

우리가 별 생각 없이 사용하는 인터넷은 모두가 알다시피 네트워크를 통해서 동작한다그리고 모든 네트워크의 구조는 흔히들 프로토콜 스택이라고도 부르는 Layer 아키텍쳐 스타일에 의해 구성되어 있다예를 들어 PC방에서 인터넷을 한다면 Lan Card/Network Device Driver/IP/TCP/HTTP 를 통해서 웹을 사용하게 된다가장 유명한 네트워크 구조인 ISO OSI 7 Layer도 이름에서 보다시피 Layer 구조를 사용한다.

 

 

 

 

 

4.1.1. 용도

Layer 아키텍쳐 스타일은 단일 단위로 개발하기에는 지나치게 복잡한 시스템을 특정 수준의 추상화 수준으로 각 계층 구조를 구성함으로써 시스템을 분해하는 방법이다예를 들어 네트워크의 예제에서는 물리적인(하드웨어적인추상화 수준에서 논리적인(소프트웨어적인추상화 수준까지를 계층도로 구성하였다.

 

4.1.2. Layer – Before & After

Layer가 해결하고 하는 문제는 무엇인가시스템을 설계하기 위한 주요 이슈들이 고수준의 문제와 저수준의 문제들의 혼합된 형태일 경우 그들을 분리하기 위한 방법이 Layer이다그러한 코드들이 한군데로 뭉쳐져 있다면 (유식한 말로 monolithic 하다고 한다작업의 분배가 힘들고약간의 코드의 변화에 대한 파급 효과 (도미노 효과)가 크다또한 시스템을 전체로서 이해해야 하기 때문에 이해하는 게 매우 어려워지고 그에 따라 변경용이성이 급격히 저하된다쉽게 얘기해서 main 함수 안에 모든 코드가 다 있는 격이다.

그렇다면 Layer를 적용하면 어떠한 점에 있어서 좋은가일단 위에서 나열한 문제는 모두 해결된다.뿐만 아니라 각 Layer를 표준화할 경우 하나의 계층을 구현한 각 제품들이 서로 교체 가능하게 된다.예를 들어 PC방의 랜 카드 혹은 디바이스 드라이버를 교체해도 아무 문제 없다이것은 변경용이성뿐만 아니라 각 계층을 독립적으로 재사용할 수 있음을 의미한다.

세상사 모두 그렇듯이 단점도 있다. Layer의 가장 큰 문제는 시스템을 몇 계층으로 구성할지각 계층의 역할을 무엇으로 할지 그 적정한 수준을 잡기가 굉장히 어렵다는 것이다그 다음의 문제는 항상 계층을 통해서 시스템이 동작하기 때문에 성능의 저하가 있을 수 있다는 것이다그 외의 문제로 모든 유스케이스가 항상 모든 계층을 통해서 동작하기 때문에 코드의 양이 불필요하게 늘어나는 경우가 많다.

(참고: Analysis Pattern, Refactoring 등의 저서로 유명한 Martin Fowler는 현재 Enterprise Application Architecture 란 제목으로 새로운 책을 준비하고 있다그는 계층을 Presentation, Domain, Data Source 로 나누어 각 계층에서의 이슈를 다루고 있다. Enterprise Application에 관심있는 분께 적극 추천하고 싶은 컨텐츠다http://martinfowler.com/isa/index.html

  Fowler의 주장이 아니더라도 J2EE, MS DNA 등에서 볼 수 있는 것처럼 현재 거의 모든 EALayer 아키텍쳐 상에서 다루고 있다그 기원은 MVC (Model-View-Controller) 패턴에서 찾아볼 수 있을 것이다. MVC가 뭔지 궁금하신 분들은 또 한번 나아갈 길이 생긴것이다. ^^; )

 

 

5.     관점 (View)

 

건축에 대한 설계 도면을 그릴 때 하나의 그림으로 그리는 것은 불가능하다평면도측면도전기배선도수도배관도 등등 여러 도면에 나뉘어 그리게 된다왜냐하면 건축물이란 작품은 매우 복잡하므로 하나의 그림에 표현하는 것이 불가능하기 때문이다소프트웨어 시스템도 마찬가지이다흔히 아키텍쳐를 소프트웨어의 큰 그림이라고 표현하지만 한 장의 그림은 아니다이 때 몇 장의 그림으로 표현할 것인가에 대한 문제는 아직 결론이 나지 않았다. (앞으로도 결론은 없겠지만여기서는 UML을 처음 만들어서 유명한 Rational 4+1 view라는 5개의 관점으로서 소프트웨어를 바라보는 방법을 소개한다.[RUP]

 

5.1.   4+1 view

 

 

4+1 View는 유스케이스를 중심으로 총 5개의 관점으로 시스템을 바라본다유스케이스 관점은 최종 사용자가 바라보는 시스템의 기능을 의미하며, Logical 관점은 소프트웨어를 구성하기 위한 모듈들의 구성으로 Layer 같은 구조가 이에 해당한다. Process 관점은 시스템의 동시성에 관한 내용으로 시스템에 어떤 프로세스스레드가 있는 지 식별하고 그들간의 관계 (소유동기화 등)를 표현한다. Implementation 관점은 최종 소스코드들의 관계로 자바의 패키지간의 관계가 이에 해당한다. Deployment 관점은 시스템의 노드들 (컴퓨터디바이스)이 어떻게 배치되고 그들이 어떻게 연결되어 있는지를 의미한다그리고 이러한 모든 관점들은 유스케이스를 중심으로즉 요구사항을 끈으로 서로 연결되어 있다.

소프트웨어 시스템마다 필요한 관점은 서로 다를 것이다예를 들어 오피스 같은 애플리케이션은Process Deployment 관점은 필요 없을 것이고반면에 아파치와 같은 웹서버를 개발한다면 그 둘은 빠질 수 없는 중요한 관점이 된다따라서 프로젝트마다 적절한 관점을 선택하여 사용하는 것은 아키텍트의 가장 중요한 작업 중 하나이다.

 

 

 

 

6.     맺음말

 

아키텍쳐 설계는 개발자의 작업 중에 가장 창조적이고 고난이도의 작업에 해당한다따라서 매우 많은 지식과 경험을 필요로 한다미국에서는 CSA(Chief Software Architect)라는 직책이 따로 있고MS의 빌게이츠 회장이 CSA를 맡고 있다엔지니어로 평생 있을 생각이라면 한번 도전해볼 만한 직책이 아닌가?

Posted by 생각처럼
, |

< ISO/IEC 참고 문헌 > 

☆ 소프트웨어 개발절차 

  • ISO/IEC 12207 Software Life-Cycle processes


    ☆ 소프트웨어 품질 및 생산성 향상 

  • ISO/IEC 9126, Quality Characteristics and Guidelines for Their Use
  • IEEE Std 1045, Standard for Software Productivity metrics
  • IEEE Std 1061, Standard for software Quality Metrics Methodology


    ☆ 소프트웨어 문제분류 및 우선순위 

  • IEEE Std 1044, Standard Classification for Software Anomalies 

     

  • ☆ 형상관리

  • ANSI/IEEE Std 828, Standard for Software Configuration Management Plans
  • ANSI/IEEE Std 1042, Guide to Software Configuration management


    ☆ 소프트웨어 산출물 평가

  • ANSI/IEEE Std 1012, Standard for Software Verification and Validation Plans
  • IEEE Std 1059, Guide for Verification and Validation Plans


    ☆ 소프트웨어 품질보증 

  • ISO 9001, Quality System - Model for Quality Assurance in Design/Development, Production, 
        Installation and Servicing
  • ISO 9000-3, Guideline for the Application of ISO 9001 to the Development, Supply, and 
        Maintenance of Software
  • ANSI/IEEE Std 730, Standard for Quality Assurance Plans


    ☆ 소프트웨어 요구사항 

  • ANSI/IEEE Std 830, Recommended Practice for Software Requirements Specifications 

     

  • ☆ 소프트웨어 안전성 및 유지보수

  • IEEE Std 1228, Standard for Software Safety Plans
  • IEEE Std 1219, Standard for Software Maintenance 

     

  • ☆ 소프트웨어 시험

  • ANSI/IEEE Std 829, Standard for Software Test Documentation
  • ANSI/IEEE Std 1008, Standard for Software Unit Testing
  • ANSI/IEEE Std 1012, Standard for Software Verification and Validation Plans
  • IEEE Std 1059, Guide for Verification and Validation Plans 

     

  • ☆ 소프트웨어 사용자 문서화

  • ANSI/IEEE Std 1063, Standard for Software User Documentation ☆ 작업분할구조도
  • MIL-STD-881, Work Breakdown Structures for Defense Materiel Items 

    [출처] ISO,IEEE Standard|작성자 육식공룡

  • Posted by 생각처럼
    , |

    출처 그 십자가의 길....... | 민지아범
    원문 http://blog.naver.com/kcufl/60065937813
    소프트웨어 요구사항 정의서의 IEEE 표준 : IEEE std 830-1998



    소프트웨어 요구사항 정의서 작성 - Writing Software Requirements Specifications
    http://www.techwr-l.com/techwhirl/magazine/writing/softwarerequirementspecs.html
    by Donn Le Vie, Jr.
     


    이런 시나리오가 있다 : 당신은 최근에 HTML Help 프로젝트를 마쳤다... 더이상 야근도 주말 근무도 하지 않고 정상 근무로 돌아 간다. 그때 개발팀의 리더가 당신의 사무실로 들어와서 "다음에 진행할 주요 프로젝트를 위해서  기능 요구사항 정의서 양식에 넣어주시오" 라고 말한다.

    "뭐라고요?" 당신은 약간 충격을 받은 모습으로 쳐다본다. "내가 왜 이런 대접을 받아야 하죠? 심지어는 어디서부터 시작해야 되는지 몰라요!, 기술 전문가 누군가가 도와줘 봐요... "

    ....




    당신의 프로젝트를 위해서 소프트웨어 요구사항 정의서를 작성하라
    Software Rquirement Specification (SRS) Template - start writing SRS for your project
    http://sachinkraj.wordpress.com/2007/10/04/software-requirement-specification-srs-template-start-writing-srs-for-your-project/

    SRS란 무엇인가?
    SRS는 기본적으로 고객 또는 잠재적인 고객 시스템 요구사항들 또는 주로 실재적인 디자인 작업 또는 개발을 하는 사람을 이해시키는 문서이다.


    좋은 SRS의 잇점
    -프로덕트가 무었을 할 수 있는지 고객과 공급자 간의 동의의 원칙을 수립한다.
    -개발의 수고를 줄여준다.
    -비용과 스케쥴을 추정할 수 있는 논거를 제공한다.
    -유효함과 검사의 기준선을 제공한다.
    -품질 향상을 위한 원칙으로써 제공한다.


    SRS는 어디를 지향해야 하나?
    1. 기능적으로 . 소프트웨어가 무었을 할 수 있는가?
    2. 외부 인터페이스들 . 소프트웨어가 사람, 하드웨어, 또는 다른 소프트웨어와 어떻게 상호작용을 하는지?
    3. 성능.  다양한 기능들의 속도, 가용성, 응답시간, 복구시간이 무었인지?
    4. 속성들. 휴대성(이식성), 정확성, 유지보수성, 보안성, 기타, 생각해보아야 할 것이 무었인지?
    5. 구현하는데 디자인 제약성. 효과에 어떤 표준을 요구하는지, 구현언어는 무엇인지, 데이터베이스를 통합하는 정책은 무엇인지, 자원 제한은 어떻게 되는지 , 운영환경은 어떻게 되는지. 기타.?

    훌륭한 SRS는 어떤 성격을 가지고 있나. SRS는 아래와 같아야 한다.
    1. 정확해야한다.
    2. 애매모호하지 않아야 한다.
    3. 완전해야 한다.
    4. 일관성이 있어야 한다.
    5. 안정성 and/or 중요도의 순위가 정해져야 한다.
    6. 검증할수 있어야 한다.
    7. 수정가능해야 한다.
    8. 추적가능해야 한다.




    자료 :
    IEEE Std 830-1998
    http://standards.ieee.org/reading/ieee/std_public/description/se/830-1998_desc.html


    Texas Department of Information Resources 의 양식
    http://www.dir.state.tx.us/pubs/framework/

    Posted by 생각처럼
    , |
    질서 있는 아키텍처 패턴이야기-1
    월간 마이크로소프트웨어 제공
    2009.06.09 / AM 00:52

    [지디넷코리아]패턴을 좀 더 쉽게 학습하고 실제 프로젝트에 잘 적용할 방법이 없을까요?” 이는 필자가 강의를 마치고 종종 듣는 질문이다. 이 글에서는 부족하지만 용기를 내어 필자가 공부한 패턴 지식들과 경험들을 소개한다. 이를 통해 독자 여러분들이 패턴을 학습하거나 활용하는 과정에서 발생할 수 있는 시행착오를 조금이나마 줄일 수 있는 지름길을 안내하고자 한다. 

     

    요즘은 대학교 학부생의 교과과정으로 들어갈 정도로 패턴은 많은 이들에게 알려져 있다. 하지만 필자 주위에는 패턴을 잘 활용해, 성공적으로 프로젝트를 마무리했다거나 좋은 결과를 보았다는 말보다는, 오히려 많은 불신들과 하소연들이 생겨나고 있다. 왜 이런 상황이 발생했을까? 이 글을 통해 독자들이 패턴에 대한 오해를 풀고, 올바른 시선을 가지길 바라면서 내용을 시작해 본다. 

     

    패턴을 대하기 이전의 마음가짐 - 유연성, 확장성 

     

    많은 이들과 패턴을 주제로 얘기하다 보면, 패턴에 대한 잘못된 관점을 가진 경우를 종종 보게 된다. 패턴을 통해 비약적인 성능 향상이나 생산성 증대가 이뤄질 거라 생각하는 사람도 있고 심지어 ‘Silver Bullet(묘책)’으로 생각하는 이도 있다. 물론 제한적인 도메인 안에서 성능, 생산성 향상을 가져올 수 있는 패턴도 있지만, 패턴 자체의 목적은 유연성과 확장성에 초점을 맞추고 있다. 

     

    초창기 객체 지향(80년대)에서 가장 중요시 여기던 패러다임은 ‘Reuse(재사용)’이었다. 그래서 Component와 같은 이상적인 패러다임이 나오기도 했다. 마치 레고(Lego)와 같이 조립만 하면 만들어지는 레고웨어(Legoware)를 꿈꾸어 오면서…. 

     

    하지만 현재 소프트웨어는 어떠한가? 빈번하게 바뀌는 고객의 요구사항, 몇 명이서는 결코 만들 수 없을 만큼 거대해진 규모, 길어진 소프트웨어 생명주기를 가진 녀석들이 대부분이다. 그렇기 때문에 소프트웨어가 가져야 할 중요한 설계 방향으로 재사용성보다는 쉽게 변화를 수용할 수 있는 유연성(Flexibility)과 확장성(Extensibility)이 대두되었다. 

     

    만약 여러분이 유연성과 확장성에 초점을 맞춘 설계에 관심이 있다면, 패턴은 좋은 도구가 된다. 하지만, 최적화나 성능 개선이 목적이라면 패턴보다는 알고리즘을 공부하는 것이 더 낫다. 그리고 패턴을 쉽사리 적용하지 못하는 여러 가지 장벽들이 곳곳에 존재한다. 패턴에 대한 불신들이다. 지면상의 제약으로 이 모든 내용을 언급하기는 어려우므로, 예전에 필자가 마소 2007년 8월호에 기고한 ‘미워도 다시 보는 패턴 이야기’를 꼭 읽어보길 권한다. 이 글에서는 패턴의 정의, 원칙, 참고할 만한 설계구조도 설명하고 있다. 

     

    패턴은 올바른 아키텍팅을 하기 위한 전술 

    2007년 10월 『Software Architecture in Practice』의 저자인 Rick Kazman이 한국을 방문해 ATAM에 대해 강연했다. 세미나를 마친 후 어떤 이가 “당신과 같이 훌륭한 아키텍트가 되기 위해서는 어떠한 소양과 지식이 필요한지 설명해 주시겠습니까?”라고 질문했고 그에 대한 대답으로 아키텍트의 덕목 중 전술로서의 패턴이 지닌 가치를 설명했다. 

     

    “전술이란, 전략에 비해 단기적인 의미를 가지는 것으로 소프트웨어의 큰 구성요소들을 나누고, 구성 요소 내에서 어떻게 구현 및 실행해 나갈지 계획을 세워나가는 것을 의미합니다. 이러한 전술을 많이 알고 있어야, 내실이 튼튼한 소프트웨어가 나올 수 있죠. 전술을 많이 알기 위해서는 경험 못지않게 간접 경험, 즉 패턴을 익히는 것도 중요합니다.” 

     

    간략히 패턴에서 전술의 예를 든다면 분산 객체의 마샬링(marshaling) 정책을 들 수 있다. Loosely Coupling하게 마샬링하기 위해 프로토콜 기반의 설계를 사용함으로써 확정성이나 관리의 용이성을 획득하지만, 응답속도나 처리량을 포기해야 한다. 반면에 Tightly Coupling하게 마샬링하기 위해서는 Simple Object를 만들어서 사용하는 방법이 있는데, 시스템에 종속적이고 변화에 유연하지 못한 단점이 있는 반면에 응답속도나 처리량이 더 뛰어나다. 

     

    흔히 Web Service(전자인 경우 - SOAP에 의한 프로토콜 전송 방식)과 COM+(후자인 경우 - Simple Object)의 데이터를 주고받는 경우라고 할 수 있다. 만약 여러분이 패턴을 통해 이러한 전략을 습득하고 있다면, 아키텍팅을 수립하는 데 겪는 많은 시행착오를 줄일 수 있다.

     

    ■ 패턴의 시작은 GoF부터? 

     

    GoF 책이 명서이며 패턴계에 큰 영향을 끼친 서적임은 분명하다. 하지만 독자 여러분이 처음 패턴을 접한다면 GoF의 『Design Pattern』이라는 서적은 난해할 수도 있다. 필자는 GoF 책이 처음 패턴을 접하기에는 난해하다고 말하는 개발자를 보았다. 필자 역시 GoF 책을 이해하기 위해서 세 번을 읽었고 읽을 때마다 새로운 느낌을 받았다. 마치 성경을 읽는 느낌이라고 할까? 그 만큼 깊이가 있는 책이다. 

     

    GoF 책은 1990년대 후반부에 쓰인 터라, 1990년 중반부에 사용되는 애플리케이션을 예로 들어 설명했고, C++의 이해를 수반으로 하고 있으므로 현재 우리가 관심을 가지고 있는 애플리케이션과는 약간 범위가 다르며 자바나 C#에 익숙한 초보 개발자에게는 난해할 수 있다. 

     

    그래서 2000년대에 이슈인 데이터베이스 프로그래밍과 같이 누구나 쉽게 이해할 수 있는 수준으로 설명한 책이 『Design Pattern Explained』였고 국내에서는 ‘알기 쉬운 디자인 패턴’이라고 번역되어 있다. 불과 4년 전 만해도 초보자를 위한 디자인 패턴 책은 이것밖에 없었다. 하지만 현재는 뇌공학을 연계로 해서 쉽게 개념을 파악할 수 있는 좋은 서적이 나왔다(『Head First Design Patterns』, 『알기 쉬운 디자인 패턴』 등). 

     

    다음 단계 서적으로는, 구체적으로 하나의 언어를 정해 언어별 특성을 파악하며 패턴을 살펴볼 필요가 있다. 여러분이 자바에 관심이 많다면 『Java 언어로 배우는 디자인 패턴 입문』을 추천하며 C++에 관심 있는 개발자라면 『GoF 디자인 패턴! 이렇게 활용한다』를 권하고 싶다. 그 이후에 GoF 서적을 보면 한결 수월하게 읽을 수 있을 것이다. GoF 패턴을 충분히 이해했지만, 프로그래밍에 바로 적용하는 사람은 그다지 많지 않을 것이다. 왜 그럴까? GoF 패턴은 패턴의 가장 기본인 Micro Pattern일 뿐이다. GoF 패턴은 단지 시작에 불과하다. 

     

    가족을 이루는 패턴 군을 파악하라 

    GoF 패턴을 읽은 다음 POSA 시리즈로 불리는 서적들이 있다. GoF와 어깨를 나란히 하는 패턴계의 명서 중에 명서이며, GoF를 읽은 분이라면 패턴에 좀 더 깊은 세계를 맛보도록 도와준다. GoF(1995년)가 나온 1년 뒤(1996년)에 볼륨 1권이 출간되었지만, 국내에는 2008년도에 역서가 나왔기 때문에 패턴 초보자들에게는 그리 알려지지 않은 서적이라고 할 수 있다. GoF가 가벼운 Micro Pattern이었다면, POSA는 좀 더 세부적인 도메인을 다루고 있다. 

     

    - Volume 1: Architectural Pattern (소프트웨어 구조를 잘 설계하기 위한 패턴) 
    - Volume 2: Concurrent and Networked Object Pattern (분산객체를 위한 패턴) 
    - Volume 3: Resource Management Pattern (자원을 잘 관리하기 위한 패턴) 

     

    이 책을 탐독하면 자연스럽게 패턴 군(Compound Pattern)들이 눈에 보이게 된다(물론 GoF 패턴이 밑단에 전체적으로 깔려 있다). 즉 패턴 하나가 혼자 쓰이지 않고 같이 잘 엮여 사용되는 패턴들이 보이기 시작할 것이다. 바로 이러한 패턴 군을 많이 습득하는 것이 패턴을 습득하는 올바른 방법이다. 그럼 소프트웨어 기본 구조에서 볼 수 있는 간략한 사례를 들어 패턴 군을 설명해 본다. 

     


     

    소프트웨어는 <그림 1>처럼 크게 세 가지 요소로 구성되는데 각각 공용부, 가변부, 설정부이다. 공용부는 소프트웨어의 많은 Feature에서 공통적으로 사용하는 부분으로 log, transaction, security와 같은 모듈을 말하며, 요즘 Aspect와 같은 기술들로 구성하는 것이 추세다. 우리가 눈여겨봐야 할 것은 설정부와 가변부이다. 그럼 하나하나씩 살펴보자. 

     

    Component Configurator Pattern 

     


    아키텍처 패턴(Architectural Pattern)을 다룬 『POSA1』 서적을 통해 알려진 패턴으로, 런타임시 사용하는 컴포넌트들을 제어하고, 시스템 중지 없이 컴포넌트를 추가, 제거, 교체할 수 있는 패턴이다. 

     


     



    <리스트 1>과 <리스트 2>는 Component Configurator 패턴의 간단한 샘플이다. 설정 파일(<리스트 1>)의 프로토콜이 HTTP면 그 정보를 읽어 HTTP 프로토콜로 메시지를 전송하고 FTP 프로토콜로 설정되어 있다면 FTP 프로토콜로 메시지를 전송할 수 있다. 이렇게 함으로써 런타임시에 객체의 속성을 정의해 변화에 유연하게 대처할 수 있다. 

     

    하지만. 새로운 프로토콜이나 로깅 정책이 추가되어야 한다면 <리스트 2>의 코드도 변경될 수밖에 없다. 이러한 문제를 해결하기 위해 Component Configurator 패턴은 Reflection 패턴과 병행해 사용해야 한다. Reflection은 런타임시에 객체를 생성하는 패턴으로, 이미 닷넷(.NET)과 자바 플랫폼에서 지원하고 있다. 여기서 Component Configuration을 통해 객체 정보를 읽어와 생성하는 Factory를 만들면, 객체를 생성하는 클라이언트 입장에는 별 걱정 없이 객체를 생성할 수 있다. 

     

    Template Method Pattern 

     



     


     

    Template Method 패턴의 가장 대표적인 예가 xDBC (ODBC, JDBC)이다. 댜양한 제품의 DB에 상관없이 xDBC에 동작하는 쿼리만 알면 언제든지 DB 제품을 쉽게 교체해서 쓸 수 있다. Template Method 패턴은 다른 패턴이 가지고 있지 않은 전체적인 흐름을 제어하는 Template Method(위 예에서는 doQuery)를 가지고 있는데, <리스트 3>의 doQuery를 보면 DB에 연결을 맺고 쿼리를 얻어오는 흐름이 슈퍼클래스(super class)에 있는 것을 볼 수 있다. 

     

    서브클래스(subclass)들은 슈퍼클래스의 계약에 따라 움직여야 하는 강력한 제약 상황에 놓여 있게 된다. 이로써 DB 제품을 별 걱정 없이 교체할 수 있는 큰 장점을 얻을 수 있다. 특히 프레임워크들은 일괄적인 제어 흐름과 상황에 맞게 서브클래스를 교체하기 위해, 필수적으로 Template Method를 사용한다. 

     

    <그림 1>을 다시 한 번 보도록 하자. 이제 전체적인 그림이 이해가 갈 것이다. 설정부에 객체의 속성을 Component Confi gurator를 통해 정의해 놓는다. 그 후 객체가 생성되는 시점에서 Factory가 현재의 상황을 고려해 적합한 객체를 선택한 후, 메모리에 로딩한다. 단 가변부에 있는 객체는 쉽게 교체할 수 있어야 하므로, Template Method나 Strategy와 같이 동일한 계약 상황(인터페이스를 구현하거나 Abstract를 상속하는 형태)을 유지해야 한다. 

     

    눈치 있는 독자는 이 구조를 어디서 많이 보았다고 생각할 것이다. 바로 스프링(Spring)과 같은 Dependency Injection Con tainer를 설명한 것이다. 좀 더 자세한 설명을 원한다면 필자의 블로그(종속성을 관리하는 방법 - http://arload.wordpress.co m/2008/12/07/dependency_managment/)를 방문하길 바란다. 

     

    아키텍팅의 핵심 SoC, 그리고 문제 중심으로 바라보기 

    소프트웨어 공학에 관심이 있는 독자라면 누구나 걱정거리의 분리, 관심거리의 분리라고 말하는 SoC(Separation of Concerns)를 들어본 적이 있을 것이다. 필자는 얼마 전 SoC와 복잡성에 대해 논쟁을 주고받은 적이 있다. 필자는 이 논쟁을 통해 SoC와 소프트웨어 아키텍팅의 가치/패턴의 연관성에 대해 다시 생각할 수 있었다. SoC라는 단어를 세상에 처음 발표한 Edsger W. Dijkstra의 정의는 다음과 같다. 

     

    “focusing one’s attention upon some aspect” 

     

    여러 가지 측면들을 동시에 생각하기는 힘드니, 잘 나누어 각각의 요소에 한 가지 관점만을 적용해 바라보겠다는 의미다. 흔히 분할 후 정복(Divide and Conquer)과 일맥상통하는 말이라 할 수 있다. 다양한 이해 당사자의 요구, 프로젝트의 특수한 상황, 잘못 설계된 아키텍처로 인해, 하나가 바뀌면 연쇄적으로 다른 곳에 변화가 발생하는 파문 효과(Ripple Effect)를 종종 만나게 된다. 

     

    이때 우리가 특히 중점을 두어 관리해야 하는 것이 종속성(Dependency)인데, 이러한 종속성이 유발시키는 강결합을 무너뜨리는 좋은 가이드라인을 제시하는 것이 바로 패턴이다. SoC를 얼마나 잘하느냐가 아키텍팅의 성공과 실패를 결정하므로, 패턴 기반의 좋은 참조 아키텍처(Reference Architecture), 특히 패턴 기반으로 구축된 시스템을 평소에 틈틈이 공부할 필요가 있다. 그 이유는 패턴은 군을 이뤄 사용되기 때문이다. 특히 도메인에 한정될수록 사용되는 패턴 군들은 더 제한적이다. 

     

    어느 날 갑자기 여러분의 상사가, 모든 환경에서 좋은 성능을 보이는 웹 서버를 설계(SoC)하라고 한다면 어떻게 해야 될까? 먼저 비슷한 선례, 즉 참조할 만한 아키텍처가 있는지 찾아볼 것이다. 

     

    유명한 TAO/ACE의 창시자인 Douglas C. Schmidt 박사는 이에 대한 대답으로 주고받는 파일이 사이즈, 클라이언트의 다양한 요청 속성(예를 들면 요청 빈도, 요청시 얼마나 오랫동안 세션을 맺고 있는지 등), 고객의 웹사이트 접근 경로 등을 고려해 환경에 맞게 적절한 전략을 변경할 수 있는 웹서버 JAWS의 소스 코드와 아키텍처를 공유했다(필자의 JAWS 아키텍처 동영상 강의- http://www.devpia.com/net2/EvaCast/Lecture/ ?cu=view&r=11 참조). 

     

    이렇게 괜찮은 참조 아키텍처를 발견했다고 하더라도, 왜 이렇게 아키텍처가 구축되었는지에 대한 문제 상황의 깊은 이해가 요구된다. 어떤 부분에는 유연성을 중심으로 설계했고, 또 다른 부분은 유연성보다는 성능을 중심적으로 설계했다. 왜 이렇게 결정했을까? 

     

    결국 이렇게 구축한 시스템의 의도를 잘 파악하기 위해서는 패턴을 하나의 해결책으로 바라보는 것이 아니라, 패턴의 의도와 다루는 문제들을 중심적으로 바라볼 필요가 있다. 특히 아키텍처가 거대해질수록 이러한 접근법은 더 효율적이다. 

     

    좋은 패턴 서적 소개 

     

    현재 발표된 다양한 패턴 서적들을 소개하니 여러분의 프로젝트나 관심 분야 서적들을 골라 읽어보길 바란다. 

     

    ● PLoPD 시리즈 
    해마다 다양한 곳에서 여러 종류의 PLoP라는 유명한 패턴 학회가 열린다. 그야말로 패턴의 보고이며, 시중에 나온 새로운 도메인의 패턴 서적들은 거의 다 이 학회를 한번 거쳤다고 해도 과언이 아닐 정도로 영향력을 행사하며 다양한 도메인을 폭 넓게 다루고 있을 뿐만 아니라, 소프트웨어계의 거장들을 만날 수 있는 좋은 학회이다. 이 학회에서 발표된 패턴 중에 괜찮은 패턴들을 묶어 PLoPD(Program Language of Program Design)라는 서적으로 출간되는데 이것 바로 PLoPD이다. 

     

    ● POAD(Pattern Oriented Anaysis Design) 
    그야말로 Pattern Driven Design이라고 불러도 좋을 만큼, 패턴을 활용해 분석이나 적합한 전략/전술을 선택하는 가이드라인을 제공하는 서적이다. 아마존에서 호평을 받았지만, 국내에서는 잘 소개되지 않았다. 학교 도서관이나 주위에 있는 분이 가지고 있다면 꼭 읽어 보길 권한다. 

     

    ● Holub on Patterns(실전 코드로 배우는 실용주의 디자인 패턴) 
    응용프로그램 2개를 기반으로 GoF패턴 23개를 모두 다루고 있는 서적이다. GoF 패턴의 가치를 느낄 수 있는 서적이며, 특히 패턴 군(Compound Pattern)들에 대한 좋은 시선을 제공하는 서적이다. 거기다 패턴을 만드는 5원칙을 역자가 직접 추가해 넣어주었기 때문에 패턴을 학습한 이들에게도 좋은 서적이다. 

     

    ● Remoting Patterns 
    POSA2가 오픈소스 CORBA인 TAO, ACE에 사용된 패턴을 소개한다면, 조금 더 최신 기술인 .NET Remoting, EJB, Web Service, CORBA에 사용된 분산 패턴들을 소개하는 책이다. 겉보기에는 POSA2와 다른 패턴을 소개하고 있는 것 같지만 다시 한 번 되짚어보면 POSA2에 소개된 패턴과는 내부 맥락이 같다. 이 서적을 통해 최신 분산 기술에 정리된 내용을 체계적으로 정리할 수 있고 다양한 분산 객체들의 아키텍처를 비교, 평가할 수 있다. 

     

    ● xUnit Test Patterns 
    TDD가 이슈가 되면서 테스팅(Testing)에 대한 관심이 매우 높아졌다. VS.NET과 이클립스(Eclipse) 역시 이러한 흐름에 발 맞춰 다양한 테스팅 관련 기능을 제공하고 있다. 그 중 여러분이 가장 자주 사용하는 것은 아마 xUnit(JUnit, NUnit, CUnit…)일 것이다. 이 책은 유닛 테스팅(Unit Testing)을 하기 위해 어떻게 테스팅 코드를 작성하고 리팩토링을 하는지를 자세히 설명한다. 

     

    ● Patterns For Fault Tolerant Software(耐고장성 소프트웨어를 위한 패턴) 
    퀄러티(Quality) 검증의 TDD와 방어적인 프로그래밍을 넘어서, 내부적인 고장에도 스스로 복구 및 조치를 취할 수 있는 신뢰성 있는 소프트웨어를 개발하는 데 지침이 되는 서적이다. Error Handling/Mitigation, Fault를 Detection하는 다양한 패턴들을 소개한다. 

     

    ● PEAA(Patterns for Enterprise Application Architecture) 
    리팩토링의 창시자인 Martin Fowler가 쓴 책으로, 엔터프라이즈 애플리케이션을 설계하기 위한 다양한 패턴이 소개돼 있다. 물론 POSA나 PLOP에 나온 패턴을 현대적으로 바꾼 것이 대부분이지만, Martin Fowler의 과거 기술, 용어, 개념들을 현대에 맞게 변형, 확장하는 능력을 다시 한 번 느낄 수 있는 서적이다. SI 분야에 속해 있다면 역서라도 꼭 읽어보길 권한다. 

     

    ● Enterprise Integration Patterns 
    EAI를 위한 메시징(Messaging) 처리에 중점을 둔 서적이다. 어떻게 메시징 시스템을 만드는지 자세히 설명했고, BPM/ EAI/Enterprise SOA에 관심이 있다면 읽어볼 필요가 있다. 

     

    ● Real-Time Design Patterns 
    Real-Time 시스템을 구축할 때 가장 고려해야 할 것이 예측성이다. 우선순위를 고려하고 주어진 데드라인 안에 작업(Job)이 수행될 수 있는지 판단하는 것이 가장 핵심이다. 만약 현재의 요청한 작업이 제한 시간 안에 답변을 줄 수 없을 것 같다면, 차선책을 선택하는 형태로 설계되어야 한다. 이러한 우선순위와 스케줄링에 관심 있는 개발자라면 도움이 될 서적이다. 

     

    ● Refactoring to Patterns 
    패턴을 활용하여 리팩토링하는 방법을 소개하는 서적이다. Martin Fowler의 리팩토링을 읽은 독자라면 그 다음 이 서적을 읽어 보길 권한다. ‘패턴을 활용한 리팩토링’이라는 제목으로 역서가 출간되었다. 

     

    ● Architecting Enterprise Solutions 
    고성능과 인터넷 기반의 시스템을 구축할 때 유용한 패턴 서적으로, 실제 실무에 인프라를 구축하는 개발자에게 적합하다. 시스템 제어, 성능 측정, 적절한 서버 수 산정과 같은 유용한 가이드라인이 제공된다. 

     

    끝나지 않는 패턴 이야기-PLoP 

     

    지구상에서는 여전히 많은 패턴들이 계속 발표되고 있다. 그 중 여러분에게 가장 소개하고픈 것은 매년 열리는 PLOP 학회에서 발표된 논문이다. 

     

    - PLoP(미국에서 열리는 기반 학회) http://arload.wordpress.com/2008/04/02/plopfestival/ 
    - EuroPLoP(유럽에서 열리는 패턴학회 자료) http://arload.wordpress.com/2008/08/11/euro_plop_paper/ 

     

    관심 있는 독자는 지난 10년간 발표된 패턴들을 끊임없이 학습하길 권하며 이 글을 마친다. 그 이외에도 다양한 패턴 학회가 존재하지만, 언어적인 제약이나 자료 수집의 어려움 때문에 일부만 소개한다. 

     

    - ChiliPLoP(Hot Topic을 위주로 다루는 패턴 학회) 
    - KoalaPLoP(오스트렐리아인을 위한 패턴 학회) 
    - MensorePLoP(일본에서 열리는 패턴 학회) 
    - SugarLoafPLoP(라틴 아메리카인들을 위한 패턴 학회) 
    - VikingPLoP(북 유럽 사람들을 위한 패턴 학회) 

     

    참고자료 
    1. Rick Kazman, 소프트웨어 아키텍처 이론과 실제, 에이콘출판 
    2. Rick Kazman, 아키텍트가 되기 위해 갖추어야 할 덕목 - http://arload.wordpress.com/2008/06/13/rickkazman/ 
    3. The JAWS Adaptive Web Server - http://www.dre.vanderbilt.edu/JAWS/, 
    http://www.devpia.com/net2/EvaCast/Lecture/?cu=view&r=11 
    4. Edsger W. Dijkstra, “On the role of scientific thought” - http://www.cs.utexas.edu/users/EWD/transcriptions/EWD04xx/EWD447.html 
    5. 손영수, 미워도 다시 보는 패턴 이야기, 마이크로소프트웨어 2007년 8월호

     

    [필자소개]
    손영수 arload@live.com , http://www.arload. net|아직 아키텍트는 아니지만, 훌륭한 아키텍트를 꿈꾸며 부지런히 살고 있는 개발자이다. 데브피아 소프트웨어공학 스터디인 EvaCast를 6년째 이끌고 있으며, 이 땅의 개발자들을 위해 스터디 멤버들과 함께 한 결과물을 무료로 http://www. EvaCast.net을 통해 공유하고 있다. 부족한 실력이지만 지식을 나눌 때는 누구보다 ‘부자’라는 자부심을 가지고 지식 나눔에 힘쓰고 있다. Pattern 전도사를 꿈꾸고 있으며 PLoP와 같은 Pattern 학회를 국내에 만드는 것이 꿈이다.
    Posted by 생각처럼
    , |

    최근에 달린 댓글

    최근에 받은 트랙백

    글 보관함