저희 Eva팀이 드디어 두 번째 프로젝트인 “97 things every software architect should know (가제 – 모든 아키텍트라면 알아야 할 97가지 이야기)” 에 대한 1차 번역을 마쳤습니다.

2 달만에 번역하기 프로젝트를 시도했지만, 예상외로 아키텍트 특유의 고급적인 문체, 시와 같이 운율을 살리는 비유, 해당 도메인의 지식 부재등으로 약간의 난전을 겪었습니다.

그래서 3달 만에 1차 번역이 마치게 되었네요. 내부적으로 1차 리뷰를 마치고 출판사에 맡겼지만 아직 손봐야 할 것이 여러군 데 있는 건 사실입니다.  어느정도 책의 형태가 나오면 베타리더를 모아 더 다듬어야 겠죠.

계속 읽기

dave quick범위는 프로젝트의 크기를 언급합니다.

얼마나 많은 시간, 노력, 자원들이 필요한가?. 어떤 수준의 품질에서 어떤 기능성을 가지는지? 얼마나 많은 위험이 있는지? 어떠한 제약이 존재하는지? 이에 대한 대답들이 프로젝트의 범위를 정의합니다.

소프트웨어 아키텍트들은 크고, 복잡한 프로젝트에 도전하는 것을 사랑합니다. 잠재적인 보상은 사람들이 인위적으로 프로젝트 외관상의 중요성을 증가시키기 위해 프로젝트의 범위를 인위적으로 확장하게 유혹할 수 있습니다.

범위를 확장하는 것은 성공의 적입니다, 왜냐하면 실패할 가능성이 예상했던 것보다 더 빨리 증가하기 때문입니다.

프로젝트의 범위를 2배로 증가시키는 것은 종종 실패의 가능성을 10배로 높입니다. 왜 이렇게 실패 가능성이 높아질까요? 몇 가지 예 들을 살펴봅시다.

직감은 일을 두 배로 일을 하기 위해 우리의 시간이나 자원을 두 배로 늘리라고 말합니다.

역사[1]는 ,직관이 제안했던 것처럼,  미치는 영향이 선형적으로 증가(두배로 일하기 위해 미치는 영향이 단시 시간과 자원을 두배로늘리는 것)하지 않는다고 말합니다. 예를 들어나 네 명의 팀은 두 명의 팀이 커뮤니케이션 하는 것보다 2배 이상의  커뮤니케이션 비용이 들것입니다.

계속 읽기

둘 중 하나를 선택해야 한다면. 대부분의 사람들은 해야 될 가장 중요한 것을 선택합니다.  하지만,설계(소프트웨어 또는 다른 것들)에서는 그렇지 않습니다. 두 가지 선택사항의 존재는 당신이 설계 시 불확실성을 고려할 필요가 있다는 것은 알려주는 지표(indicator)입니다.

불확실성을 가능한 마지막 순간에 설계에 자세한 부분(defer commitment[1])을 결정할지, 설계 결정들의 중요성을 감소시키기 위해 분할하고 추상화할지 결정하는 기준으로 이용하십시오. 만약 당신의 마음을 첫 번째(가능한 나중에 결정하는 것 – defer commitment)에 고정시킨다면 이 첫 번째 원칙에 갇히고 종속될 수 있습니다. 그 결과 부수적인 결정이 굉장히 중요해 지고 소프트웨어의 유연성이 줄어듭니다..

아키텍쳐에 있어서 가장 간단하고 구조적인 정의중 하나는 Grady Booch의 말에서 인용됩니다.

“모든 아키텍쳐는 설계지만 모든 설계가 아키텍쳐는 아니다. 아키텍쳐는 시스템을 구체화하는 중요한 설계 결정들을 나타낸다.  여기서 중요한 것은 변화의 비용에 의해서 측정된다.”

이 정의에 따르면 효과적인 아키텍쳐는 일반적으로 설계 결정의 중요성을 감소시키는 것입니다.  비효율적인 아키텍쳐는 설계 결정의 중요성을 확대시킵니다. 설계 결정이 합리적으로 두 가지 방법 중 하나로 진행될 수 있다면, 아키텍트는 한 걸음 물러설 필요가 있습니다.

계속 읽기

모든 소프트웨어 아키텍트들은 모든 것을 가질 수 없다는 것을 알고 이해해야 합니다. 높은 성능, 높은 가용성, 고 수준의  보안 그리고 고 수준의 추상화 모두를 동시에 충족하는 아키텍쳐를 설계하는 것은 사실상 불가능합니다.

소프트웨어 아키텍트들이 알아야만 하고, 이해해야 하는, 그리고 고객, 동료와 함께 대화를 나누어야 하는 진실된 이야기가 있습니다.

이 이야기는 Vasa라 불리는 배 이야기입니다.  1620년대에 스웨덴과 폴란드 사이에 전쟁이 발생했습니다. 스웨덴 국왕은 비용이 많이 드는 전쟁을 빨리 끝내고 싶었고, vasa라 불리는 배를 건조[1]할 것을 명령하였습니다. 이 순간부터, 이 배는 더 이상 평범한 배가 될 수 없었습니다.

