Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

갑작스러운 C# 프로젝트

어쩌다가 .NET 기반으로 C# 프로그래밍을 하게 됐다. 별걸 다하네. 뭐 C++ 이나 Java(:12)와 비슷하지 않겠는가 ? 어디선가 특히 Java와 비슷하다고 했던 것 같고, 언뜻 살펴보니 정말 그런 것 같다. 허니 문법이야 프로젝트 진행하면서 살펴보면 될테고, 중요하다고 생각되는 아래의 것만 확인해 볼 생각이다.
  1. 클래스 스팩
객체지향 프로그래밍 언어라고 한다. 자바랑 비슷하다고 하던데, 특징을 살펴봐야 할 것 같다.
  1. 멀티 스레드
뭐 기본이겠지.
  1. 네트워크 지원
나는 네트워크 프로그래머니까. 네트워크 지원사항을 알고 있어야 겠지.
  1. 파일 제어
모든 프로그래밍의 기초 파일 제어
  1. IPC
  2. 데이터베이스
자바에 JDBC가 있으니, 얘도 나름대로의 인터페이스가 있겠지. 사용자 애플리케이션을 만들 일은 없을 것 같으니 GUI쪽은 신경쓸 필요가 없을 것 같고.

mono

전 리눅스 개발자입니다. VirtualBox(:12)같은 개인화 도구를 이용해서 윈도우 환경에서 개발할 수도 있긴합니다. 실제로 이렇게 개발을 하기도 하지만, 개발 운영체제의 환경 차이가 개발 능률에 끼치는 영향을 무시할 수가 없죠.

가능하면 모든 개발을 리눅스 환경에서.. 그래서 mono를 생각하게 됐습니다. 몇년 전부터 관심만 가지고 있었는데요. 직접 사용을 고려하게 됐네요.

.Net 호환

.Net은 오픈 프레임워크가 아닙니다. mono 프로젝트는 .Net의 공개 스팩을 보고 이를 구현한 걸로 아는데요. 때문에 .Net을 어느 정도 지원하는지가 중요할 수 밖에 없습니다. 2011년 7월 21일 mono 2.8을 기준으로 지원 범위는 다음과 같습니다. .Net 4.0을 기준으로 했습니다.
  • C# 4.0 : 지원
  • ASP.NET 4.0 : 지원
  • ASP.Net MVC 1 and MVC 2 : 지원
  • System.Numerics
  • Managed Extensibily Framework : 지원
  • Dynamic Language Runtime : 지원
  • Client side OData : 지원
  • Paralle Framework and PLINQ : 지원
  • CodeContracts : 부분지원, API Complete, partial tooling
  • EntityFramework : 미지원
  • --Server-sid OData : 미지원--
.Net은 경험이 없어서 뭔가 모르는 기술들이 잔뜩이지만 여튼 주요한 기술의 대부분은 지원하는 것 같습니다. 실제 mono 개발자들의 경험을 듣고 싶은데, 문서가 그리 많지 않네요. 좀 찾아봐야 겠습니다.

IDE

eclipse(:12) 느낌의 Monodevelop라는 IDE를 제공합니다. 윈도우의 vs에 비해서 개발 환경이 어떤지는 잘 모르겠습니다. vs를 깊이 사용해본적은 없어서요. vi로 주로 개발을 해오던 처지이니, 뭐 저한테야 좋아보이긴 합니다. svn(:12)도 지원하고 코드 브라우징, 자동완성, 도움말 기능도 좋아 보이고. 이정도면 저한테는 충분하니까요.
보낸 사람 Linux

간단 테스트

그렇다면 mono로 개발한 프로그램은 윈도우에서도 바로 사용할 수 있어야 겠죠 ? 당연히 그렇겠지만 테스트를 해보고 싶어서 hello world 코드를 만들었습니다. 컴파일 했더니 hello.exe가 생기는 군요. 리눅스에서 .exe 파일을 보니까 좀 쌩뚱 맡기는 합니다. 실행이 안될 것 같은 느낌이 든다고 해야 하나.
using System;

class MainClass
{
    public static void Main (string[] args)
    {
        Console.Write("What is your name ? : ");
        Console.Write("Hello {0}\n", Console.ReadLine());
    }
}
하지만 실행이 되는 군요. 괜히 신기하다는 느낌이 듭니다.

그다음 VirtualBox로 띄운 윈도우로 복사해서 테스트를 해봤더니, 역시 잘 실행되는 군요. 정말 신기합니다. Java와 비슷하다고 보면 그닥 신기할게 없다고 할 수도 있겠지만 전 신기했습니다. 아니 신선하다는 느낌이 더 정확하려나.

공부

C#

공부는 C#에 대한 건데요. 어차피 언어는 다 비슷비슷 한거라고 생각되니, 위에서 언급한 기술들을 대상으로 공부를 해볼 생각입니다.

.NET vs Java

.NET 프레임워크에 대해서 좀 알아봐야 할 것 같습니다. 비슷한 Java와 함께 살펴보면 도움이 될 것 같네요. wikipedia에 친절하게 설명돼 있습니다.

그냥 요약하자면

라이센스

Java Java 플랫폼은 OpenJDK라고 불리는 오픈소스 구현물이 있습니다. 자유롭게 사용할 수 있다는 얘기죠. Java 이름에 대한 라이센스는 Sun이 가지고 있구요. Oracle이 Sun을 인수한 마당에 Oracle의 트레이드마크가 됐습니다. 현재 Sun Java 와 호환되는 클래스 라이브러리와 컴파일러 중 가장 주목받는 것은 GNU ClasspathGCJ이구요. 이름에서 알 수 있듯이 오픈소스입니다.

SUN은 2007년 5월 8일에 클래스 라이브러리의 소스코드를 GPL로 공개해 버렸으니, 자바 사용과 관련된 라이센스는 종결됐다고 볼 수 있을 것 같습니다.

.NET 마이크로소프트의 .NET CLI executable environment 과 이에 관련된 클래스 라이브러리들은 자유롭게 구현가능하도록 표준 스팩이 공개돼 있습니다. 이를 가지고 Mono와 DotGNU 같은 구현물이 만들어 졌구요. Mono 프로젝트는 마이크로소프트의 다른 라이브러리들까지 구현을 했습니다.

관심있는 것은 .NET 구현물인 Mono가 어떤 제한을 가질 수 있느냐는게 되겠죠. 이에 대한 내용은 http://www.mono-project.com/Licensing 를 참고하시기 바랍니다.

요약하자면,
  • C# 컴파일러는 GPL과 MIT/X11 듀얼 라이선스 정책을 따른다.
  • 관련 툴들은 GPL을 따른다.
  • runtime 라이브러리는 LGPL 2.0을 따른다.
  • class 라이브러리는 MIT X11을 따른다.
  • ASP.NET MVC, MEF, DLR, ASP.NET AJAX, System.Numerics 등등은 마이크로 소프트웨 듀얼라이선스 정책을 따른다 입니다.
오픈소스 진영에서 걱정하는 것은 Mono 프로젝트의 구현물이 마이크로 소프트웨 특허를 침해하므로써 분쟁이 생길 수 있다는 것에 있습니다. 리차드 스톨만 박사는 특허 문제를 떠나서, .NET과 같은 폐쇄 코드에 종속적인 프로젝트는 오픈소스 진영에 이롭지 않다고 주장을 하고 있죠. 위 라이센스 문서를 참고하시기 바랍니다. 이래 저래 복잡스러워서 좀더 살펴보고 정리해야 할 것 같습니다.