디자인 패턴과 아키텍처 스타일의 차이를 설명하시오. ================================================================ '디자인 패턴'의 정의와 특징, '아키텍처 스타일'의 정의와 특징을 각각 정리해야 할 것 같다. 초반에 공부 제대로 하는 것 같다. 휴우~^^
문제는 이러한 것들의 "소스"를 어떠한 것으로 하는지가 관건이 될 것 같다. ================================================================
소프트웨어 아키텍처(Software Architecture)를 정의하시오. 세가지 주요 요소를 중심으로 기술하시오. ========================================================================= 나의 첫 기술사 기출문제 정리의 시작을 이것으로 한 것은 의미가 큰 것 같다. SA에 대한 정의를 찾아보면서, 조금은 황당했다. 이유는?! 정의가 없다! 아니, 없는 것이 아니라, 붙이기 나름이다!! 결론은?! 정답이 없다!
SA분야에서 가장 많은 저서를 내고 있고, 관련 교육을 주도하고 있는 곳은 카네기멜론 대학교라고 한다. 그중에서도 SEI(Software Engineering Institude).
제9회 JOLT상 수상작 실무 사례를 통해 익히는 소프트웨어 아키텍처 지침서. 이 책은 소프트웨어 아키텍처의 개념 설명에서부터 저자들의 실무 경험을 통한 소프트웨어 시스템의 설계, 명세, 확인 작업의 핵심 기술들을 소개한다. 또한 실무에서의 아키텍처 사례 연구를 통해 소프트웨어 시스템을 설계하는 방법과 시스템 구성요소들의 상호작용과 역할, 실제 환경에서 구현할 수 있는 법에 이르기까지의 내용을 제시한다. &l
'소프트웨어 아키텍처'에 대해서 알아보다가 다들 필독서로 일컫는 책을 발견하게 되었다. 그러다가 알게 된 사실... "저 책을 가지고 있었다. 단지, 읽어보지 않고 있었을 뿐이었다" ㅜㅜ
'렌 베스, 폴 클레멘츠, 릭 캐즈먼' 3명의 저자 모두 SEI에서 기술분야 수석연구원으로 있고, 옮긴이들 7명 모두 CMU에서 SE관련 석사과정(MSE/MSIT-SE)을 마쳤다.
이하 내용은 위 책을 기반으로 하여 나름대로 정리한 내용이다. 정리라고는 하지만, 거의 책 내용 그대로이다. ^^ =========================================================================
최근에 소프트웨어 아키텍처 분야는 급격히 발전하고 있으나 아직은 미흡한 상태인지라 단일화된 정의가 아직 나오지 않고 있다. 그러나 소프트웨어 아키텍처의 정의가 아예 없는 것은 아니다. 다양한 소프트웨어 아키텍처 정의의 공통점은 구조와 아키텍처 요소, 그리고 그 요소들 간의 연결관계이다. 하지만 이들에 대한 세부 내용으로 들어가면 너무 다양해져서 공통점을 찾기 어렵다.
소프트웨어 아키텍처에 대한 연구는 설계자들이 따르는 설계 원칙과 설계자들이 실제 시스템에서 작업할 때 수행하는 활동을 관찰하는 데서 발전해왔다. 따라서 소프트웨어 아키텍처에 대한 연구는 시스템 설계에 고유하게 있는 공통성들을 추상화시켜 다양한 행동과 개념, 패턴, 접근 방법, 결과 등을 밝히는 데에 주력했다. 이런 이유로 소프트웨어 공학 커뮤니티마다 소프트웨어 아키텍처에 대한 다른 정의를 내리고 있다.
여기에서는 소프트웨어 아키텍처와 관련한 많은 저작물과 교육활동을 하고 있는 카네기멜론대학(CMU)의 SEI(Software Engineering Institude)에서 내리고 있는 정의를 기반으로 설명을 하겠다.
소프트웨어 아키텍처란, "프로그램이나 컴퓨팅 시스템의 소프트웨어 아키텍처는 소프트웨어 구성요소와 그들이 지니고 있는 특성 중에 외부에 드러나는 특성, 그리고 구성요소들의 관계를 표현하는 시스템의 구조나 구조체를 말한다."
'외부에 드러나는' 특성이란 하나의 요소에 대해 다른 요소가 품게 되는 가정을 말한다. 예를 들어 그 요소가 제공하는 서비스와 성능 특성, 에러 관리, 공유되는 리소스 사용 등을 말한다. 위의 정의를 좀더 자세히 살펴보자.
첫째, 아케텍처는 소프트웨어 요소를 정의한다. 아키텍처는 요소들 간의 관계 정보를 담고 있다. 이 말은 특정 목적과 관계없는 요소들 간의 관계 정보를 명확하게 한정해서 생략할 수 있다는 의미이다. 이것이 아키텍처에서 가장 중요한 개념인 추상화이다. 다시 말해 아키텍처는 특정 목적과 관련이 없는 요소의 자세한 정보를 생략할 수 있다. 최근의 시스템들은 아키텍처 요소의 인터페이스를 통해 상호작용을 한다. 일반적으로 인터페이스는 공개 인터페이스와 비공개 인터페이스로 구분하는데, 아키텍처는 공개 인터페이스만을 고려한다. 그러므로 내부소통을 위한 비공개 인터페이스는 아키텍처에 표시할 필요가 없다.
둘째, 시스템은 하나 이상의 구조로 구성될 수 있다. 다시 말해 시스템은 한 개 이상의 구조를 포함할 수 있으므로 어느 한 구조만을 아키텍처라고 말할 수는 없다. 아키텍처를 하나의 구조로 한정한다면 많은 이견이 나올 것이다. 예를 들어 대부분의 프로젝트에서 구현 단위를 기준으로 시스템 구조를 나눈다. 이렇게 나뉜 구조는 주어진 책임이 명확하므로 프로그램팀의 업무 분할 기준이 된다. 또한 이 구조는 다른 구현 단위로부터 접근 가능한 공용 프로그램이나 데이터를 포함하거나, 전용 프로그램과 데이터도 포함할 수 있다. 큰 프로젝트에서는 대체로 아키텍처 요소를 나눠 각 요소를 하위 팀에게 할당하는데, 이런 종류의 구조가 시스템을 기술하는데 자주 쓰인다. 이 구조는 매우 정적인 구조로서 시스템을 기능 위주로 나눠 구현팀에게 할당하는 방식에 중점을 둔다. 정적인 구조를 제외한 시스템 구조 중에는 시스템이 기능을 수행할 때 각 요소가 실행시간에 상호작용하는 방식에 초점을 맞춘 경우가 있다. 시스템이 여러 개의 병렬 프로세스로 구현되었다고 가정하면, 이것을 표현하는 구조가 필요할 것이다. 앞에서 설명했듯이 다양한 방법으로 구현되는 프로그램을 실행환경에서 하나 이상의 프로세스로 표현된다. 프로세스 간의 동기화 관계는 시스템을 표현하는 데 사용되는 또 다른 종류의 구조이다. 이런 구조들 중 하나만 가지고 아키텍처라고 할 수 있을까? 그렇지 않다. 각 구조가 아키텍처 정보를 담고 있기는 하겠지만, 하나만으로 아키텍처라고 하기는 어렵다. 아키텍처는 여러 구조들과 그 외 많은 것이 모여서 이뤄진다. 예를 들어 아키텍처가 하나 이상의 구조로 구성된다면 여기에는 한 가지 이상의 아키텍처 요소와 한 가지 이상의 연관관계가 표시될 수 있고, 한 가지 이상의 시점이 존재할 것이다.
셋째, 소프트웨어가 들어간 컴퓨터 시스템에는 전부 소프트웨어 아키텍처가 있다. 아키텍처 요소와 그 사이의 연관관계로 표현할 수 있기 때문이다. 아주 간단한 시스템이라면 시스템 자체를 단일 요소로 본다. 비록 관심도 끌 수 없고 유용하지도 않지만 그래도 아키텍처이다. 모든 시스템에는 아키텍처가 있지만, 그렇다고 해서 항상 그 아키텍처를 누군가가 알고 있다는 뜻은 아니다. 시스템을 디자인한 사람들은 오래 전에 떠나고 관련 문서는 사라졌으며(혹은 만들지도 않았거나) 소스코드 또한 잃어버려서(혹은 산출물로 제출되지 않았거나) 이진 실행 코드만 남아 있다면, 해당 시스템의 아키텍처는 존재하기는 하지만 알아보기는 힘들 것이다. 이 경우처럼 아키텍처 기술서(혹은 명세서)와 동떨어진 아키텍처가 존재하는 경우가 있는데, 이 때문에 아키텍처 문서화와 아키텍처 재건이 중요한 것이다.
넷째, 시스템 요소의 행위를 다른 요소에서 인식할 수 있다면, 이는 아키텍처로 표현될 수 있다. 외부에 드러나는 시스템 요소의 행위는 다른 시스템 요소와의 상호작용 방법을 제시하므로 분명히 아키텍처라고 할 수 있다. 아키텍처라면서 선과 도형으로 그린 그림 중에는 전혀 아키텍처가 아닌 것들이 있다. 단순히 선과 도형으로 그린 도면으로 좀더 관대하게 본다면 실제 요소가 하는 일을 나타내어 정보 단서를 제공해주는 수준일 뿐이다. 만야 운이 좋으면 요소의 이름만으로 행위를 유츄할 수 있다. 즉 요소의 이름이 데이터베이스, 그래픽 사용자 인터페이스, 실행 가능한 프로세스 등으로 표시되어 있다면, 그 이름을 가진 요소들이 어떤 행위를 할지 유추할 수 있을 것이다. 그러나 유추를 하는 사람이 지닌 지식에 따라 아키텍처를 다르게 볼 수 있으므로 문제는 여전히 남아 있다. 모든 요소들의 정확한 행위나 성능에 대해서 자세히 기술할 필요는 없다. 그러나 특정 요소가 다른 요소와 상호연동하는 동작이나, 특정 요소가 시스템에 수용됨으로써 시스템 전체에 미치는 영향 같은 것은 소프트웨어 아키텍처에서 표현돼야 한다.
마지막으로, 아키텍처 정의만으로 잘 만들어진 아키텍처와 그렇지 못한 아키텍처를 구분할 수는 없다. 잘 만들어진 아키텍처는 시스템 행위나 성능, 시스템 생명주기를 좋게 만들 수 있다. 시행착오는 시스템 아키텍처를 잘 만들기 위한 최선의 방법이 될 수 없다. 즉, 아키텍처를 아무렇게나 만들거나 선정하고 나서 좋은 시스템이 만들어지길 바라는 것은 말도 안된다는 뜻이다. 따라서 아키텍처 설계와 아키텍처 평가 방법의 중요성이 더 커진 것이다.
디자인이 강조되는 시대에 살아남기 위해 비즈니스맨들이 갖추어야 할 디자인 마인드! 『디자인 마인드』는 디자인 라이팅을 통해 디자인 마인드를 갖추는 요령과 실무 디자인 감각을 익히는 방법, 성공적인 디자인을 위한 커뮤니케이션 방법을 알려준다. 저자는 디자인을 현실화시키는 것은 디자이어의 몫이지만, 디자이너에게 구체적으로 원하는 제대로 디자인을 요구하기 위해서는 직장인들도 디자인 마인드를 갖추어야 한다
2008.02.13 ~
양요나씨가 지은 책을 전에도 한 번 본 것 같다. 무엇인지는 잘 기억이 나지 않지만...
뭐, 굳이 찾아볼 마음은 없다. ^^
양장본으로 보고 있는데, 책 사이즈도 아담하고 내용도 그리 많은 것 같지는 않다.
내용의 요지는 "디자인의 시작은 글쓰기"라는 것이다.
물론 주된 내용은 디자인이 중요하다라는 것이고 말이다.
솔직히 개인적으로는 65점 정도의 책이다.
순수한 공돌이 출신인 나로써는 디자인의 필요성은 느끼지만,
이 책의 내용과 풀어 나가는 방식은 그리 와닿지 않는다.
내용 중에 갑자기 착시 현상 등에 대해서 주르륵 내놓는 내용도 마찬가지이고...
하지만, 디자인의 필요성과 디자인의 시작이 글쓰기라는 부분에는 동감을 하기에
끝까지는 읽어볼 예정이다.
일상의 궁금증을 해결하는 과정에서 자연스럽게 깨닫는 경제 원리의 진수! 전 세계 비즈니스를 움직이는 1% 리더들을 키워낸 아이비리그 경제학과. 과연 그 곳에서는 무엇을 가르칠까? 아이비리그 명문인 코넬대학교 존슨경영학대학원의 로버트 프랭크 교수가 쓴『이코노믹 씽킹』을 통해 아이비리그 수재들이 받았던 실제 경제학 강의의 정수와 그들을 1% 비즈니스 리더들로 키워낸 아이비리그식 사고법의 핵심을 엿보자. 이
2008.02.11 ~ 2008.02.25
최근에는 판타지에 빠져서 한동안 도움이 되는 책을 못읽었는데,
그나마 요즘 읽고 있는 책이다.
'로버트 프랭크'가 지었다고는 하지만, 각 아이템별로 작성한 이는 별도로 있는 것 같다.
즉, 그냥 '로버트 프랭크'는 여러가지 일들을 묶은 사람인 것 같다.
이 책의 내용은 세상을 움직이고 있는 경제 원리에 대한 것이다.
즉, 우유팩은 왜 네모나게 나오고, 캔음료는 원통으로 나오는지에 대해서...
뭐 그런 에피소드가 계속 나온다.
읽다보면, 반절 정도는 누구나 알고 있는 사실을 조금 어렵게 쓴 것 같은 느낌이 든다.
하지만, "아! 그렇구나"하는 것들도 많다. 그냥 부담없이 시간 날 때마다 읽을 수 있다.
한 두 페이지에 에피소드 하나씩이기 때문에, 잠깐의 짬만으로 읽을 수 있는 책이다.