어떻게 해야 패턴을 좀더 쉽게 공부하고 체득할 수 있을까요?
제가 강의나 Online을 통해 많은 분들이 저에게 질문을 하십니다.
제가 집필중인 "미워도 다시 보는 패턴 이야기"라는 서적 안에 패턴서적의 빌드오더를 적어놓았지만,
POSA2와 Framework Design Guideline 이 두 서적의 편역 작업이 급해 집필이 무한정 연기되었습니다.
이 책이 나올때 까지 기다리세요!! 라고 말하면 너무 장사치 같겠죠. ^^..
이번 컬럼을 통해 부족하지만 제가 걸어온 그리고 걸어갈 패턴의 길을 알려드리고자 합니다.
1. 패턴을 대하기 이전에 마음가짐 - 유연성, 확장성
많은 분들이 패턴에 대해 허상을 가지고 있는데요.
왜 패턴을 공부해야 되는지에 하시나요?
종종 패턴을 이용하면 비약적인 성능 향상, 생산성이 증대 될거라 생각하시는 분도 있고 심하신 분은 Silver Bullet (은총알)로 생각하시는 분도 있습니다.
물론 제한적인 도메인안에서 성능, 생산성 향상을 가져 올수 있는 패턴도 있지만, 패턴 자체의 목적은 유연성과 확장성에 좀더 초첨이 맞추어져 있습니다.
초창기 객체 지향(80년대)의 가장 중요시 여기는 패러다임은 "Reuse (재사용)" 였습니다. 그래서 Component와 같은 이상적인 패러다임이 나오기도 했습니다. 마치 Lego와 같이 조립만 하면 만들어지는 Legoware를 꿈꾸어 왔죠.
하지만 현재 소프트웨어는 어떠한 가요? 빈번하게 바뀌는 시장의 요구사항, 한두 명이서 만들수가 없을 정도로 거대해진 규모, 길어진 소프트웨어 생명주기를 가진 녀석들이 대부분입니다.
그렇기 때문에 소프트웨어가 가져야 할 중요할 설계 방향이 재사용성 보다는 쉽게 변화를 받아 들일수 있는 유연성 (Reflexibility)과 뛰어난 확장성(Extensibility)을 가지는 것이 더욱 중요하게 되었습니다.
유연성과 확장성에 관심이 있는 분이라면 패턴은 좋은 도구가 됩니다.
하지만, 최적화나 성능 개선이 목적이시라면 패턴보다는 알고리즘을 공부하는 것이 더 나을 것입니다.
2. 패턴의 시작은 GoF 부터?
GoF 책이 명서이며, 패턴책에 큰 영향을 끼친 절대적인 서적임은 틀림없습니다.
하지만 여러분이 처음 패턴을 접한다면 GoF의 Design Pattern이라는 서적은 매우 어려운 서적이 될것입니다.
GoF 책을 보고 좌절하신 초보 개발자나 학생들을 많이 보아왔기 때문입니다.
저역시도 초보시절 GoF 책을 이해하기 위해서 3번을 읽었고 읽을때마다 새로운 느낌을 주는 서적이었습니다.
마치 성경을 읽는 느낌이라고 할까요? 그 만큼 깊이가 있는 책입니다.
GoF 책은 1990년대 후반부에 쓰여있다 보니, 1990년 중반부에 사용되는 Application을 예로 들어 설명하였고, C++ 의 이해를 수반으로 하고 있기 때문에 초보 개발자에게는 난해할 수 밖에 없었습니다.
그래서 2000년대에 이슈인 Database 프로그래밍과 같이 누구나 쉽게 이해할수 있는 수준으로 설명한 책이 Design Pattern Explained 였고 국내에서는 “알기 쉬운 디자인 패턴” 이라고 번역이 되었습니다. 불과 2년전만해도 초보자를 위한 디자인 패턴책은 이것 밖에 없었습니다.
하지만 현재는 뇌공학을 연계로 해서 쉽게 개념을 파악할수 있는 좋은 서적이 나왔습니다.
바로 “Head First Design Patterns” 입니다.
한빛 미디어에서 번역되었으며 국내 패턴 서적에서는 계속 1위를 고수하고 있으므로 보시길 권해드립니다.
하지만 정신 사납다고 하시는 분들도 계시네요 ^^ 그런 분들은 알기 쉬운 디자인 패턴을 읽길 권해드립니다.
다음 단계 서적으로는, 구체적으로 하나의 언어를 정해서 언어별 특성을 파악하며 패턴을 살펴볼 필요가 있습니다.
여러분이 Java에 관심이 많다면 "Java 언어로 배우는 디자인 패턴 입문" 을 추천 드리며,
C++에 관심있는 개발자라면 장세찬씨의 “GoF 디자인 패턴! 이렇게 활용한다.”를 보시길 권해드립니다.
그 다음 GoF 서적을 보시면 한결 수월하게 읽으실수 있을 겁니다.
이것으로서 패턴의 가장 기본이 되는 Micro Pattern들을 터득하실수 있습니다.
GoF Pattern은 단지 패턴의 시작일 뿐입니다.
GoF 패턴을 이해하셨지만, 여러분에 프로그래밍에 바로 적용하시는 분은 매우 극소수일 겁니다.
왜 일까요? 결코 여러분의 능력이 떨어져서가 아닙니다.
패턴을 올바로 이해하고 활용하기 위해서 작년에 마소에 기고 했던 "미워도 다시 보는 패턴 이야기" 라는 글을 다운 받아 읽어보시길 바랍니다.
이부분까지 이 컬럼에 다 쓰다간 대하드라마가 될거 같네요 ^^.
3. POSA (Pattern-Oriented Software Architecture) 의 세계로 초대.
일명 POSA 라고 불리는 이 서적들은 GoF와 어깨를 나란히 하는 명서중에 명서이며,
GoF를 읽은 분이라면 패턴에 좀더 깊은 세계를 맛보기 위한 좋은 서적입니다.
GoF(1995년)가 나온 1년뒤에 볼륨 1권이 출간(1996년)되었지만,
국내에는 2008년도에 역서가 나왔기 때문에 패턴 초보자들에게는 그리 알려져 있지 않은 서적입니다.
GoF가 가벼운 Micro Pattern 이었다면, POSA는 좀더 세부적인 도메인을 다루고 있는데요.
이 책을 탐독하면 자연스럽게 패턴 군 (Compound Pattern)들이 눈에 보이게 됩니다. 물론 GoF 패턴이 전제에 깔려 있습니다.
- Volume 1: Architectural Pattern (소프트웨어 구조를 잘 설계하기 위한 패턴)
- Volume 2: Concurren and Networked Object Pattern (분산객체를 위한 패턴)
- Volume 3: Resource Management Pattern (자원을 잘 관리하기 위한 패턴)
1,2권은 제가 마이크로 소프트웨어에 서평을 기고한 적이 있으니 링크를 통해 읽어보시고,
3권 (Resource Pattern)에 대해서 간략히 언급하겠습니다.
자원 관리를 위한 패턴들의 집합으로, 리소스 획득, 반환, 생명주기에 관한 패턴으로 크게 카테고리가 나뉘어져 있습니다.
기존의 리소스 관련 지식들을 패턴으로 잘 정형화했습니다. 1,2권에 비해 패턴 하나 하나에 깊이 있게 다루지 못하는 것이 흠이지만, 리소스 관리에 대한 지식을 정리하기에는 좋은 서적이라고 할수 있습니다.
물론 4,5 권도 나와 있지만 4권은 1,2,3군의 내용을 합쳐놓은 것이고, 5권은 Pattern을 만들기 위한 Meta Pattern에 가까운 것이기 때문에 구입을 안하셔도 될듯합니다.
^^ 참고로 1권의 번역서는 저희 스터팀이 감역하였으며, 지금 현재 2권을 편역중입니다.
4. 도무지 끝이 없는 패턴 이야기 (PLOP와 다양한 패턴들)
이제 패턴 서적은 매년마다 무수히 쏟아져 나오고 있습니다.
그리고 PLOP 학회를 통해 무수히 쏟아내는 패턴들. 그야말로 패턴의 홍수시대가 왔습니다.
제가 소장하고 있는 괜찮은 패턴 서적들을 몇가지를 여러분에게 공유하고자 합니다.
OOPSLA가 열린후 일주일후 같은 장소에서 PLOP라는 유명한 패턴 학회가 열립니다.
저희 Paper Meeting도 여기서 아이디어를 그대로 가져왔습니다. 그야 말로 패턴의 보고이며, 시중에 나온 새로운 도메인의 패턴 서적들은 거의 다 이 학회를 한번 거쳤다고 해도 과언이 아닐정도로 패턴의 가장 큰 학회입니다.
다양한 도메인을 폭 넓게 다루고 있고, 학회에 발표된 논문들을 예전 포스트를 통해 공유한 적이 있습니다.
이 학회에서 발표된 패턴중에 괜찮은 패턴들을 묶어 PLoPD (Program Language of Program Design) 라는 서적으로 출간됩니다.
POAD (Pattern Oriented Anaysis Design)
그야 말로 Pattern Drvien Design이라고 불러도 좋을만큼, 패턴을 활용해 분석및 적합한 전략/전술을 선택하는 가이드라인을 제공하는 서적입니다. 아마존 별 5개이지만, 국내에서는 잘 소개되지 않는 서적입니다. 그리고 아쉽게 절판까지 되었습니다. 많은 분에게 도움이 되는 서적입니다. 구하실 수 있다면 꼭 읽어 보시길 바랍니다.
POSA2가 Open Source CORBA인 TAO, ACE에 사용된 패턴을 소개한다면, 조금 더 최신 기술인 .NET Remoting, Web Service, CORBA , RealTime CORBA 에 사용된 분산 패턴들을 소개합니다.
겉보기에는 POSA2와 다른 패턴을 소개하고 잇는것 같지만 다시 한번 되짚어보면 POSA2에 소개된 패턴과는 내부 맥락이 같습니다.
이 서적을 통해서 최신 분산 기술에 정리된 내용을 체계적으로 정리할수 있어서 무척 도움이 되었습니다. 특히 .NET Remoting은 WCF (Windows Communication Foundation)과 동일한 아키텍쳐를 가졌다고해도 과언이 아닐정도로 똑같습니다.
TDD가 이슈가 되면서 Testing에 대한 관심이 요즘 매우 급증한 상태입니다.
VS.NET 과 Eclipse 역시 이러한 흐름이 발 맞춰 다양한 Testing 관련 기능을 제공하고 있습니다.
그중 여러분이 가장 자주 사용하시는 것이 xUnit (JUnit, NUnit, CUnit...) 일 것입니다.
이 책은 Unit Testing을 하기 위해서 어떻게 Testing Code를 작성하고 Refactoring하는지 정수를 보여주는 서적입니다. 막대한 분량으로 인해 많은 분이 좌절하시지만, 꼭 도움이 될 서적입니다.
저 역시 다 읽어 보진 않았지만 TDD에 관심이 있으신 분은 꼭 읽어보아야할 서적으로 추천드립니다.
Patterns For Fault Tolerant Software (내(耐)고장성 소프트웨어를 위한 패턴)
Quality 검증의 TDD 와 방어적인 프로그래밍을 넘어서, 내부적인 고장에도 스스로 복구및 조치를 취할수 있는 한발 앞선 소프트웨어 입니다. Error Handling/ Mitigation , Fault를 Detection하는 다양한 패턴들을 소개합니다.
뭐니 뭐니해도 핵심은 WatchDog 입니다.
PEAA (Patterns for Enterprise Application Architecture)
Refactoring의 창시자인 Marting Fowler 아 저씨가 쓴 책으로, 출판 당시 굉장한 센세이션을 일으킨 서적입니다. Enterprise Application을 설계하기 위한 다양한 패턴이 소개되어 있습니다. 물론 POSA나 PLOP에 나온 패턴을 현대적으로 바뀐 것이 대부분이지만, 이러한 것도 역시 기술이죠. Martin 아저씨는 과거의 기술, 용어, 개념들을 현대에 맞게 변형, 확장하는 능력은 알아줘야 할듯 합니다. SI를 하시는 분이라면 역서도 꼭 읽어보세요
Enterprise Integration Patterns
EAI를 위한 Messaging 처리에 중점을 둔 서적입니다. 어떻게 메세징 시스템을 만드는지 조목 조목 설명이 되어 있습니다. BPM/EAI/Enterprise SOA에 관심이 있는 분이라면 읽어보셔야 될 서적입니다.
Real-Time 시스템을 구축할때 가장 고려해야 할 것이 에측성일 것입니다. 우선 순위를 고려하고 주어진 Deadline안에 Job이 Schedulable 하냐를 판단하는 것이 중요합니다. 하지 못한다면 차선책을 선택해야 되니깐요. Embedded , Mission Critical한 시스템을 설계하시는 분에게는 도움이 될 서적입니다.
간략이 요약한 정도라, 방향을 잡는도 유용한 서적입니다. 실무에 쓰시기 위해서는 관련 논문을 찾아 읽으셔야 될듯합니다.
Pattern을 활용하여 Refactoring을 하는 방법을 소개하는 서적입니다.
Martin Fowler아저씨의 Refactoring 읽으신 분이라면 그 다음 이 서적을 읽어 보시길 권해드립니다.
"패턴을 활용한 리펙토링" 이라는 제목으로 역서가 출간되었습니다.
Architecting Enterprise Solutions
고성능과 인터넷 기반의 시스템을 구축할때 사용하기 유용판 패턴 서적으로, 실제 실무에 Infra를 구축하시는 개발자에게는 좋은 동반자가 되는 서적입니다. 시스템을 제어, 성능 측정, 적절한 서버수 산정과 같은 유용한 가이드라인이 제공되므로 읽어 보시길 권해드립니다.
하지만 가장 여러분에게 소개 시키고 드리고 싶은 것은 PLOP 학회에서 몇년간 발표된 논문입니다. 매우 엄청난 양을 자랑합니다. 여러분을 좌절을 안겨드려서 죄송하지만, 아마 여기서 소개된 패턴들이 대부분 위 서적들에 소개되었습니다. 그리고 종종 책의 저자도 보이구요. 출/퇴근 시간에 간간히 읽어보시면 도움이 될듯 합니다.
5. 맺음 그리고 저희 스터디 팀의 결실 EvaCast
너무나 많은 서적과 자료들을 소개시켜 드려 절망과 좌절에 빠진 분도 있을 겁니다. ^^
사실상 이렇게 많은 패턴을 혼자 공부한다는 것은 거의 힘들거 같구요.
지인을 통해 스터디 그룹을 만드시거나, 이미 활동중인 여러 스터디 모임이 생겼습니다.
이런 곳에 한번 참가해 보시는 것도 좋을듯 하네요.
현재 저희 스터디 그룹은 POSA2 번역에 올인하고 있어서, 아쉽지만 몇달간은 스터디가 중지되었습니다.
하지만 그동안 저희 스터디 팀의 노력의 결정체들을 EvaCast를 통해 공유해 놓았습니다.
GoF, POSA1, POSA2 패턴들을 거진다 보시고, 다운 받을수 있을뿐만 아니라, 이번에 완전 새롭게 개펀 작업을 했습니다.
EvaCast 을 통해 혼자라도 꾸준히 공부해 나가시길 권해드립니다.
그럼 혹시 궁금하신 질문은 Comment로 남겨주시면 답변드리겠습니다. 감사합니다.
출처 : http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=4246&MAEULNo=4&no=37819