소스 공개
솜이슬 2008. 1. 30. 15:03대단치도 않은 소스를 공개 하지 못할 까닭이 없습니다만, 단지 소스를 남에게 보여줄 때는 몇 가지 지켜야 할 예의가 있는 법이고, 아직 그 준비가 되지 않았기 때문에 조심스럽습니다.
친절한 설명은 고사하고 아무런 문서도 없는 상태에서, 다른 사람의 소스를 본다는 것은 사실 쉬운 일이 아닙니다. 이론적 배경이나 동작 원리를 파악하지 못한 상태에서 소스만 획득하는 것은 고기 잡는 법이 아닌 고기를 구하는 격일 테고요, 혹 소스를 보는 것 만으로도 고기 잡는 법을 통찰할 수 있을 정도의 수련을 한 사람이라면 굳이 소스를 볼 필요도 없겠지요.
소스의 공개에는 그 만한 책임도 따라야 하는 법입니다. 일정 수준 이상의 품질을 유지하여야 하고, 상식적인 수준은 상회하는 문서를 제공하여야 하고, 피구독자들과 지속적인 피드백을 유지하여야 하는 것 등은 그 중에서도 기본에 속하는 책임일 테지요.
물론 공개에 따른 책임을 지는 것은 쉬운 일이 아닙니다. 상당한 양의 시간과 정성을 쏟아 부어야 할 일이지요. 그래서 많은 유능한 개발자들이 소스 공개를 꺼리는지도 모르겠습니다.
저 역시도 솜이슬의 소스를 공개할 생각을 하자 아득한 생각이 듭니다. 소스를 원하는 분들이 진짜로 필요로 하는 것은, 소스 자체가 아니라 소스가 구현하고 있는 로직이나 이론일 것 입니다. 그것이 고기 잡는 방법이지요.
욕심 같아서는 이 소스에 들어 있는 고기 잡는 방법에 대해서 아주 찬찬히 설명을 드리고 싶습니다. 당장은 여러가지 현실적인 제약 때문에 힘들고 언젠가는 만족할 만한 친절한 설명을 준비하겠다고 약속을 드리고도 싶지만, 사람 일은 알 수 없는 법이지요.
지금은, 솜이슬의 소스를 보기 위해서 최소한으로 필요한 사항들에 대해서만 몇 가지 간략히 말씀드리도록 하겠습니다.
제가 언급하는 각각의 기술 중 잘 모르는 부분이 있으면 반드시 신뢰할 만한 텍스트를 구해서 익히시기 바랍니다. 세상에는 훌륭한 어부 들이 셀 수 없을 만큼 많이 있습니다. 어떤 어부에게서 고기 잡는 방법을 배우느냐는 정말 중요한 문제입니다.
(그런데 재미있게도 일정 수준 이상의 어부들은 대부분 한국어를 하지 못합니다. 그런 분들에게 지식을 배우기 위해서는 반드시 영어를 먼저 공부해야 하구요. 잘 만들어진 영어 단어장이 있으면 영어 공부하기가 좀 더 효율적일 것 입니다. 이것이 바로 솜이슬이 만들어진 배경 입니다. 그래서 솜이슬을 개발자를 위한, 개발자에 의한, 개발자의 단어장이라고 하는 것이지요.^^)
Visual Studio 2008이 설치되어 있어야 합니다.
Target Framework이 2.0에 맞추어져 있기 때문에 VS 2005를 사용하여도 무방하나, sln 파일과 csproj 파일의 스키마가 달라서 VS 2005에서는 솔루션과 프로젝트가 열리지 않습니다. 또한 VS 2008 Express는 아래 What's New in DXperience v2007 vol 3가 설치되지 않기 때문에 사용할 수 없습니다.
DXperience v2007 vol 3 (평가판 다운로드)가 설치되어 있어야 합니다.
같은 v2007 vol 3 버전이더라도 빌드 넘버가 다르다면 DXperience v2007 vol 3에 포함된 Project Converter를 사용하여 어셈블리의 버전을 맞춰주어야 합니다.
데이터 컨테이너로 DataSet을 사용하지 않습니다.
DataSet이 유용한 경우는 생각 보다 적습니다. 대부분의 경우에는 비즈니스 엔터티와 커스텀 컬렉션을 사용하는 것이 현명한 방법일 것 입니다. (물론 여기에 대해서는 이견이 많으며, 이는 어디까지나 제 생각이라는 것을 말씀 드립니다.)
스토리지는 DB 대신 비즈니스 엔터티를 압축하고 직렬화 해서 파일에 저장합니다.
닷넷 프레임웍의 직렬화는 그 성능과 생성되는 데이터의 크기에 있어서 많은 문제를 가지고 있습니다. 이에 대해서 많은 개발자들이 나름의 해법을 제시하고 있습니다. 특히 이 아티클은 그 중에서도 단연 백미라고 할 수 있겠습니다.
솜이슬에서는 상당한 양의 데이터를 가지고 테스트 해 본 결과, 제가 걱정했던 수준 보다는 훨씬 빠르고 데이터의 크기가 작았습니다. 따라서 솜이슬에서는 닷넷 프레임웍의 직렬화를 그대로 사용합니다.
MultiDictionary, OrderedSet 과 같은 닷넷 프레임웍 베이스 클래스 라이브러리에서 제공하지 않는 몇 가지 자료구조를 사용합니다.
솜이슬에서는 Wintellect 사가 제공하는 PowerCollection을 사용하고 있습니다만, 만일 자료구조의 성능이 주요 이슈라면 C5 Generic Collection Library를 사용하실 것을 권장합니다. 어쨌거나 MultiDictionary와 같은 자료구조를 직접 만드는 짓 만은 하지 않아야지요. 오죽 하면 "수레바퀴를 재발명하지 마라"는 영어 속담이 있겠습니까.
거의 모든 로직이 MVC 패턴 기반으로 이루어져 있습니다.
특히 많은 양의 이벤트가 만들어져 있는데요. 이벤트에 관해서는 제가 써 놓은 졸고를 보셔도 좋을 것 같습니다.
표준 닷넷 명명 가이드라인을 따랐습니다.
한 가지 예외는 멤버 변수에 "_" 접두어를 붙이는 것입니다. this.memberFiled = memberFiled 보다는 _memberFiled = memberFiled 가 저는 좀 더 편리한 것 같습니다.
소스는 아래 링크에서 다운로드 받을 수 있습니다.