[적정 소프트웨어 아키텍처]
제목 : [적정 소프트웨어 아키텍처] 초판 1쇄 발행 : 2022년 5월 30일 지은이 : 조지 페어뱅크스 옮긴이 : 이승범 출판사 : 한빛미디어 ![]() |
개발자 커리어 트랙에 올라선 지 몇 년 되지 않았다. 이곳 세계도 알면 알수록 넓은 세상이라는 것을 배워가고 있다. 한빛 미디어 리뷰어 활동도 그 여정 중에 우연히 참여하게 된 것이고, 이곳에서 IT분야의 신간 서적들을 조금이나마 빠르게 접해볼 수 있다는 것은 또 하나의 행운이고, 감사한 일이라 여기고 있다.
'SW 개발'이라는 분야에서 '아키텍처'라는 것을 알게된것도 얼마 되지 않았다. 다만 일을 하며 직관적으로 내 머릿속에서는 어느 정도의 구조 설계와 흐름 등이 나름 정립되어 일을 하고 있었고, 그것이 '아키텍처'의 일부라는 것을 알게 되었다.
이번에 책을 받고 나서는 조금 부담이 되었다. 표지가 멋지기도하고, 내용도 배워가고 있는 것이어서 선택지 중에 하나로 올리긴 했었지만, 막상 받고 나니 내가 잘 리뷰할 수준이 아니라고 여겨졌기 때문이다. 이번 책도 지난번 [전문가를 위한 C] 책처럼 공부하며 꺼내볼 수 있는 사전과 같은 역할을 하게 될 것 같다.
당연히 서론과 앞부분을 먼저 읽었고, 이곳에서 조금은 헷갈려하던 개념들을 어느정도 정리할 수 있었다는 게 이번 리뷰의 성과라고 할 수 있다. 관련 내용은 뒤에서 정리해보겠다.
옮긴이가 설명하는 이 책의 대상 독자는 '실무 소프트웨어 개발자'라고 하였다. " '객체 지향 소프트웨어 개발, UML, 유스 케이스, 디자인 패턴과 같은 기본적인 소프트웨어 개발 아이디어를 이미 알고 있는 사람"이 적합한 주요 독자라고 설명하였다. 또, 학부 고학년이나 대학원 수준의 교과서로도 적합할 것이라고 설명하며 문을 열었다.
앞쪽 부분을 먼저 읽으며 기록하고 싶은 부분을 기록해보면 아래와 같다.
(pg 32) 소프트웨어의 규모와 복잡성을 성공적으로 해결하려면 개발자에게 개선된 무기가 필요하다. 이러한 무기는 분할(partition), 지식(knowledge), 추상화(abstraction)의 세 가지 범주로 분류할 수 있다. 개발자는 문제를 더 작고 다루기 쉽게 분할하고, 유사한 문제에 적용하는 지식을 활용하고, 추상화를 활용해 추론한다.
(pg 33) 소프트웨어 아키텍처는 그러한 무기이며 소프트웨어 시스템의 복잡성과 규모를 다루는 데 도움을 준다. 소프트웨어를 분할하는데 도움을 주고, 더 나은 소프트웨어를 설계하는데 도움을 주는 지식을 제공하며, 소프트웨어를 추론하는 데 도움을 주는 추상화를 제공한다.
(pg 33) ~ 아키텍처는 대략 소프트웨어 시스템의 거시적 설계다.
(pg 36) 아키텍처 전문가는 도메인 사실(domain fact), 설계 결정(design decision), 구현 세부 정보(implementation detail)를 구분하고 묶을 수 있다. 다른 사람이 이를 뒤섞어 놓더라도 구분할 수 있다. 소프트웨어 아키텍처 전문가가 되면 자신이 타고난 추론 능력을 효과적으로 사용할 수 있다.
(pg 40) ~ 이 책은 소프트웨어 아키텍처에 대한 리스크 주도 모델(risk-driven model)을 소개한다. 이 모델은 적절한 아키텍처링 기법을 선택하여 적용하고, 얼마나 많은 시간을 투자할지 파악하도록 해주어 적정 아키텍처(just enough architecture) 작업을 수행하도록 안내한다.
(pg 40) 아키텍처링에 투입할 노력은 소프트웨어 개발의 실패 리스크에 따라 달라져야 한다.
(pg 41) 리스크 주도 모델은 설계 작업에만 적용하므로 애자일 프로세스, 폭포스 프로세스, 나선 프로세스에 모두 적용할 수 있다. 프로세스와 관계없이 소프트웨어를 설계해야 한다.
(pg 47) 아키텍처가 시스템의 골격 역할을 하고, 품질 속성에 영향을 미치며, 시스템을 제한하기 때문에 소프트웨어 아키텍처 선택이 중요하다. 아키텍처 대부분은 시스템에서 제공해야 하는 기능(functionality)과 직교한다. 즉, 상관관계가 없다. 따라서 큰 고민 없이 적절하게 아키텍처와 기능을 섞어 조합해도 시스템이 동작한다. 하지만 더 잘 동작하는 조합도 있다. 아키텍처 설계는 이렇게 잘 동작하는 부분을 찾는 작업이다.
* 아키텍처 및 상세 설계에 대해...
(pg 48~51) 소프트웨어 시스템의 설계는 개발자의 머리에 있는 결정과 의도로 이루어진다. 설계는 소프트웨어 아키텍처와 상세 설계로 나눌 수 있다. (하지만) 실제로 아키텍처를 상세 설계와 구별하기가 어려울 때가 많다.
~ 아키텍처가 소프트웨어 설계에서 거시적이고 광범위한 문제를 처리한다는 일반적인 합의가 있다. ... 컴퓨팅 시스템의 소프트웨어 아키텍처는 시스템에 대해 추론하는 데 필요한 구조의 집합으로 소프트웨어 요소, 이들 간의 관계 그리고 이 둘의 속성으로 구성된다. ~단순히 이러한 구조(structure)가 아키텍처를 구성한다고 말하지 않고 아키텍처가 시스템에 대해 추론해서 나오는 구조의 집합이라고 한다.
(미국을 아키텍처에 비유한 설명 이후) 이 비유는 시스템 아키텍처를 이해하고 설명하려면 일반적으로 구조에 대한 기계적 암기를 넘어서야 함을 보여준다. ... 아키텍처와 상세 설계 사이의 경계가 모호하다는 점에서 문제가 있다. 아키텍처는 모듈 및 모듈 연결 방식과 같이 설계의 거시적인 부분이라고 말하는 것이 더 간단하고 명확하다. 반면 상세 설계는 다른 모든 것을 포함한다.
고층 건물 예에서와 마찬가지로 시스템 전반적인 품질을 달성하는 데 세부 사항이 중요하다면 아키텍처와 관련이 있다고 생각할 수 있다.
(소프트웨어 아키텍처가 중요한 이유) (pg 51~53)
- 아키텍처는 시스템의 골격역할을 한다
완벽한 비유는 아니지만 아키텍처를 뼈대나 골격으로 생각하면 유용하다.
- 아키텍처는 품질 속성에 영향을 미친다
시간이 지나면서 진화하는 기능적 요구사항은 모든 시스템에 대한 다면 과제다. 하지만 진화하는 품질 속성은 급격한 변화를 가져올 수 있다. 100명의 사용자를 지원하도록 설계한 시스템을 아키텍처 변경 없이 10만 명까지 확장할 수는 없다. 허물을 벗고 나와 성장하는 게처럼 오래된 아키텍처를 벗어나 성장하는 여러 세대나 버전의 애플리케이션은 자주 볼 수 있다.
- 아키텍처는 (대부분) 기능과 직교한다
시스템의 아키텍처는 기능과는 별개의 선택이지만 아키텍처를 잘못 선택하면 기능 및 품질 속성을 달성하기 어려워진다. ... 사막에 선박 공장을 둘 수 있지만 해안에 두는 것보다 어렵다.
- 아키텍처는 시스템을 제한한다
이런 제약은 가이드 레일 역할을 하며 목표로 하는 작업을 잘 수행하고, 시간이 지나더라도 잘 유지할 수 있는 시스템을 만드는 데 필수적이다. 시스템이 하지 않는 일은 시스템이 하는 일만큼 중요하다. 시스템에 요구되는 품질이 보장되는지 확인하려면 시스템이 수행하지 말아야 하는 작업을 알고 제약해야 한다. 예를 들어 보안 시스템은 신뢰할 수 없는 당사자와 데이터를 교환하지 않아야 한다. 그리고 시스템 처리 시간이 오래 걸리는 동작은 취소 옵션을 제공하지 않고 시작해서는 안 된다.
(소프트웨어 아키텍처에 대한 세 가지 접근 방식 요약)
- 아키텍처 무관 설계
아키텍처에 거의 관심을 기울이지 않는다. 시스템은 큰 진흙 뭉치가 될 수도 있고, 의식적인 선택 없이 뚜렷한 아키텍처가 나타날 수도 있고, 도메인 규범에 따라 자연스럽게 추정 아키텍처가 선택될 수도 있다.
- 아키텍처 집중 설계
의도적으로 소프트웨어 아키텍처를 선택한다. 기능 및 품질 속성을 포함하여 목표를 달성하는 데 적합한 아키텍처를 설계한다.
- 아키텍처 상향 설계
아키텍처 집중 설계의 일종으로, 개발자가 시스템의 목표나 속성을 보장할 목적으로 아키텍처를 설계한다. 목표나 속성을 아키텍처에 포함하면 개발자는 이를 달성하는 추가 코드를 작성할 필요가 없다.
리뷰를 하며 느낀점은... 옮긴이 "이승범"님이 번역을 하며 '참 많은 고민을 하셨겠구나'라는 것이 느껴졌다. 단순히 원어를 한글로 번역할 때 전문용어가 오역되는 것을 막기 위해 영어 병기는 물론, 이해를 돕기 위한 초월 번역을 한 부분(제목에서 Just Enough'를 '적정'이라 번역한 점!!)과 책 뒷부분에 친절한 용어 설명 부분까지... 출판사와 옮긴이분이 독자를 위해 세심하고 노력한 것에 대해 감사함을 표하고 싶다. 다른 번역책들도 훌륭한 번역들이 많았지만, 올해 내가 리뷰한 책들 중에서 번역에 관한 것은 이 책이 제일이라 생각한다.
아키텍트로 향하는 여정 초입에 있는 나로서는 이 책을 통해 애매했던 정의와 역할에 대해 조금은 정리가 되었고, 앞으로 갈 길이 멀다는 것을 다시 한번 점검했으며, 그럼에도 이런 책들의 도움을 받아 한 걸음씩 내딛어야겠다는 다짐을 하게 된 시간이었다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
'항해 > 독서' 카테고리의 다른 글
[트랜스포머를 활용한 자연어 처리] (0) | 2022.12.30 |
---|---|
[전문가를 위한 C] (0) | 2022.10.29 |
[이순신의 바다] (0) | 2022.10.25 |
[식량위기 대한민국] (0) | 2022.10.19 |
[파이썬을 활용한 베이지안 통계] (0) | 2022.07.24 |