이 배가 갖춰야 했던 조건(요구사항)들은 그 당시의 어떤 배와도 비교할 수 없었습니다: 선체가 200피트 정도 더 길고, 2개의 갑판에 64개의 총을 적재할 수 있고, 300명의 군사를 안전하게 태워 폴란드로 가는 바다를 가로지를 수 있는 수송 능력을 가져야 했습니다. 배를 건조하는 데드라인(시간)을 엄수해야 했으며, 재정(자금)적으로도 여유롭지 않았습니다.

계속 읽기

Keith_braithwaite

건축가에 배워야 하는 교훈들을 여러분과 공유하고자 합니다.

“아키텍쳐는 사회적 행동과 인간 활동의 중요한 극장이다.  — Spiro Kostof”

명시적, 주도적, 기술적으로 자신의 배역(역할)을 아는 아키텍트가 얼마나 있을까요? 오히려 소프트웨어 아키텍트는 이해 당사자 (stake-holders) 사이에서, 서로 의견이 충돌이 발생하는 파벌들의 중재인, 중개인, 조정자 이지 않을까요?

소프트웨어 아키텍트의 일 중 인적 요소(human-factor)에 적절한 가중치를 부여하지[1] 않고, 순수하게 지적인 정신(소프트웨어 설계)을 요구하는 일이 얼마나 있을까요?

위대한 아키텍트는 머리가 아니라 노력과 풍요로운 마음으로 만들어진다. Frank Lloyd Wright

여러분 조직에서, 아키텍트 선발 기준은 무엇입니까? 순수한 지적인 능력, 유사한 문제를 겪어봤고, 문제를 간단하게 정리하고(정제), 기술적으로 상세부분까지 기억해 내는 방대한 지식 또는 경험, 그리고 너그러운 마음? 당신은 어떤 분위기에서 일 하는 것이 좋은 가요?

계속 읽기

Gregor_Portrait오늘날의 시스템은 분산되어 있고, 느슨하게 결합되어 있습니다. 느슨하게 결합된 시스템을 구축하는 것은 조금 귀찮은 작업입니다.,  우리는 왜 이런 귀찮은 작업을 해야 될까요? 우리는 조그만 변화로 시스템들이 산산이 부서지는 것을 원하지 않기 때문에,  우리의 시스템들이 (변화에) 유연하길 원합니다.

오늘날의 환경에서 유연함은  매우 중요한 자산입니다. 여기서 우리는 어플리케이션의 작은 부분만을 제어할 수 있습니다. 분산 서비스나 써드-파티 패키지들에서 작동하는 나머지 부분들은 다른 부분이나 외부 밴더 들에 의해 제어됩니다.

그래서, 변화에 유연하고 시간이 흐름에 따라 진화할 수 있게 시스템을 구축하는 것은 좋은 노력처럼 보입니다. 하지만, 이것은 우리의 시스템이 시간이 흘러감에 따라 변할 수 있음을 의미합니다.  “오늘날의 시스템은 더 이상 어제의 시스템이 아니다.” 라는 것처럼..

불행하게도, 변화는 문서화하는 것도 어렵게 만듭니다. 항상 변경되는 시스템에서는, 문서가 프린터 되는 순간 그 문서는 구식으로 되어 버리고, 이러한 상황들이 심해질 수 있습니다. 게다가, 일반적으로 유연하게 시스템을 구축 하는 것은 아키텍쳐가 좀더 복잡해 지는 것을 의미하며, 잘 알려진 “Big Picture (큰 그림)”[1]을 얻기 어렵습니다.

예를 들어 만약 모든 시스템의 컴포넌트들이 꼭 설정 가능한 채널을 통해 다른 구성요소들과 통신을 한다면, 컴포넌트들은 어떤 행위를 (무엇을 해야) 할지에 대한 정보를 얻기 위하여 채널 설정부만 바라보면 됩니다.

계속 읽기

DaveBartlett로마인의 세계에서, 야누스는 시작과 끝, 문과 통로의 신입니다. 야누스는 다른 방향의 바라보는 두 개의 머리로 보통 묘사되며, 영화나 동전에서 볼 수 있는 상징입니다. 야누스는 전환과 변화를 나타냅니다. 우리의 삶에서 예를 든다면 과거에서 미래로, 젊음에서 늙음, 결혼, 탄생, 시대의 도래와 같은 것이 있습니다.

소프트웨어 또는 건축물이든 어떤 아키텍트도, 앞과 뒤로, 과거에서 미래로 볼 수 있는 야누스의 능력은 꼭 필요한 능력입니다. 아키텍트는 비전과 현실, 향후 방향과 과거의 성공, 개발 제약과 사업/관리 기대치를 융합하기 위해 노력합니다.

