달력

032010  이전 다음

  •  
  • 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
  • 31
  •  
  •  
  •  
http://techdistrict.kirkk.com/wp-content/uploads/2009/12/3pillars1.png

요즘 가장 마음에 드는 블로그인 @Kirkk 에 올라온 그림이다. 시조를 연상시키는 문구도 인상적이다.

Architects architect architecture!

우리말로 바꿔 의미 전달하긴 어려운 문장처럼 보인다. 본문은 이어서 각 단어가 나타내는 세 가지 측면에 대해 짤막하게 설명을 덧붙이고 있다.

첫 번째는 사회적 측면인데 언젠가 한번 발췌했던 그림으로 많은 부분을 표현하고 있다.

http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-social-aspect2.jpg

노련한 선배 아키텍트로부터 들었던 '사람과 사회를 이해하지 못하면 아키텍처를 이해하기 어렵다.'는 조언이 떠올랐다. 각자 처한 상황이나 관점의 차이에서 비롯한 이해 결여가 위 그림에 음영으로 그려진 부분이다. @Kirkk 에서는 이 부분을 가시화하는 일이 아키텍처에 대한 이해와 공유(understanding, visibility, and transparency)에 유익하다고 말하고 있다.

http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-technical-aspect2.jpg

두 번째는 기술적 측면인데 입자가 다른 요소 사이에서 틈을 메우는 일을 강조하고 있다. components, composition, interfaces, subsystems, and structure 등을 키워드로 들고 있다. 이론으로는 오래전에 깔끔하게 정리된 듯 보이기도 하지만, 현실은 무척 더디다.

http://techdistrict.kirkk.com/wp-content/uploads/2010/01/architecture-the-process-aspect.jpg

세 번째는 최근에 체험하고 고민하는 프로세스 측면이다.

The way we arrive at architecture is through some process or series of steps. We might create diagrams or software architecture documents. We might write a little code (proofs, spikes, prototypes) to determine the viability of architecture.

최근 아주 촉박한 일정으로 중요 모듈 개발을 맡았다. 아이러니하게 촉박한 일정 덕분에 느긋하게 다이어그램을 그리는 방식 대신 테스트 코드와 인터페이스로 Workflow를 정의(pure java)하고, 실 환경(was, dbms, shell, 상용 솔루션, ...)에서 개발/검증하고 개선하는 사이클을 반복했다. UI 설계 과정에서 업무 정의가 필요하고, 빠른 의사결정을 끌어내기 위해 UI의 배경(context) 역할을 하는 가상상황을 PPT로 그렸다. 또한, 복잡한 상태 변화는 PPT로 다이어그램을 작성하고, 각 상태에 따라 달라지는 처리나 DB 필드를 함께 볼 수 있는 표를 그렸다.

* 최근의 생각을 담은 메모이기 때문에 의도가 모호함

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
http://techdistrict.kirkk.com/wp-content/uploads/2009/10/ivory-tower-2.jpg

개발자와 아키텍트 사의 불협화음의 본질

The failure often occurs because architecture is about breadth and development is about depth.

그리고 해결책

To ensure shared understanding, we have to architect “all the way down.” Architects cannot worry only about services and developers cannot worry only about code. There is a huge middle ground that each must also focus on


아키텍처의 중요한 특성

architecture is a kind of “shared understanding"


아키텍처 수립/구현에도 기민한 접근이 필요한 이유에 대한 Temporal Aspect

Instead, the emphasis is on proving the architectural decisions that are made as soon as possible, while also embracing architectural change throughout the development lifecycle.

부가 설명

On the other hand, traditional architecture involves spending significant time early in the project defining the architecture. Once the vision has been established, teams tend to resist architectural change throughout the lifecycle. Traditional architecture is done up front, whereas agile architecture is done throughout.

Structural Aspect는

Understanding and managing dependencies between those units is critical to accommodating change. The proof is simple. Is it easier to understand the impact of change when examining a system of 10000 classes or a system of 10 modules? Obviously, the latter.

두 가지 츨면은 물론 조화를 이뤄야 한다.

Agile architecture demands both, and the absence of one precludes the presence of the other.


출처: Agile Architecture Requires Modularity, Turtles and Architecture
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
전체 구성만 훑어본 정도라 내용에 대해 말하긴 이르지만....
닷넷쪽에서 요즘 희귀한 가이드를 찍어내듯이 발표한다.
이 바닥에 일하는 자바 개발자로서 누군가는 자바 기반으로 해석/변환 해서 정리해야 하지 않을까?

Agile Architecture Method Pocket Guide
Web Application Architecture Pocket Guide
RIA Architecture Pocket Guide
Mobile Application Architecture Pocket Guide
Rich Client Application Architecture Pocket Guide
Download the Service Architecture Pocket Guide

이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
얼마전 실무자와 교수님이 동석한 자리에서 엔터프라이즈 애플리케이션 아키텍처 패턴 도입부에 다뤄진 '아키텍처' 정의에 대한 짧막한 담소가 있었다. 마틴 파울러는 "the highest-level breakdown of a system"이며, 변경하기 어려운 결정(decisions that are hard to change)이라고 정의한다. 우연히 만났던 모델링 분야 고수인 P씨 견해에 입각해서, "the highest-level breakdown of a system"을 "한 장으로 표현할 수 있는"이라고 발언했더니 교수님이 사설(邪說)로 일축했다. 실용주의를 표방하셔도 교수님이기에 이론적 틀을 중시했다.

술자리에서 P씨는 어떠한 아키텍처든[각주:1] 한 장으로 표현할 수 있어야 한다고 주장했다. 매우 설득력있고 간결한 표현이라고 생각하여 후일 인용한 것이다. 이론적으로 배격당하든 말든 여전히 내 생각(수준)은 그대로다. 스스로 기억하기 위한 용도거나 개인 사이의 소통을 위한 정의로 제한한다면, 간결하고 기억하기 쉬운 정의가 아니라면 무용지물이라고 할 수도 있다.

돌연 과거 에피소드가 기억나는 것은 점심 시간에 발견한 포스트 Improving Application Design with a Rich Domain Model: Chris Richardson 에서 인용한 서비스(Service) 혹은 서비스 레이어에 대한 정의다.

Chris defined a service as a class implementing only logic that cannot be put in a single entity.

이 것은 Domain-Driven Design: Tackling Complexity in the Heart of Software의 정의를 더욱 간결하게 요약한 것이다. 종종 간결함과 정확성은 상충 관계에 놓인다. 정의는 의사소통을 위한 것인데, 스스로 혹은 개인 간의 의사소통을 위한 용도라면  정확성에 손해를 보더라도 간결함을 놓치면 안된다.

엔터프라이즈 애플리케이션 아키텍처 패턴 - 10점
마틴 파울러 지음, 송태국 옮김/피어슨에듀케이션코리아

Domain-Driven Design: Tackling Complexity in the Heart of Software
Domain-Driven Design: Tackling Complexity in the Heart of Software
  1. 어떠한 아키텍처 뷰를 표현한 것이라도 [본문으로]
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회
재방송(원문 작성 일시:2006/08/03 (목) 15:13)

Martin Fowler의 Patterns of Enterprise Application Architecture 1페이지를 보면 아키텍처(Architecture)의 정의에 대해 이야기 하고 있다. 아키텍처에 대한 다양한 정의가 있지만, 공통적인 요소로 두 가지를 언급한다.

1. 시스템을 이루는 주요 구성요소를 추려 놓은 것
2. 변경하기 어려운 결정

변경하기 어려운 결정은 그만큼 중요하다. 만일 시스템 전반 적으로 변경이 수월해진다면 아키텍처라고 할 만한 것들이 줄어든다는 이야기가 된다. 같은 논리로, 변경이 용이하게 만들수록 단순한 아키텍처를 가질 수 있다.

올바른 이론이라도 그것을 실현하는 것은 쉽지 않다. 그렇다면, 실천을 염두하고 주의할 점들을 생각해보자.

"변경하기 어려운지를 결정하는 주체가 누구인가?"

최근에 DBA에게 데이터베이스 스키마가 넘어간 이후에는 스키마 변경이 얼마나 어려운지를 실감하게 된다. 이것은 기술적으로 어렵다는 것이 아니다. 어떤 이유에서건 DBA가 변경을 실천하게 하기가 어렵다는 것이다.

대부분의 엔터프라이즈 애플리케이션(정보 시스템) 개발에서는 COTS나 이기종 시스템과 연동하기 마련이다. 프로토콜이나 연동을 위한 API가 있다고 해도 해당 제품이나 제품을 커스터마이징해주는 업체의 개발자들에게 일방적으로 어떤 방식을 강요할 수는 없다. 그들은 본인들이 지금까지 해오던 방식을 선호하기 때문이다.

정말 변경하기 어려운 것은 사람들의 마음이다. 아무리 훌륭한 기술이 나와도 사람의 마음을 바꿀 수는 없다. 나에게 매력적인 기술이 남들을 매료시킨다는 보장은 없다. 그런 면에서 보면 아키텍처를 순전히 기술적인 것으로만 보는 시각은 실용성이 부족한 것이다.  

내가 Martin Fowler의 책을 좋아하는 이유는 두 가지 요소를 꼽은 이후에 그가 페이지를 할당한 내용들에 있다. Ralph Johnson의 견해를 빌려 정리한 내용인데, 아키텍처는 주관적이고 시스템 설계에 대한 전문가(프로젝트 이해관계자들의 대표격)들의 공유하는 이해라고 한다. 개인의 주관이 아니라 팀의 주관으로 만든 사항들이 아키텍처라고 할 수 있다.

그래서, 아키텍처가 팀원 개인의 주관적인 이해와의 괴리가 적을 때 가치가 극대화 될 수 있다. 이를 위해서 모델이나 다이어그램을 그리고, 수도 없이 회의를 하게 된다. 협력적인 태도가 좋은 아키텍처를 만들어내는데 근간이 됨을 짐작해볼 수 있다.

공식적이건 비공식적이건 회의를 할 때, 우리는 합의를 도출하고 서로의 이해를 공유하는데 초점을 맞춰야 한다. 그러나, 종종 일부는 전달에 주력하고, 일부는 그저 듣기만 한다. 목적없이 그 자리에 앉아 있는 팀원이 늘어날수록 아무리 기술적으로 훌륭한 아키텍처라고 해도 가치는 떨어진다. 그 팀원은 그 아키텍처를 공유하지 않기 때문에, 그가 만든 결과물은 아키텍처와 무관해지게 되거나 해할 수도 있다.

모델링의 경험이 늘어갈수록 더 쉬운 방법을 고안해내는데 집중하게 된다. 쉽게 만들어야 공유가 잘 되기 때문이다. 모델링은 의사소통의 도구이기 때문에 쉬운 방법을 사용하는 것은 너무나 당연한 것이다. 그런데, 시장에 통하느냐의 문제를 고민해야 한다. 아이러니하게도 시장에서는 너무 쉬운 것은 의심한다. 이는 많은 사람들이 모델링을 하지만, 이유를 모르고 있거나 잘못된 용도로 모델을 이용하고 있다는 반증이다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
Posted by 영회