지은이의 말
‘로보트 태권브이’ 만화를 보면서 미래의 과학자를 꿈꾸던 아이가 어느덧 중년의 나이가 되어 과거를 추억합니다. 중학교 시절 처음으로 GW-Basic이라는 프로그램 언어를 접했습니다. Z-80으로 설계된 컴퓨터에서 난생처음 프로그램을 학습했던 당시 기억은 아득한 추억으로 남아 있습니다. 뒤돌아보니 인생의 진로가 그때 결정된 것 같습니다. 개발환경은 그때와 많이 다르지만 나는 여전히 모니터 앞에서 컴퓨터 자판을 두들기며 코드를 입력합니다.
호사유피 인사유명(虎死留皮 人死留名)이라는 고사성어가 있습니다. ‘호랑이는 가죽을 남기고 사람은 이름을 남긴다.’라는 뜻입니다. 애플의 창업자인 스티브 잡스는 특별하게도 IT 분야 역사에 유명 인물로 남았습니다. 나는 이와 같은 꿈을 이루지는 못했지만, 한 시대를 같이 살아간 개발자로서 다음 세대에 무언가 남겨줘야 한다고 생각합니다. 그동안 수많은 프로그램 언어를 사용했고, 최근에는 웹과 관련된 개발을 주로 진행했습니다. 이제는 내가 가진 지식을 정리하여 다음 세대에 내가 이루지 못한 꿈을 넘길 때가 된 것 같습니다.
개발자들은 알게 모르게 선대의 수많은 코드를 재사용하고 이를 발전시킵니다. 이제는 지식과 더불어 코드도 같이 남겨줘야 합니다. 나는 요즘 만나는 사람들에게 “프로그래머는 죽어서 코드를 남긴다.”라는 말을 자주 합니다. 그리고 이를 위해 오픈소스 프로젝트 JinyPHP를 시작했습니다. 오픈소스는 자신의 코드를 외부에 공개하고 협업을 통해 지속적으로 발전시키는 모델입니다.
오픈소스를 개발하다 보니 코드를 좀 더 체계적이고 협업 가능한 모델로 만들어야겠다는 생각을 합니다. 체계적인 코드 설계는 모든 개발자의 공통된 관심사일 것입니다. 절차지향, 구조적 프로그래밍, 함수형, 객체지향 등 다양한 설계 구현 기법이 존재합니다. 요즘에는 대형 프로그램 개발 방법으로 객체지향 설계 기법이 각광 받고 있습니다. 객체지향 설계가 어느 정도 몸에 익숙해졌다면 다음으로 객체지향 디자인 패턴에 관심을 갖게 될 것입니다.
디자인 패턴을 적용하여 코드를 설계하는 것은 쉽지 않습니다. 정확한 패턴의 의미와 문제 해결 목적을 잘 이해하고 있어야 하기 때문입니다. 경험이 부족한 개발자는 문제에 어떻게 접근하고 해결해야 하는지 몰라 방황하는 경우가 많습니다. 이때 선배들의 경험을 따라가다 보면
더 쉽게 다양한 문제를 해결할 수 있습니다. 그것이 바로 디자인 패턴입니다. 깃허브의 규모 있는 오픈소스 프로젝트를 살펴보면 다양한 디자인 패턴 설계 기법이 녹아 있습니다. 사실 디자인 패턴을 모른다면 왜 이렇게 코드를 작성했는지 이해할 수 없습니다.
제가 진행하는 JinyPHP 오픈소스 프로젝트에도 다양한 디자인 패턴 기법을 적용해 설계했습니다. 잘 설계해서 만드는 것도 중요하지만, 다양한 사람들과 코드를 공유하고 협업하는 것도 중요합니다. 체계적인 개발 과정과 설계를 공유하기 위해서는 디자인 패턴에 대한 이해가 우선적으로 필요합니다. 디자인 패턴을 학습하는 이유는 공통된 관점으로 설계를 바라보기 위함입니다. 시중에는 디자인 패턴에 대한 정보가 그다지 많지 않습니다. 오래된 코드와 특정 언어에 한정된 설명이 대다수입니다.
많은 개발자가 디자인 패턴을 학습해야 하며, 자신의 프로젝트에 적용할 수 있는 이론적 원리와 코드가 필요하다는 생각이 들었습니다. 이에 JinyPHP 오픈소스 프로젝트를 진행하면서 준비한 내용을 정리합니다. 이렇게 『넘버 PHP 시리즈』(비제이퍼블릭, 2018)와 『Git 교과서』(길벗, 2020)에 이어 다음 세대에 전달할 이 책이 탄생했습니다.
2020년 09월 이호진