이러한 (간극을 메우는) 다리를 만드는 것은 아키텍트의 중요한 역할입니다. 종종 아키텍트는 프로젝트를 완성하기 까지, 프로젝트에 영향을 미치는 다른 영향력들(예를 들어 접근 용이성 vs 보안, 경영의 미래 비전을 설계하면서 현재 비지니스 프로세스를 만족시키는 것)이 발생시키는 간극을 극복하기 위해 노력할 때, 희로애락을 느끼기도 합니다.

다양한 프로젝트의 이해당사자를 만족시킬 수 있는 소프트웨어(product)를 만들기 위하여,  좋은 아키텍트는 두 가지의 다른 아이디어나 생각, 다른 목표와 비전을 처리할 수 잇는 두 개의 머리를 가져야만 합니다. 아키텍트인 당신은 단순히 두 개의 얼굴이 아닌, 야누스가 가진 두 개의 머리를 주의 깊게 보아야 합니다. 훌륭한 IT 아키텍트는 뛰어난 경청 자[1] 이자 평가자 이어야 합니다.

계속 읽기

einar landre넬슨 제독이 1805년 트라팔가에서 프랑스와 스페인 함대를 격파한 이후, “분할 후 정복(Divide and Conquer)”은 복잡하고 어려운 문제를 다루는 슬로건(상징)이 되었습니다. 동일한 의미를 가지는 좀더 친숙한 용어로 “걱정 거리의 분리 (Separation of Concern)”가 있습니다.

걱정 거리의 분리로부터 우리는 캡슐화를 얻게 되고, 캡슐화로부터 우리는 경계와 인터페이스를 얻게 됩니다.

아키텍트의 관점에서, 가장 어려운 부분은 동작하는 시스템을 구축하기 위해 필요한 적당한 인터페이스를 정의하고, 경계를 정하는 자연스러운 위치를 찾는 것입니다.

이것은 거대한 엔터프라이즈 시스템에서는 특히 어려운 일입니다. 이런 상황에서, “결합도는 낮추고, 응집도는 높여라”와 “정보 교환이 자주 발생하는 영역들은 나누지 말아라”와 같은 오래된 명언이 몇 가지 지침을 제공합니다. 하지만 명언들은 어떻게 쉬운 방법으로 이해당사자들에게 가능성 있는 해결방안과 문제들을 대해 소통할 수 있는지 알려주지 않습니다.

계속 읽기

닐 스티븐슨의 소설인 크립토노미콘[1]에서, 랜디 워터하우스(Randy Waterhouse)는 자신이 만나는다양한 사람들의 유형에 빚대어 자신의 분류 시스템을 설명했습니다.

드워프[2]는 근면한 일꾼으로, 동굴속의 어두운 고독속에서 꾸준히 아름다운 산출물을 생산합니다. 드워프의 장인 정신은 정평이 나있으며, 산을 움직이고, 지구를 형성하는 엄청난 힘을 발휘 합니다.

엘프는 우아하며, 교양 있고, 하루를 새롭고 아름다운 마법을 만들면서 보냅니다. 엘프는 매우 천부적인 재능을 가지고 있어, 다른 종족이라면 실현할 수 없는 마술들을 거의 초자연적인 힘으로 생각해냅니다.

마법사는 다른 종족과 달리 거의 완벽하고 대단히 강력한 종족입니다. 하지만 엘프와는 다릅니다.마법사는 마법, 마법의 힘, 마법의 본질에 대해서 알고 있으며,  놀라운 광경과 함께  마법을 부립니다.

하지만 워터하우스가 특별히 언급하지 않은 네번째 타입의 캐릭터가 있습니다. 바로 왕입니다, 이들은 다른 종족들과 함께 무엇을 해야 할지를  아는,  몽상가(비젼을 제시하는 자)입니다.

계속 읽기

하나의 시스템은 독립적인 프로그램들로 구성됩니다.

우리는 프로그램들과 이들 프로그램들과의 관계를 정리하는 것을 아키텍쳐라고 부릅니다.

이들 시스템들의 다이어그램을 그릴 때, 종종 개개의 프로그램들과 서버들을 간략하고 조그만 사각형들로, 연결 관계들을 화살표들로 표현합니다.

“HTTP를 통신하는 SOAP-XML을 사용한 동기화/비동기 요청/응답”을 의미하는 하나의 화살표가 있습니다. 단 하나의 그림 문자가 표현하기에는 너무나 많은 정보를 가지고 있습니다. 이러한 모든 것을 표현하기에는 충분한 공간이 없습니다.

그래서 우리는 화살표 위에 내부적인 관점으로는 “XML over HTTP (HTTP 기반의 XML)”,  외부적인 관점으로는 “SKU[1] Lookup”[2] (재고 검색)라고 이름을 붙입니다.

프로그램들을 연결하는 화살표는 직접적으로 프로그램들과 통신하는 것 같아 보이지만, 사실은 그렇지 않습니다. 박스들 사이에 하얀 공백들은 하드웨어와 소프트웨어 컴포넌트들로 가득 채워져 있습니다.

계속 읽기