닷넷 및 모노에 관하여
이번에 외부 프로젝트로 윈도우용 GUI 어플리케이션을 개발하게 되었습니다.
툴은 볼랜드 디벨로퍼 스튜디오를 쓰야 한다고 합니다만, 어쨋건 SI일이니깐 제 입맛대로만 결정할 순 없고 고객편의성과 확장성, 유지보수성을 최우선으로 생각해야 할 것 같습니다.
그래서, 상세한 개발 프레임웍을 결정하기 전에 사전조사를 한 바.. 여러분의 의견도 듣고 싶습니다.
1. Borland Develop Studio
이 제품은 이전에 쓰본적은 없지만, 살펴보니 델파이, C++, C# 의 언어를 사용할 수 있고 시스템 바이너리 및 닷넷용 바이너리를 생성할 수 있는 UML, 이슈트래킹, 요구분석툴까지 같이 아우르는 통합 개발 IDE 더군요.
뭐,,가장 속편하게 그냥 생각한다면 이놈을 이용해서 C++이나 C#으로 개발하는것이 정답이긴 하겠지만..웬만하면 리눅스에서 모든 작업을 하는편이라서 다른 방법도 검토해보고 있습니다. 단, 고객에겐 프로젝트 완성후에 이 개발툴을 제공해주기 때문에 제가 개발했던 환경과 무관하게 이 툴에서 유지보수가 되어야 하는것을 전제로 합니다.
일단, 어차피 이 개발플랫폼이 닷넷용 개발을 주 타겟으로 나온것이니만큼 Language independent 한 닷넷용 어플리케이션을 생성하는것이 향 후 유지보수측면에서 다양성을 수용하기 좋을것 같습니다. 따라서 닷넷용 어플리케이션으로 생성할것은 정했습니다
두번째로, 그렇다면 C++과 C#중에서? C#으로 (고객의 특별한 이의가 없다면) 할것도 정했습니다. 이유는, C++보다는 개발자의 오류나 코드의 안정성에 있어서 좀더 언어차원에서 설계가 잘된 C#이 여러 다양한 수준의 개발자들을 데리고 하는 이번 프로젝트에서 보다 안정적이고 유지보수가 쉬운 소스를 생성할 수 있다고 판단하기 때문입니다.
그렇다면 그냥 이 툴로 하면 되지 않겠나? 하고 생각할 수 있겠지만 저는 Mono 플랫폼 + MonoDevelop (or Eclipse+plugin) 의 개발환경도 고려하고 있습니다.
모노 프로젝트에서도 C#용 컴파일러를 제공하니 소스호환성은 될 것이고 쟁점은 GUI 툴킷이 될 것 같습니다. 통합 개발환경 및 팀 개발을 위해서도 그냥 볼랜드 제품의 통합환경을 쓰느냐, 다른 오픈소스들의 조합을 쓰느냐가 쟁점이겠네요.
2. GUI Toolkit (or Widget)
상기 1번에서 결국 쟁점은 어떤 구이 툴킷을 쓰느냐에 따른 개발환경의 선택 그리고, 소스관리, 이슈관리, UML, 도큐멘테이션, 등 전체 개발프레임웍을 볼랜드 통합환경으로 가느냐, 아니면 내가 좋아하는(?) 오픈소스 조합으로 가느냐가 있겠네요. 하지만 제가 판단하는기준은 제가 좋아하고 아니고는 아니구요, 프로젝트 산출물의 확장성, 소스 유지보수성, 고객의 편이성, 팀개발의 시너지, 좋은 개발방법론 등 공공의 최선을 추구합니다.
일단 볼랜드 제품으로 한다고 봤을땐 볼랜드사의 크로스 플랫폼 구이 툴킷인 CLX와 닷넷 종속적인 WinForm이 있겠네요. CLX는 QT기반인데 그것을 볼랜드 VCL API로 랩핑한것으로 압니다.
모노 기반에서는 GTK++에 기반한 GTK#을 사용합니다만..사실상 이 프로젝트의 저희가 사용하게 될 프로젝트라면 mono+C#+GTK# 으로 하게 될것 같군요. 그렇다면 cross platform + cross language 가 되겠지요.
헌데 이 GTK#을 고객입장에선 어떻게 바라볼 것인가가 좀 문제가 될 것같긴 하구요..굳이 볼랜드 제품을 납품까지 하면서 GTK#으로 만들어놓으면 좀 말들이 나오긴 하겠죠..
mono에서 WinForm 2.0 API도 어느정도(?) 지원을 하고 있던데 어느정도까지 완성도가 있는지 잘 모르겠습니다.
3. 정리
두서없이 쓰내려갔는데요 정리를 해보자면 이렇습니다.
- 볼랜드 크로스 플랫폼 라이버러리인 CLX를 리눅스의 모노 개발환경에서 잘(?) 쓸 수 있는가? GUI 개발툴이 있는가? 현재 monodevelop와 연동되는 Stetic 을 이용해서 구이로 GTK#을 설계할수 있는데..CLX를 이같이 쓸 수 있을련지?
- 이클립스의 C#플러그인으로 3가지 정도가 있던데요..아직 버젼들이 그다지 높진 않던데..혹 쓰보신 분들 계시면 어떤지 궁금합니다. 또한 위의 Stetic혹은 CLX 혹은 모노용 WinForm 설계할 수 있는 구이툴도 제공되는것이 있는지...
- 반대로 윈도우에서 GTK#을 이용해서 구이 설계를 하는 툴이 있는지요? 이클립스 플러그인을 포함해서 말이지요.
음, 아무래도 무게 중심은 볼랜드 제품 + C# + CLX (or WinForm) 으로 가게 될 것 같긴하네요. 전 가능하면 모든 개발을 리눅스+이클립스+오픈소스 환경으로 구축하는 편이라서 좀 그렇긴 하지만.. 그래도 소스관리 및 이슈트래킹은 SVN+Trac으로 할 공산이 큽니다. UML은 툴과 통합된것을 쓰는것이 좋겠지요.
어쨌건, 프로젝트의 개발 환경과 무관하게 제 개인적인 개발환경은 가능하면 리눅스+이클립스에서 하고 싶은데 C# 컴파일이야 모노를 깔면될터이고 구이 툴킷으로 GTK#을 쓰기엔 현 상황에서 좀 무리수인듯하고, CLX나 WinForm인데 MonoDevelop를 안쓰고 이클립스를 쓰는 상황에서 적절한 구이 플러그인이 있는지 모르겠군요. 없으면? 그냥 코딩하면서 실행해보고 눈으로 확인하는수 밖에 없긴한데 구이 코딩이 텍스트로 할땐 노가다적인 부분이 많더군요..
어쨌건, 다양한 의견 바랍니다.
WinFrame은 WinForm을
WinFrame은 WinForm을 얘기하는 듯 하군요. .NET기반이라면 WinForm으로 가야할 듯 합니다.
볼랜드 개발환경을 써달라는 얘기는 델파이 컴포넌트를 사용해 달라는 얘기인듯도 하구요.
고를수 있다면 그 둘중에 하나를 골라야 하는 상황이 아닌가 합니다만...
굳이 리눅스에서 개발하고 싶다면 Kylix 말고는 대안이 없어보입니다.
아! 네 WinForm
아! 네 WinForm 입니다.
그리고, 델파이를 쓰야할 의무는 없습니다. 닷넷을 해야할 의무가 있는것도 아니구요.
다만, 프로젝트 후 결과물 항목으로 볼랜드 디벨로퍼 스튜디오가 정해져 있다는것 뿐입니다. 따라서, 나중에 클라이언트측에서 그 툴로 소스를 유지보수 할 수 있기만 하면 됩니다..
System.Windows.Forms
System.Windows.Forms를 구현하는 비MS 플랫폼 대체제들의 진행상황은 다음에서 확인가능합니다.
Mono WinForms
http://svn.myrealbox.com/mwf/class-status-System.Windows.Forms.html
DotGNU Portable.NET
http://www.dotgnu.org/pnetlib-status/
개발이 더디고 당장 사용가능한 수준은 아닌 것 같네요.
gtk#은 gtksharp-runtime(용량이 -,.-)도 같이 배포해야하는 단점이 있지만,
리눅스 + Mono에서 개발해서 윈도의 .NET 프레임워크 상에서 실행시킬 수 있는 걸로 알고 있습니다.
댓글 달기