소프트웨어 아키텍처란 무엇인가? 아키텍팅(architecting)”에 대한 기본적인 개념에 접근하는 총 4부 시리즈 중 첫 번째 글입니다. 필자는 핵심 용어들을 정의하고 잘 설계된 아키텍처가 전개 환경에 어떤 기여를 하는지를 조명합니다. 이 세계는 점점 더 소프트웨어에 의존하고 있다. 소프트웨어는 유비쿼터스 셀폰 뿐만 아니라 복잡한 항공 제어 시스템의 필수적인 요소이다. 사실 우리가 지금 당연하다고 여기는 많은 혁신들도 소프트웨어가 없었다면 존재하지 않았을 것이다. 금융, 유통, 공공 분야 같은 전통적인 조직도 소프트웨어에 깊이 의존하고 있다. 이러한 혁신과 기업들이 살아 남기 위해서, 소프트웨어는 필요한 기능을 제공해야 하고, 품질도 갖추어야 하고, 기대하는 대로 사용할 수 있어야 하며, 합리적인 가격에 제공되어야 한다. 이 모든 특성들은 소프트웨어의 아키텍처에 영향을 받는다. 나는 이 글에서 “소프트웨어 중심 시스템(software-intensive systems)”에 대해 이야기하고자 한다. IEEE는 다음과 같이 정의한다. 소프트웨어 중심 시스템(software-intensive system)은 소프트웨어가 디자인, 구현, 전개, 시스템의 진화에 중요한 영향을 미치는 시스템을 의미한다. [IEEE 1471. "아키텍처 정의" 섹션 참조] 이 글에서 “아키텍처”라는 용어는 “소프트웨어 아키텍처”의 동의어이다. 이 글에서는 소프트웨어 중심 시스템을 중심적으로 다루겠지만, 소프트웨어 중심 시스템 역시 신뢰성이나 퍼포먼스 같은 특정 품질을 제대로 이행하기 위해서는 하드웨어가 필요하다. 나중에 보다 자세히 설명하도록 하겠다. 아키텍처 정의 “아키텍처”에 대한 정의는 부족함이 없다. 정의만을 모아서 관리하는 웹 사이트가 있을 정도니까 말이다.1 이 글에 사용되는 정의는 IEEE Std 1472000- IEEE Recommended Practice for Architectural Description of Software-Intensive Systems(IEEE 1471)2에서 발췌하였다. 핵심 내용은 볼드체로 표시했다. 아키텍처는 컴포넌트로 구체화된 시스템의 기본적인 조직이며, 환경에 대한 관계이며, 디자인과 진화를 이끄는 원리이다. [IEEE 1471] 이 표준은 이 정의와 관련하여 다음 용어를 정의하고 있다. 시스템은 특정 기능이나 기능 세트를 달성하도록 조직된 컴포넌트의 컬렉션이다. 시스템이라는 용어에는 개별 애플리케이션, 전통적인 의미의 시스템, 하위 시스템, 시스템의 시스템, 제품 라인, 제품군, 전체 엔터프라이즈, 기타 이익의 집합 등을 아우른다. 시스템은 이 환경에서 한 개 이상의 미션을 수행하기 위해 존재한다. [IEEE 1471] 환경또는 컨텍스트는 그 시스템에 대한 개발, 작동, 정책, 기타 영향들의 설정과 환경을 결정한다. [IEEE 1471] 미션은 스테이크홀더가 목표를 달성하기 위해 시스템이 수행할 사용이나 연산이다. [IEEE 1471] 스테이크홀더는 시스템에 관련된 개인, 팀, 조직이다. [IEEE 1471] 우리들도 볼 수 있듯이, “컴포넌트”라는 용어는 이러한 정의 전반에 걸쳐 사용된다. 하지만 아키텍처의 대부분의 정의는 “컴포넌트”를 정의하지는 않는다. IEEE 1471도 예외는 아니다. 따라서 산업계에서 여러 가지 의미로 사용하기 때문에 매우 모호하다. 컴포넌트는 논리적이거나 물리적이거나, 기술 독립적이거나 기술적이거나, 대단위 이거나 소단위 이거나이다. 이 글의 목적상 나는 UML 2.0 스팩에서의 컴포넌트의 정의를 사용한다. 그리고 나는 우리가 마주칠 수 있는 다양한 아키텍처 엘리먼트를 아우르기 위해 매우 느슨하게 용어를 사용하겠다. 객체, 기술 컴포넌트(이를 테면, Enterprise JavaBean), 서비스, 프로그램 모듈, 레거시 시스템, 패키지 애플리케이션 등이 포함된다. 다음은 “컴포넌트”에 대한 UML 2.0D의 정의이다. [컴포넌트는] 이것의 콘텐츠를 담고 있는 시스템의 모듈 부분이고 이것의 표현은 이것의 환경 내에서 대체 가능하다. 컴포넌트는 제공된 필수 인터페이스의 관점에서 작동을 정의한다. 컴포넌트는 유형으로서 작동하고 이것의 순응성은 필요한 인터페이스에 의해 정의된다. (정적 및 동적 의미로 정의된다.) 여기에 제공된 정의는 많은 다른 개념들을 아우른다. 이것은 이 글 후반에 논의되겠다. 산업계에는 “아키텍처”에 대해 일반적으로 동의된 정의가 없지만 다른 정의들도 고려하여 이들간 유사성을 관찰해 보는 것도 좋은 일이다. 중요한 내용은 볼드체로 표시했다. 아키텍처는 소프트웨어 시스템의 구성, 구조적 엘리먼트와 시스템을 구성할 인터페이스의 선택, 그러한 엘리먼트들간 협업에 지정된 것으로서 작동과 함께, 그러한 엘리먼트를 점진적으로 더 큰 하위 시스템으로의 구성, 이러한 조직을 이끄는 아키텍처 스타일, 이러한 엘리먼트와 인터페이스, 협업, 구성에 대한 중요한 결정 세트이다. [Kruchten]4 프로그램 또는 컴퓨팅 시스템의 소프트웨어 아키텍처는 소프트웨어 엘리먼트를 구성하는 시스템의 구조 또는 구조이자, 그러한 엘리먼트들을 외부로 보이는 속성이자 이들간 관계이다. [Bass et al] 5 [아키텍처는] 조직화된 구조이며 시스템의 제휴된 작동이다. 시스템의 제휴된 작동이다. 아키텍처는 인터페이스, 부분들과의 관계, 어셈블링의 제약조건 등으로 분할될 수 있다. 인터페이스를 통해 인터랙팅하는 부분들에는 클래스, 컴포넌트, 하위 시스템 등이 있다. [UML 1.5]6 시스템의 소프트웨어 아키텍처나 시스템의 컬렉션은 소프트웨어 구조와, 그 시스템을 구성하고 있는 구조들 간 인터랙션에 대한 중요한 디자인 결정들로 구성되어 있다. 디자인 결정은 원하는 품질을 보장해야 한다. 디자인 결정은 시스템 개발, 지원, 관리에 개념적인 기반을 제공한다. [McGovern]7 정의는 다소 다르더라도 우리는 여기에서 공통점을 발견하게 된다. 예를 들어, 모든 정의는 아키텍처는 구조와 작동에 관한 것이며, 중요한 결정들만 관여하며, 아키텍처 스타일에 순응하고, 스테이크홀더와 환경에 영향을 받으며, 이론적 근거에 입각하여 결정을 구체화 한다. 이제부터 자세히 설명하도록 하겠다. 아키텍처가 구조를 정의한다. 누군가가 당신에게 “아키텍처”에 대해 설명하라고 하면 십중팔구는 구조라고 말할 것이다. 이것은 빌딩 또는 다리 같은 도시 엔지니어링 구조와 관련이 있다. 작동, 적합성, 미학 같은 아이템의 다른 특성들도 물론 존재하지만 이것이 가장 익숙하고 자주 언급되는 구조적인 특성이다. 당신이 누군가에게 그가 작업하고 있는 소프트웨어 시스템의 아키텍처에 대해 설명하라고 요청하면 그는 시스템의 구조적 양상을 보여주는 다이어그램을 보여줄 것이다. 이 양상이 아키텍처 레이어든, 컴포넌트든, 분산 노드든 상관없이 말이다. 구조는 아키텍처의 진실로 중요한 특성이다. 아키텍처의 구조적 양상은 여러 가지 방법으로 드러나기 때문에 아키텍처에 대한 정의는 모호하다. 구조적 엘리먼트는 하위 시스템, 프로세스, 라이브러리, 데이터베이스, 전산 노드, 레거시 시스템, 제품 등이 될 수 있다. 아키텍처의 많은 정의들은 구조적 엘리먼트를 인정할 뿐만 아니라 구조적 엘리먼트의 구성, 이들의 관계, 인터페이스, 파티셔닝도 다루고 있다. 이들 각 엘리먼트들은 다양한 방식으로 제공될 수 있다. 예를 들어, 커넥터는 소켓이 될 수 있고, 동기식 또는 비동기식일 수 있으며 특정 프로토콜과 제휴될 수 있다. 그림 1은 구조적 엘리먼트의 예제이다. 이 그림은 주문 처리 시스템을 나타내는 구조적 엘리먼트들을 포함하고 있는 UML 클래스 다이어그램을 보여주고 있다. 세 개의 클래스 OrderEntry, CustomerManagement, AccountManagement가 있다. OrderEntry 클래스는 CustomerManagement 클래스와 AccountManagement 클래스에 의존하여 나타난다.
아키텍처가 작동을 정의한다. 아키텍처가 구조적 엘리먼트를 정의하는 것 외에도 구조적 엘리먼트들간 인터랙션을 정의한다. 원하는 시스템 작동을 제공하는 것이 이러한 인터랙션이다. 그림 2는 UML 시퀀스 다이어그램으로서 많은 인터랙션들을 보여주고 있다. 시스템은 주문 처리 시스템에서 주문의 생성을 지원할 수 있다. 여기에서 다섯 개의 인터랙션이 보인다. 첫 번째는 Sales Clerk 액터가 OrderEntry 클래스의 인스턴스를 사용하여 주문을 만든다. OrderEntry 인스턴스는 CustomerManagement 클래스의 인스턴스를 사용하여 고객의 상세를 얻는다. OrderEntry 인스턴스는 AccountManagement 클래스의 인스턴스를 사용하여 주문을 만들고, 주문 아이템들에 주문을 파퓰레이트 하고 주문을 한다.
그림 2는 그림 1의 연장선상에 있다. 그림 2에서 정의된 인터랙션에서 그림 1에서 보여준 종속관계를 이끌어 낼 수 있다. 예를 들어, 그림 2의 인터랙션을 보면 OrderEntry는 CustomerManagement의 인스턴스에 의존한다. 이러한 의존성은 상응하는 OrderEntry와 CustomerManagement 클래스 간 의존성 관계에 반영된다. (그림 1) 아키텍처가 중요한 엘리먼트에 집중한다. 아키텍처가 구조와 작동을 정의하지만 모든 구조와 모든 작동에 대해서 그렇게 하는 것은 아니다. 오직 중요한 엘리먼트들에만 그렇게 한다. 중요한 엘리먼트는 길고 지속적인 영향력을 갖고 있는 엘리먼트이다. 이러한 엘리먼트들은 필수 작동과 제휴되어 있고 신뢰성과 확장성 같은 중요한 품질을 다루고 있다. 일반적으로 아키텍처는 이러한 엘리먼트의 세분화된 상세를 신경 쓰지 않는다. 아키텍처 중요성은 경제적인 중요성도 띤다. 특정 엘리먼트를 다른 것보다 귀중히 여기는 이유는 생성 비용과 변경 비용이 관련되어 있기 때문이다. 아키텍처가 중요한 엘리먼트에만 집중하기 때문에 시스템 관점에서 생각해 봐야 한다. 이는 대부분 아키텍처와 관련이 있다.8 아키텍처는 아키텍트가 복잡성을 관리하는 것을 돕는 시스템의 추상화이다. 중요한 엘리먼트 세트는 정적이지 않고 시간이 지나면서 변한다. 변화하는 요구 사항, 리스크 분석, 실행 가능한 소프트웨어 구현, 레슨 등의 결과로 중요한 엘리먼트는 변하기 마련이다. 하지만 변화에 직면해서도 아키텍처가 안정적이라는 것은 좋은 아키텍처라는 신호이자, 아키텍팅 과정이 잘 실행되었다는 신호이며, 좋은 아키텍트라는 신호이다. 아키텍처가 비교적 소소한 변경 때문에 지속적으로 개정되어야 한다면 이것은 좋은 징조가 아니다. 하지만 아키텍처가 비교적 안정적이라면 정 반대이다. 아키텍처가 스테이크홀더의 필요를 조정한다. 아키텍처는 궁극적으로 스테이크홀더의 필요를 다루기 위해 만들어진다. 하지만 모든 필요를 다 맞추기는 불가능하다. 예를 들어, 스테이크홀더가 지정된 시간 안에 특정 기능을 요청하지만 이러한 두 가지 필요(기능과 타임프레임)은 상호 배타적이다. 스케줄러에 맞추기 위해 범위게 줄어들거나, 초과된 타임프레임에서 기능이 제공 될 수도 있는 것이다. 이와 비슷하게 다른 스테이크홀더들은 상충하는 필요를 표현하기 때문에 적절한 밸런스가 필요하다. 따라서 트레이드오프는 아키텍팅 프로세스와 협상의 중요한 측면이자 아키텍트가 갖추어야 할 자질이다. 스테이크홀더들의 필요에 대해 생각해 보자. ㆍ 엔드 유저는 매력적이고 정확한 작동, 퍼포먼스, 신뢰성, 가용성, 보안 등에 관심이 있다. 이 리스트를 보면 알겠지만 아키텍트의 또 다른 도전은 스테이크홀더들이 시스템이 필요한 기능을 제공하는 것에만 관심을 갖는 것은 아니라는 점이다. 위에 제시한 관심 영역들은 비기능적이다. 시스템의 기능에는 어떤 기여도 하지 않는다. (비용과 스케줄링 등). 이 같은 영역은 시스템 품질이나 제약조건을 나타낸다. 비기능적 요구 사항들은 아키텍트에 있어서 가장 중요한 요구 사항이다. 아키텍처가 이론에 입각한 결정을 구체화 한다. 아키텍처의 중요한 측면은 단순히 최종 결과인 아키텍처에 있지 않다. 이론적 근거가 필요하다. 따라서 아키텍처와 결정에 대한 이론적 근거를 문서화 하는 것이 중요하다. 이 정보는 많은 스테이크홀더와 관련이 있다. 특히 시스템을 관리해야 하는 사람들과 관련이 있다. 이 정보는 결정에 대한 이론적 근거를 알고 싶어하는 아키텍트에게도 매우 귀중한 것이다. 예를 들어, 이 정보는 아키텍처가 리뷰 될 때와 아키텍트가 결정을 판단할 때 사용된다. 아키텍처가 아키텍처 스타일에 순응한다. 대부분의 아키텍처들은 비슷한 영역들을 공유하는 시스템에서 파생된다. 이러한 유사성을 아키텍처 스타일이라고 한다. 이는 특정 유형의 패턴으로도 생각할 수 있다. 종종 복잡한 합성 패턴일 때가 많다. (많은 패턴들이 함께 적용된다.) 패턴과 마찬가지로 아키텍처 스타일은 경험의 성문화를 나타내고, 아키텍트가 그러한 경험들을 재사용 할 기회를 찾는 것은 좋은 방법이다. 아키텍처 스타일의 예제에는 분산 스타일, 파이프와 필터 스타일, 데이터 중심 스타일, 규칙 기반 스타일 등이 있다. 시스템은 한 가지 이상의 아키텍처 스타일을 보여준다. Shaw 와 Garlan은 다음과 같이 설명한다. [아키텍처 스타일]은 구조적 조직의 관점에서 시스템 군을 정의한다. 보다 구체적으로 말하면, 아키텍처 스타일은 컴포넌트와 커넥터 유형의 어휘를 정의하고 이들이 결합되는 방식에 대한 제약 조건들을 정의한다. 그리고 UML의 관점에서는 [패턴은] 주어진 상황에서 일어나는 일반적인 상황에 대한 일반적인 솔루션이다. 경험을 재사용 하는 것 외에도 아키텍처 스타일(또는 패턴)의 적용은 아키텍트의 삶을 더 풍요롭게 만든다. 스타일은 이론적 근거라는 관점에서, 그리고 작동의 관점에서 문서화되기 때문이다. (생각을 좀 덜해도 되고 스타일을 참조하기 때문에 아키텍처 문서들이 줄어든다.) 아키텍처가 아키텍처 스타일에 순응한다. 시스템은 환경 안에 거하고, 이 환경은 아키텍처에 영향을 미친다. 이것을 “정황 속의 아키텍처”라고 한다. 환경은 시스템이 운영되고 아키텍처에 영향을 미치는 바운더리를 결정한다. 아키텍처에 영향을 미치는 환경적 요인들에는 아키텍처가 지원할 비즈니스 미션, 시스템 스테이크홀더, 내부적인 기술 제약조건들(조직의 표준에 순응하는 제약조건 등), 외부적인 제약조건(외부 시스템에 대한 인터페이스의 필요라든가, 외부적인 규제 표준에 순응할 것 등) 등이 포함된다. 반대로, Bass, Clements, Kazman11이 설명한 것처럼 아키텍처도 환경에 영향을 미친다. 기술적인 관점에서 아키텍처의 생성이 환경을 변화시킬 뿐만 아니라, 아키텍처의 생성이 기능적인 관점에서 환경을 변경시킨다. 소프트웨어 중심 시스템의 경우 언제나 고려해야 하는 환경의 특정 측면이 있다. 유용한 소프트웨어가 되려면 실행될 수 있어야 한다. 실행될 수 있으려면 소프트웨어는 하드웨어에서 실행되어야 한다. 따라서 결과 시스템은 소프트웨어와 하드웨어의 결합이고, 신뢰성과 퍼포먼스 같은 속성들이 갖추어져야 한다. 소프트웨어는 하드웨어와 별개로 이를 달성할 수 없다. IEEE Std 12207-1995, IEEE Standard for Information Technology -- Software Life Cycle Processes는 IEEE 1471 시스템 정의와는 다르게 시스템을 정의한다. (이것은 소프트웨어 중심 시스템에 초점이 맞춰져 있다.) 하지만 시스템 엔지니어링 분야에 대한 정의는 동의하고 있다. [시스템은] 필요나 목적을 달성할 수 있는 기능을 제공하는 한 개 이상의 프로세스, 하드웨어, 소프트웨어, 장치, 사람들로 구성된 통합 구성체이다. [IEEE 12207] Rational Unified Process for Systems Engineering (RUP SE)의 설정에도 비슷한 정의가 있다. [시스템은] 기업이 비즈니스 목적이나 미션을 수행하기 위해 사용하는 서비스를 제공하는 일종의 리소스이다. 시스템 컴포넌트에는 하드웨어, 소프트웨어, 데이터, 작업자 등이 포함된다. 시스템 엔지니어링 분야에서, 소프트웨어, 하드웨어, 사람들간 상쇄 현상이 일어난다. 예를 들어, 퍼포먼스가 중요하다면, 소프트웨어나 사람이 아닌 하드웨어에 특정 시스템 엘리먼트를 구현하는 결정을 내리게 된다. 고객에게 유용한 시스템을 제공하려면 소프트웨어나 하드웨어에서 구현된 인터페이스 보다는 인간이라는 인터페이스를 제공하게 된다. 좀더 복잡한 시나리오의 경우는 소프트웨어, 하드웨어, 사람들이 결합을 해야 한다. (따라서 본 시리즈에서는 소프트웨어 외의 다른 엘리먼트도 참조할 것이다.) 시스템 엔지니어링이 소프트웨어와 하드웨어를(사람들도 포함) 피어로서 취급하고, 따라서 하드웨어가 소프트웨어 대한 제 2의 클래스로서 취급 받거나 소프트웨어를 실행하는 단순한 기구로서 취급 받게 되는 상황을 방지한다. 또는 소프트웨어가 하드웨어에 대한 제 2의 클래스이고 하드웨어를 위한 단순한 도구로 취급 받지 않도록 한다. 아키텍처가 팀 구조에 영향을 미친다. 아키텍처는 주어진 영역을 다루는 관련 엘리먼트들의 그룹핑을 정의한다. 예를 들어, 주문 처리 시스템을 위한 아키텍처는 주문 시작, 계정 관리. 고객 관리, 업무 수행, 외부 시스템과의 통합, 영속성, 보안에 대한 엘리먼트들을 그룹핑 한다. 이들 각각의 그룹핑은 다른 기능 세트를 필요로 한다. 따라서 소프트웨어 개발팀 구조가 정의되었다면 아키텍처로 정렬하는 것 맞다. 하지만 아키텍처는 초기 팀 구조에 의해 영향을 받는 경우가 종종 있다. 이것은 매우 위험한 일이다. 이상적인 아키텍처 상이 아니다. Conway의 법칙에서는 “컴파일러 상에 실행되는 네 개의 그룹이 있다면 4-pass 컴파일러를 갖게 된다.”라고 명시하고 있다. 실제로 우리는 의도하지 않았는데도 아키텍처를 만들어서 기업에 반영하는 아키텍처들을 만든다. 하지만 이렇게 다소 이상적인 뷰가 늘 실질적은 것은 아니다. 순전히 실제적인 이유로 인해 현재 팀 구조와 기능은 무엇이 가능한 지에 대한 매우 실질적인 제약조건을 나타내고 아키텍처는 이를 고려해야 한다. 아키텍처가 모든 시스템에 존재한다. 모든 시스템은 아키텍처를 갖고 있다. 아키텍처가 공식적으로 문서화 되지 않았더라도, 시스템이 하나의 엘리먼트로 구성된 아주 단순한 시스템이라도 말이다. 아키텍처에 대한 문서는 상당한 가치가 있다. 문서화된 아키텍처는 그렇지 않은 것 보다 조심스럽고 효과적으로 다루어져야 한다. 아키텍처의 기록 과정에서 통찰력이 생기기 때문이다. 반대로, 아키텍처가 문서화 되지 않으면 품질, 관리 가능성, 베스트 프랙티스의 채택 등을 입증할 방법이 없다. 오늘날 대부분, 아키텍처는 문서화 되지 않았으며 이는 의도적이기 보다는 일종의 사고다. 아키텍처가 특정 범위를 갖고 있다. 많은 종류의 아키텍처가 있다. 빌딩이나 도시 엔지니어링 건축물들도 아키텍처로 잘 알려져 있다. 소프트웨어 엔지니어링 분야에서도 우리는 다양한 형태의 아키텍처를 만나게 된다. 예를 들어, 소프트웨어 아키텍처의 개념 외에도, 엔터프라이즈 아키텍처, 시스템 아키텍처, 조직적 아키텍처, 정보 아키텍처, 하드웨어 아키텍처, 애플리케이션 아키텍처, 인프라 아키텍처등의 개념들을 보게 된다. 또한 특정 범위의 아키텍팅 행위를 정의하는 용어도 있다. 안타깝게도 산업계에는 이러한 용어나 서로간의 관계에 대한 어떤 동의도 없다. 따라서 같은 용어가 다른 의미를 갖게 되고 한 가지를 의미하는데 두 개 이상의 용어들이 생겨난다. 하지만 이러한 용어들의 범위는 그림 3처럼 한정된다. 이 그림과 그 뒤에 나오는 논의를 생각해 보면 여러분이 동의할 수 없는, 기업에서 다르게 사용했던 엘리먼트들이 많음을 알 수 있다. 그렇다. 이러한 용어들이 산업계에 존재하지만 의미에 대한 동의가 없다.
그림 3 의 엘리먼트: ㆍ 소프트웨어 아키텍처. 이것은 이 글의 핵심 주제이다. 물론 이에 상응하는 아키텍트(소프트웨어 아키텍트, 하드웨어 아키텍트)와 아키텍팅(소프트웨어 아키텍팅, 하드웨어 아키텍팅)이 있다. 지금까지 정의를 통해 고찰했다. 많은 의문점이 남아있을 것이다. 엔터프라이즈 아키텍처와 시스템 아키텍처의 차이는 무엇인가? 엔터프라이즈가 시스템인가? 데이터 중심 소프트웨어 애플리케이션에서 정보 아키텍처가 데이터 아키텍처와 같은 것인가? 불행히도 이러한 질문에 대한 정확하고 동의를 이룬 답은 없다. 현재까지는 다양한 용어들이 존재하지만, 이러한 용어들에 대한 일관된 정의와 관계 방식에는 동의 된 바가 없다. 따라서 여러분의 기업과 관련된 용어들을 선택하여 적절히 정의할 것을 권한다. 그렇다면 적어도 일관성은 이룰 것이고 오해로 빚어진 의사소통 문제도 줄어들 것이다. 요약 소프트웨어 아키텍처의 중심적인 특성을 정의하는 것에 대해 집중 조명해보았다. 하지만 아직도 많은 의문점들이 남아있다. 소프트웨어 아키텍트의 역할은 무엇인가? 아키텍트가 주로 하는 일은 무엇인가? “아키텍팅”의 효용성은 무엇인가? 이러한 질문에 대한 해답은 후속 시리즈에서 지속적으로 다루도록 하겠다. Notes 출처명 : 한국IBM |
'2008/04'에 해당되는 글 13건
- 2008/04/22 소프트웨어 아키텍처란 무엇인가? Peter Eeles|IBM
- 2008/04/19 Autoit Tutorial
- 2008/04/19 KiXtart VBScript Batch AutoIt HTA PowerShell Windows Command Lines 스크립트 Function Reference
- 2008/04/16 파워포인트 템플릿 제작 팁
- 2008/04/14 정규표현식 Regular Expression 자동생성기/ 테스팅 툴
- 2008/04/09 정규표현식(정규식) Regular Expresiion
- 2008/04/09 Meshup 도구 웹페이지를 내담대로 트랙킹하자.
- 2008/04/02 TKINTER PYTHON GUI 사용법 강좌
- 2008/04/02 Python GUI 장단점 및 소개
- 2008/04/02 win32com 을 이용한 파이썬 프로그램 py2exe로 실행파일 만들기
datatype
http://www.autoitscript.com/autoit3/docs/intro/lang_datatypes.htm
function reference
http://www.adminscripteditor.com/syntax.asp?act=v&id=691
example
http://blog.naver.com/hursh1225?Redirect=Log&logNo=70005699013
설치자동화
http://cafe.naver.com/unattend.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=2143
유틸리티 포함설치
http://www.autoitscript.com/cgi-bin/getfile.pl?../autoit3/scite/download/SciTE4AutoIt3.exe
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/104
KiXtart VBScript Batch AutoIt HTA PowerShell Windows Command Lines 스크립트 Function Reference
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/103
먼저 우리가 익히 들어서 잘 알고있는 여러 글로벌 기업들의 슬라이드 몇 가지를 살펴보고 나서 어떤 형태가 우리현실에 알맞을지 가늠해 본다음 우리만의 슬라이드 레이아웃을 구성해보기로 하겠다.
이름난 회사의 PPT 레이아웃 순례
파워포인트를 사용해온 필자의 지난 십수년을 돌아보면 참으로 재미있는 사실이 있다. 문서의 모양새가 점차 단순해지고 있다는 것이다. 컬러의 수는 줄어들고 있고 도형도 점차 단순해지고 있지만 그것이 점점 보기 좋아지는 이유는 무엇일까
[그림1] Microsoft 2005 CIO Summit : 표지와 본문
위에 보이는 두장의 슬라이드는 마이크로소프트(이하 MS)가 2005 CIO Summit 행사를 위해 디자인한 파워포인트 문서인데 4-5년전까지도 이같이 만들기 위해 대부분의 시간을 포토샵과 일러스트레이터에 투자했던 것 같다.
본문의 글자와 도형 하나하나는 전문적인 그래픽 디자이너가 일일히 외부에서 그려서 불러온 것들인데 슬라이드 한장한장이 고정적인 Layout에 구애 받지 않고 캔버스위에 그려놓은 ‘작품’수준의 문서이다.
위의 슬라이드들을 비판할 생각은 없다. 다만 우리 현실에 맞지 않을 뿐이다. 이것은 연재의 첫시간에 충분한 시간을 들여서 밝힌바 있다.
[그림 2] 컨설팅사인 Accenture의 정형화된 표지와 본문
[그림 1]의 MS사에 비교해 본다면 Accenture사의 슬라이드는 정말 볼품없는 디자인과 레이아웃을 지니고있다. 그러나 이 회사가 세계적으로도 가장 영향력있는 컨설팅회사 중 하나라는 것과 그들의 저런 볼품없는 보고서들이 언제나 공신력있게 인용되는 현실을 감안한다면 저런 레이아웃이 MS에 비해 덜 효과적이라고 말할 수는 없을 듯 하다.
[그림 3] Bain & Company의 레이아웃
[그림 3]은 역시 널리 알려진 컨설팅사인 Bain & Company의 슬라이드 레이아웃인데 어쩐지 Accenture것과 별반 다르지 않다. MS의 본문 슬라이드 구성은 매 페이지마다 현란하게 바뀌는데 반해 이들 두회사의 본문은 저렇듯 일정한 틀을 지속적으로 유지하고 있다.
[그림 4] Boston Consulting Group의 레이아웃
맙소사! Boston Consulting Group의 슬라이드를 보라. 이들 역시도 위의 다른 두개회사와 기본패턴이 같으며 우리들과 마찬가지로 파워포인트를 거의 워드프로세서로 사용하는 사람들중 하나이다.
[그림 5] IBM사 : 그나마 가장 화려하다
그나마 IBM사는 다른 회사들에 비해 가장 화려한 편이다. 그도 그럴것이 이들은 컨설팅업무도 수행하지만 제품을 만들어 파는 회사이기도 하기 때문에 맨위에서 본 MS사의 그것과 일반적인 컨설팅사의 레이아웃이 약간 섞여있다.
[그림 6] McKinsey사의 슬라이드 : 역시 예외없다
마지막으로 매킨지사의 슬라이드를 보자. 가장 단순하며 색상의 사용조차 조심스러워 보인다. 그들이 디자인을 위해서 사용한 그림은 리더십(Leadership)이라는 주제를 강조하기 위한 기러기 그림뿐이다.
지금까지 우리는 여섯개 회사의 슬라이드 레이아웃을 보았고 직감적으로 필자가 어떤 얘기를 꺼내려는지 눈치를 채고있으리라 생각한다. 정리해 보면 다음과 같다.
- 디자인이나 색상이 내용을 가릴수 있으므로 심플하게 작성한다
- 슬라이드 내용을 요약하는 헤드라인 메시지가 상단에 위치한다
- 널리 알려진 익숙한 레이아웃을 사용한다
- 프린트를 위해 표지를 제외한 슬라이드 바탕은 항상 백색이다
MS나 CISCO, HP, Intel 등과 같이 고객들에게 제품을 홍보하고 교육하는 목적의 문서가 아니라면 위의 예에서 MS를 제외한 나머지 다섯개 회사의 레이아웃 패턴을 위에 정리된 내용대로 따르는 것이 가장 적절해 보인다. 우리도 이제 우리가 사용할 슬라이드의 레이아웃을 만들 차례가 되었다.
익숙해진 패턴으로 간단하게…
보고서를 작성할때마다 새로운 슬라이드 마스터를 만드는 것은 낭비이며 바로 위에서 제시한 익숙해진 형태를 제공한다는 법칙에 위배된다. 필자 역시 고정적으로 즐겨사용하는 PPT 템플릿이 존재하지만 이번 연재를 위해 비슷하게 다시 만들어 보았는데 [그림 7]의 4장이며 30분 정도를 투자하면 만들 수 있다.
더이상 아름다운 PPT 템플릿을 찾아내기 위해 시간을 쏟지 말고 고정적인 템플릿을 이 기회에 하나쯤 마련해 두는 것이 어떨까라는 제안을 하고 싶다. 그리고 인터넷을 뒤져 찾아낸 멋진 템플릿의 최종 결과물이 맨위에 제시한 MS정도의 품질을 유지하지 못한다면 오히려 부자연스럽게 보일 수도 있다는 것을 명심하자.
[그림 7] 4장의 템플릿 : 왼쪽부터 표지,목차,본문,참조문서 슬라이드
1) 표지 슬라이드
표지슬라이드는 표지라는 인식만 심어줄 수 있으면 그것으로 족하다. 제목과 부제(사실 이것도 옵션사항이다)만 명확하게 드러내면 된다. 보고서를 작성할 때 마다 디자인적으로 변화를 줄 수 있는 요소는 주제를 암시하는 클립아트뿐이다.
[그림 8] 표지슬라이드 : 매킨지나 IBM을 벤치마킹했다
이밖에는 각 회사의 규정이나 관습대로 알아서 하면 된다. 날짜와 소속팀, 작성자를 써넣을 수 있고, 회사로고와 문서 버전 등이 추가로 삽입될 수 있으며, 문서의 보안성을 판별하는 식별자가 삽입되어도 무방하다. 어떤 회사는 종종 오른쪽 상단에 결재인이나 문서회람 목록표를 붙이기도 한다.
2) 목차 슬라이드
주로 목차를 작성할 때 사용되는 슬라이드이지만 분량이 적고 내용이 복잡하지 않다면 생략할 수도 있다.
[그림 9] 목차슬라이드의 작성 예
전체 문서의 내용이 방대하다면 중간에 간지 형태의 목차가 아래의 예와 같이 삽입될 수 있고, 이는 중간의 이정표 역할을 하기도 한다. 목차,간지뿐만 아니라 Executive Summary(문서전체를 한두장 정도로 요약해주는)의 템플릿으로서도 이용될 수 있다.
[그림 10] 목차슬라이드의 응용 : 간지
3) 본문 슬라이드
위에서 소개한 5개 컨설팅회사들의 슬라이드 레이아웃과 기본적으로 다르지 않다.
[그림 11] 본문 슬라이드의 형식
1.단락의 제목은 목차의 중분류정도의 타이틀이 적당하며 하나의 슬라이드내에 목차의 대-중-소분류까지 모두 표시하려고 애쓰지 않는 것이 좋다. 이는 보는이로 하여금 혼란만 가중시킬 뿐이다
2. 헤드라인은 해당 슬라이드의 내용을 함축적인 키워드로 요약하는 부분으로 대략 한두줄로 정리하는 것이 좋다. 보고서를 읽는 사람이 시간이 없을 경우에는 헤드라인만을 읽고 넘어가도 작성자의 의도를 이해할 수 있어야 하므로 가장 시간을 많이 투자해도 먹고 항상 고민스러운 부분이기도 하다.
필자의 경우에는 헤드라인을 작성하는 원칙을 가지고 있는데 모든 슬라이드의 헤드라인을 추출하여 순서대로 늘어놓으면 앞뒤의 논리가 맞아떨어지는 한두장짜리 에세이가 되도록 한다는 것이다. (불행히도 이 역시 매우 어렵다. 이에 대해서는 다음 연재에서 다룰 계획이다)
3. 본문에 대한 얘기는 거의 책한권으로 설명해야 할만큼 많지만 오늘은 레이아웃에 대해 다루고 있기 때문에 그에 대한 두가지 원칙만 기억하자.
첫번째는 구조화(혹은 추상화)이다. 어쨌든 본문의 내용을 [그림 12]에서 보여지는 예와 같이 덩어리로 나누어줄 필요가 있다. 이것은 각자의 상상력과 개인기를 요구한다. 매킨지등 유명 컨설팅사들은 이렇게 추상화된 본문의 레이아웃들을 수백장씩이나 가지고 있다. 그러한 것들을 구해서 참조하는 것도 많은 도움이 된다.
[그림 12] 본문의 추상화 과정
만약 보고서를 보는 사람이 Type 3과 같은 레이아웃을 접했을 경우엔 뭔지는 몰라도 ‘대략 세가지구나’하는 것을 순간적으로 느끼게 된다. 사실 위의 레이아웃 중 가장 최악은 Type 4처럼 내용을 구조화 시키지 않고 주욱 늘어놓는 경우이다.
두번째 원칙은 내용의 밀도에 대한 것이다. [그림 13]의 본문은 [그림 11]과 비교하여 글자수가 현저하게 적다. 실제로 아래 슬라이드는 임원급 이상을 대상으로 한 것이었다. 내용의 밀도에 대해서는 스스로 원칙을 가지고 있는 것이 좋다. 예를들어 필자의 경우에는 임원급 이상에게 제출하는 보고서는 거의 14포인트 이상의 글자크기를 유지한다는 윈칙을 가지고 있다.
[그림 13] 내용의 밀도가 낮은 본문 : 임원급이상을 타겟
4) 참조문서 슬라이드
가끔 헤드라인이 필요치 않은 슬라이드를 작성할 때가 있는데 본문의 내용을 불가피하게 확장해야 할 필요가 있거나 단순히 참조하라는 의미의 첨부 슬라이드를 삽일할 때 그렇다. 아래의 예와 같이 시스템 도면을 참조로 보여줘야 할 때 말이다.
[그림 14] 참조문서 슬라이드
기타 비주얼을 위한 몇가지 원칙
1) Font
가장 큰 원칙은 사용하는 적은 수의 폰트만을 사용하는 것이다. 배포의 문제도 덜 수 있고 문서의 크기도 줄여주며 난잡해 보이는 것을 막아준다. 필자는 아래의 다섯종류를 주로 사용하지만 나머지 3개 폰트는 도표를 꾸미는데 사용하거나 하기 때문에 사실상 단 하나의 폰트만 사용한 것 같은 효과가 난다.
임원이상급을 주 타겟으로 하는 밀도가 낮은 레포트를 쓸때 나는 예외없이 산돌고딕B,M만으로 보고서 전체를 작성한다. 이 산돌고딕체는 14Point 이상일때 프로젝터와 화면, 프린트물 모두에서 최상의 가독성을 만들어 준다.
위에서 소개된 슬라이드 마스터의 헤드라인은 산돌고딕M 16Point이고, 본문내용은 14Point이다. 단락제목은 산돌고딕B 18Point, 본문의 키워드급은 14-16Point를 활용한다.
[그림 14]의 도형에서 그림을 설명하는 작은 글자는 한글일때 9~10Point의 굴림체와 영문일때 역시 같은 크기의 Tahoma이다. 영문이나 숫자로 된 Tahoma는 9 point 정도의 크기라도 프로젝터를 통해 보았을 때 가독성이 매우 우수하기 때문에 애용하는 편이다. 예외적으로 영문으로 강조해야 하는 경우는 Trebuchet MS를 사용하는데 이 또한 Tahoma와 마찬가지로 가독성이 우수하고 Tahoma사이에서 도드라지기 때문에 효과적이다.
그림을 설명하는것 이외에는 주로 각주를 달거나 단위등을 표시할때 조금씩 사용한다. 그러나 밀도가 높은 보고서를 작성할 때는 굴림체가 주력폰트로 부상하기도 한다.
2) 도형
도형을 사용할때는 간단한 모습이 가장 좋다. 아래 도형을 볼때 '예쁜것'으로 따지면 왼쪽의 도형이 나아 보이지만 사실 쓸데없는 치장일 뿐 내용과는 관계가 없다.
의미없이 복잡한 것 보다는 간단하게
끝이 뾰족한 네모보다는 라운드형의 네모와 그림자가 내용을 부드럽게 만들어 주는 효과가 있다. 슬라이드 전체의 모습이 정말 부드러워진다. (Tip : 나는 민감한 사안을 레포트로 다룰때 모든 도형을 라운드 처리한다)
내용을 부드럽게 해주는 라운드처리
3) 컬러
폰트와 마찬가지로 컬러는 단 몇가지만 사용하는 것이 바람직하다. 색을 배합하는 전문가가 아니라면 정말 우스꽝스럽게 보고서가 나오기 십상이기 때문이다. 아래는 똑같은 세가지 색상이지만 오른쪽의 그레이계열의 색상 3가지는 슬라이드상에서 마치 하나의 색상처럼 보인다.
같은 계열의 색 농도만 조절하는 것으로도 충분
프리젠테이션을 진행할 때 굳이 설명하지 않아도 특정 도형이나 글에 주목을 끌도록 하는 방법은 색상을 달리하는 것이다. 이때는 정말 확연하게 차이가 나는 다른 계열의 색상으로 포인트를 줘야한다.
포인트를 주는 컬러는 확실히 튀도록
(Tip : 컬러는 누구에게나 어려운 문제다. 처음에는 그레이 계통의 색상만 이용해도 충분히 멋있어 보인다. 상급자라 할지라도 말이다)
4) 클립아트
아래 4개의 클립아트는 모두 제각각의 컬러와 모양을 가지고 있지만 유심히 보면 왼쪽의 그림 두개는 전혀 다른 색상이라도 같은방향으로 놓여있고 음영처리등에 있어 유사성을 보이는 같은 사람이 그린 클립아트이다. 이런 그림들은 슬라이드 내에서도 어울릴 수 있다.
비슷한 느낌의 클립아트로 매칭
클립아트 또한 되도록 적게 사용하는 것이 좋다. 그림은 사람을 집중하게 만들기 때문에 정말 적절한 클립아트가 아니라면 오해를 사기 쉽다.
마치며...
지난 두번의 연재에서 문서작성의 내공에 대해서 다루었다면 오늘은 처음으로 외공에 대해 알아보았다. 간단하고 모두에게 익숙한 레이아웃의 작성과 비주얼에 대한 원칙 단 몇개에 대해서만 얘기를 했는데 사실 외적인 모양에 대한 것은 이것으로도 충분하다고 보여진다.
다음 시간에는 이 레이아웃과 지난번에 작성한 시나리오를 이용해 문서의 초안을 만들어 볼까 한다. 필자는 이를 초벌구이를 한다고 표현하는데 도자기를 굽듯이 초벌-재벌 구이를 계속하면서 문서 전체를 완성해 나가는 방법이다.@ [다음회에 계속]
☞ 내용에 대한 추가적인 문의사항이나 정보를 바라는 분들은 필자의 블로그(Sonar & Radar : http://www.demitrio.com:8088)나 e-mail(demitrio@demitrio.com)을 이용해주기 바란다.
[저자] 김용석 CJ시스템즈 정보기술연구소소장
[안철수연구소 2007-11-09]
출처 http://blog.naver.com/wooseokint1/110024828762
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/102
online Regular Expression tester
http://gskinner.com/RegExr/
= 각각 정규표현식의 설명과 간단한 조합들은 가지고 있어서 굉장히 유용하다. 굿!
정규표현식 Regular Expression 자동생성기
http://www.txt2re.com/
= 각각 정규표현식 간단하게 생성해주십니다.
Regular Expression
http://regexlib.com/
Regular Expression Example
http://www.regular-expressions.info/examples.html
http://en.wikipedia.org/wiki/Regular_expression_examples
정규표현식 간단히 정리
http://kukuta.tistory.com/4
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/101
정규식
http://docs.python.org/lib/module-re.html
http://lunarboy.egloos.com/843582
http://ko.wikipedia.org/wiki/%EC%A0%95%EA%B7%9C%EC%8B%9D
http://www.scgyong.net/study/re/RegularExpression_050404.ppt
http://del.icio.us/mwultong/regex
파이썬 정규식 및 활용법
http://serious-code.net/moin.cgi/PythonRegularExpression
정규식 확인 프로그램
http://kodos.sourceforge.net/
예제
http://toyobi.net/web?page=2
http://python.kr/viewtopic.php?p=54924&sid=324fe5fd2db59d113066d23153d9b652
http://python.kr/viewtopic.php?p=58126&sid=639fadcdeaa183986b7290a99d9ace24
http://dududu.tistory.com/tag/Regular%20Expression
http://madchick.egloos.com/1166994
게시판 목록 읽어 오기
http://python.kr/viewtopic.php?p=57519&sid=1cb07228476d68c8a5a40bcf47f5d234
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/99
Meshup 도구
Meshup 도구 설명 블로그
Webpage2RSS
http://page2rss.com/
Feedtwitter -- 각종 Feed와 관련된 정보를 많이 가지고 있음.
http://feedtwitter.blogspot.com/2007/10/feedity-create-rss-for-any-web-page.html
개발로그
http://taemy.experlab.com/311
RSS XML Filter
http://www.filtermyrss.com/
RSS Mixer
http://www.rssmixer.com/
Feedity
http://www.feedity.com/
Meshup
MS Popfly
http://www.popfly.com/
Facebook Developer Tool
http://developers.facebook.com/
Compose Your information Xfruits - RSS to PDF, RSS to OPML, RSS Agregator ,RSS to Mybolg Etc..
http://feedtwitter.blogspot.com/search/label/Aggregator%20RSS
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/97
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/95
http://www.awaretek.com/toolkits.html
트랙백 보낼 주소 :: http://uzys.tistory.com/trackback/94
주제 : win32com 을 이용한 파이썬 프로그램 py2exe로 실행파일 만들기
입니다 -ㅇ-
[/수정]
win32com 에 있는 것들을 사용해서 프로그램을 만들고 나면..
자신의 컴퓨터에서는(파이썬이 깔린) 잘 돌아갑니다만
py2exe로 패키징하여 다른 컴퓨터에서 돌리면 에러가 납니다
간단한 팁입니다만 구글같은데 아무리 서치해봐도 안나오길래 팁으로 올립니다.
퍼키님 도움을 좀 받았습니다
그냥
--packages win32com
요 옵션만 넣어주면 되더군요
python setup.py py2exe --packages win32com
요런 식입니다.
혹은 setup.py 안에
| 코드: |
import sys sys.argv.extend(['--packages', 'win32com']) |
요렇게 해주셔도 됩니다
[출처] win32com 을 이용한 파이썬 프로그램 py2exe로 실행파일 만들기 |작성자 홍지영







이올린에 북마크하기