소프트웨어 아키텍트

4박5일 괌 여행을 다녀오면서 ‘소프트웨어 아키텍트가 알아야할 97가지(지앤선)’라는 책을 읽었습니다. 48명의 노련한 아키텍트들이 제공하는 조언으로 이뤄진 책입니다. 저는 시스템 구축보다 엔진 개발 경력이 많다보니 스타트업의 작은 시스템을 설계하는 것도 쉽지만은 않았습니다. 이 책을 통해 새롭게 알게된 것들은 사실 많지 않습니다. 하지만 책을 통해 반복적으로 언급되는 내용들은 envicase의 서비스 아키텍처를 설계하면서 가졌던 몇가지 고민의 결과들에 대해 안도감 혹은 확신을 가져다 주었습니다.

마치 Kent Beck이 프로덕션 코드 1줄을 위해 테스트 코드 4줄을 작성한다는 얘기를 들었을 때의 안도감과도 같습니다.

97 Things Every Software Architect Should Know

아키텍트는 조율자다

책을 통해서 가장 많이 언급되는 내용이 조율에 대한 것입니다. 이해당사자(stakeholder)와 프로그래머 사이의 관점과 가치를 조율합니다. 높은 추상화(저는 높은 추상화가 무조건 좋다고 생각하지 않습니다. 다행히 책에서도 동일한 관점을 발견할 수 있었습니다.)와 낮은 추상화 사이를 조율합니다. 비즈니스 가치와 코드 품질 사이를 조율합니다. 빠른 출시와 좋은 설계 사이를 조율합니다. 하나의 해결책과 또 다른 해결책 사이를 조율합니다. 여기서 조율은 단지 선택만을 의미하지는 않습니다. 조직 구성원의 공감을 만들어내야 합니다.

많은 것은 완성되지 않는다

소프트웨어 산업은 다른 산업과 비교하면 여전히 폭발적으로 성장중입니다. 즉 성숙하지 않죠. 산업이 성숙하지 않고 성장중이기 때문에 그 안의 많은 요소들이 성숙하지 않고 성장중입니다. 프로그래머와 소프트웨어 모두 마찬가지입니다. 완성보다 성장에 초점을 맞춰야합니다. 프로그래머가 끊임없이 학습해야 하는 이유이기도 하고 완벽한 아키텍처와 코드를 만드는 것을 목적으로 자원을 소비하기보다는 닥쳐진 문제를 해결하기 위해 노력해야 하는 이유이기도 합니다. 닥쳐진 문제는 비즈니스 문제일 수도 있고 기술 부채 관리일 수도 있습니다.

방법론자를 견제하자

특정 페러다임이나 프로그래밍 언어, 디자인 패턴, 제품, 혹은 따끈따끈한 신기술 따위에 맹목적인 사람들을 흔하게 볼 수 있습니다. 꽤 이름이 알려진 경험 많은 기술자가 모든 웹 서비스는 예외 없이 3-Tier 아키텍처로 구성되어야 한다고 주장하는 것을 들은 적이 있습니다. 저는 Node.js를 별로 좋아하지 않지만 제한된 기능만 담당하는 작은 RESTful 서비스를 Node.js로 만든다면 컨트롤러가 간단한 도메인 논리를 가지는 것에 대해 별 고민 없이 수용할 것입니다. 왜냐하면 저는 3-Tier 아키텍처 패턴보다 다소 불안정하더라도 Node.js의 장점을 사용해 빠르게 웹 서비스를 구축해야하는 비즈니스 상황이 더 중요하다고 생각하기 때문입니다. SOLID 원칙이나 ACID 속성, 그리고 잘 알려진 디자인 패턴들 역시 마찬가지입니다. 목적과 원리를 이해하고 필요할 때에 사용하면 좋은 도구 이상으로 숭배하는 것은 바람직하지 않습니다. 그것들이 영원할 것이라고 생각한다면 아마 경험이 부족하기 때문일겁니다.

책에서는 ‘패턴 중독(a victim of pattern pathology)’이라는 어휘가 등장합니다. 디자인 패턴 중독에 대해서는 별도의 글을 작성하려고 합니다.

아키텍트는 프로그래머다

스스로 구현할 수 없는 것들을 설계하는 것은 어리석거나 무능한 것입니다. 구현 능력은 없으면서 자신을 아키텍트라 지칭하는 사람들을 많이 봤습니다. 그리고 당연히 그들이 설계한 것들은 제대로 구현되지 않거나 올바르게 동작하지 않는 경우가 많았죠. 더 중요한 것은 이런 부류의 아키텍트가 설계한 불확실성 투성이인 아키텍처로는 프로그래머들을 설득하기 어렵다는 것입니다. 특히 국내에서는 아키텍트가 프로그래머 위에 군림하는 경우가 많은데 이런 경우 리더십과 팀워크에까지 아주 큰 악영향을 줍니다.

테스팅은 매우 중요하다

사실 책에서 테스팅의 중요성을 강조하는 구절은 없습니다. 오히려 모두들 충분한 테스팅을 당연한 것으로 가정하고 이것을 더욱 잘 할 수 있는 방법들을 얘기합니다. 저는 테스팅 세미나를 열면서도 테스팅의 단점에 대해 많이 얘기하는데 사실 이것은 테스팅이 중요하지 않다기 보다는 국내 소프트웨어 산업의 테스팅에 대한 인식이 극도로 열악한 것이 큰 이유입니다. 책에서는 테스트를 거치지 않은 채로 코드를 중앙 저장소에 커밋하는 행위를 ‘범죄’라고 지칭합니다. 만일 이것이 사실이라면 국내의 수많은 개발팀은 ‘범죄조직’입니다.

책이라는 것을 전혀 가까이 하지 않는 저로서는 만화책을 제외하고는 10여년만에 처음으로 읽은 책이기도 하지만 위에 언급한 내용들 이외에도 아키텍트(혹은 아키텍팅을 수행하는 기술자)와 프로그래머 모두에게 유익한 내용으로 채워진 책이라고 생각됩니다. 특히 시니어로서 여러가지 고민을하고 있는 프로그래머들에게 추천해주고 싶습니다. 저 역시 앞으로 아키텍처와 관련된 고민거리를 만나게되면 조언이 될 내용을 펼쳐서 읽어보게될 것 같습니다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중