Structured Design이라는 책을 읽고 있다. 지금으로부터 무려 30년 전인 1979년에 출판된 책이다. 내가 컴퓨터를 접하고 프로그래밍을 처음 시작한 것이 84년인데 그 때보다도 무려 5년 전에 쓰여진 책이다. 2008년에 출간된 책도 한물 간 내용이라고 잘 손을 안 대는 내가 왜 이렇게 오래된 책을, 그것도 교과서로 쓰여져서 그런지 큼직한 판형에 빼곡히 담긴 작은 글씨로 인쇄된 책을 보고 있을까?

 

이게 다 켄트 벡 때문이다.

그의 Responsive Design 세미나에 참석하면서 이 책을 처음 알게되었다. 켄트 벡이 Responsive Design이라는 소프트웨어 설계에 관한 깊이 있는 탐구를 시작하는데 중요한 동기가 된 것이 이 책이라고 한다. 이 책의 출판 25주년 기념회에 패널로 초대받고 난 후에 이 책을 제대로 다시 공부하면서 설계에 관해서 자신이 오랜 동안 가지고 있던 많은 질문에 대한 답이 이미 오래전에 이 책을 통해서 대답되어있다는 것에 자극을 받게 되었다고 한다. 그리고 몇년간의 탐구와 연구를 통해서 최근에 Responsive Design이라는 이름으로 그 동안 정리했던 내용을 블로그나 세미나, 컨퍼런스 등을 통해서 조금씩 발표하기 시작했다.

Responsive Design이라는 이름의 그의 설계에 관한 생각들과 세미나 때 들은 내용들은 내게 설계라는 것에 대해서 새로운 호기심을 가지게 해주었다. 이제까지 25년간 취미로, 또는 직업으로 프로그래밍을 해오면서 수많은 설계라는 작업에 참여했고 또 이름도 다양한 수많은 설계문서들을 작성해왔지만 지금까지 한번도 제대로 설계라는 것이 무엇인지, 그것을 어떻게 하는 것이 가치있고 개발에 도움을 주는 것인지 등에 대해서 깊이있게 고민하고 학습해본 적이 없다는 생각이 들었다. 설계란 그저 문제를 해결해나가기 위한 방법을 찾는 것 내지는 개발이 들어가기 전에 미리 구상하고 스케치 하는 정도의 작업이라는 막연한 느낌을 가지고 있었고, 방법론에 들어있었기 때문에 이런 저런 설계와 관련된 문서와 다이어그램들을 만들어왔을 뿐이다.

Responsive Design 세미나에서 받은 영감과 자극을 바탕으로 해서 나도 설계에 대해서 진지하게 공부해보기로 마음을 먹었다. 그리고 얼마후에 기술사협회 이사라고 뻐기고 다니는 후배를 만났는데, 그가 마침 가지고 다니던 한 소프트웨어 엔지니어링 책을 잠깐 뺐어 본 적이 있다. 최신 SE연구와 이론이 잘 집적되어있다는 그 책에서 설계에 관한 내용을 찾아보니 사실 기존에 내가 가지고 있던 설계에 대한 이해와 별 다를바 없다는 느낌이었다. 이런 저런 복잡한 방법들을 사용해서 접근하면 문제를 효과적으로 해결할 수 있는 방법인 깔끔한 설계가 나온다는 그런 식의 방법적인 접근이었다.

그래서 차라리 켄트 벡이 보고 영감을 받았다는 이 오래된 Structured Design이라는 책이 보고 싶었다. 개념을 설명하기 좋아서 요즘 자주 써먹는 coupling과 cohesion이라는 용어도 이 책에서 처음 본격적으로 정의되고 사용되어졌다고 하니 더 흥미가 생겼다.

오래되 책을 제법 비싼 값을 주고 구입하기는 좀 부담이 되고 해서 아내에게 부탁해서 학교 도서관에서 이 책을 빌려보기로 했다. 대학 도서관에서 이 책을 찾아보니 책이 있기는 한데, 학생이 바로 접근할 수 있는 서고에 있는 것은 아니고 오래되고 별로 찾지 않는 책들을 모아둔 책 창고에 있는 책이라고 나왔다. 하긴 요즘에 누가 이런 책을 보겠는가. 아무튼 신청을 하고 며칠 기다려서 어제 저녁에 처음 이 책을 받게 되었다.

컴퓨터 책 치고 흔치 않은 녹색의 표지가 인상적이었다. 하드커버 표지가 너덜너덜 해져서 결국 두터운 청테이프로 붙인 흔적이 세월을 느끼게 해주는 것 같다.

커버를 열어보니 수많은 사람들이 대출해간 흔적이 대출스탬프를 찍은 종이가 십여장 두텁게 붙어있는 것에서 느껴진다. 처음 대출이 된 날자는 80년 5월이다.

  

 

어제 밤에 첫 장을 읽었다.

소프트웨어 개발 과정에서 일어나는 일을 설명하면서 Structured Design을 이렇게 정의하고 있다.

Structured Design is the art of designing the components of a system and the interrelationship between those components in the best possible way

처음 이 문장을 읽었을 때 켄트 벡이 내린 Design에 대한 정의가 떠올랐다.

Design is beneficially relating elements

설계를 구성요소와 그 사이의 최선의 상호관계라는 측면에서 생각한다는 것은 심지어 이 책이 쓰여질 당시에는 주류기술은 커녕 언급조차 안되던 객체지향기술이나 SOA의 풍성한 세계에서 살고 있는 요즘의 개발자들도 잘 하지 못하는 사고가 아닐까하는 생각이 든다. 그것을 그 시절에 이미 요소들 간의 결합도와 응축도라는 측면에서 연구하고 이를 체계화 했다는 것은 대단한 작업이었을 것이다. 겨우 구조적 프로그래밍(structured programming)이 유행하기 시작하고, GOTO-less 개발을 하자는 얘기가 돌던 시기에 쓰여진 책이지만, 이 책이 객체지향 기술과 설계에 미친 영향이 크다는 것이 이 책을 읽었던 사람들의 서평에 등장하는 것을 보면 흥미롭다.

 

아무튼 재밌을 것 같다.

그나저나 Responsive Design 세미나도 정리를 해봐야 하는데, A4지 8장 앞 뒤로 빽빽히 메모해둔 것이 어디로 사라졌는지 모르겠다. 분명 어딘가 안전하게 잘 보관한 것 같은데, 다시 한번 잘 뒤져봐야 겠다.

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha