Linux + .NET2014. 8. 11. 09:35

업데이트: mono 3.8이 9월 초에 새로 릴리즈되었으며 이 내용을 기초로 새로 업데이트한 아티클을 올렸습니다.

이 블로그 포스트의 내용은 아래 두 블로그 포스트의 내용을 기초로 작성한 것임을 말씀드립니다.
•http://graemechristie.github.io/graemechristie/blog/2014/05/26/asp-dot-net-vnext-on-osx-and-linux/
•http://www.rocko.me/install-mono-3-4-ubuntu/

또한 이 블로그 포스트는 MS Azure Virtual Machine과 Ubuntu Server 14.04 버전을 최초 설치했을 때의 상태를 기준으로 작성된 것이며, 이 블로그 글을 작성하는 2014년 8월 현재 ASP.NET vNext가 정식 출시 전임을 말씀드립니다.

주의: 실제 배포 환경에서 이 블로그 포스트의 내용을 활용하시는 것은 매우 위험합니다.

 

 

ASP.NET vNext는 기존의 System.Web 기반의 레거시 웹 개발 프레임워크에서 탈피하고자 하는 MS의 강력한 의지의 결과물인듯 합니다. 이전에는 상상하기 어려웠고, MS의 손이 아닌 오픈 소스 그룹 (Mono의 System.Web 구현)이나 써드 파티 회사 (Grasshoper 같은)에 의한 제한적인 수준의 작업 결과물일 뿐이었던 ASP.NET의 이식성이 이제서야 완벽함을 기할 수 있게 되었습니다.

이 블로그 포스트에서는 ASP.NET vNext를 우분투 서버 14.04에서 설치해본 과정을 기록하여 그것을 토대로 작성하였습니다. ASP.NET vNext의 발전 가능성을 살펴보시고, 여러 이야기를 나눌 수 있지 않을까 하여 기록해봅니다.

사전 준비 작업

ASP.NET vNext는 Windows 서버 환경에서는 손수 기존에 설치된 .NET Framework를 대체하는 K Runtime을 사용하여, 어느 버전의 K Runtime을 사용할 것인지 패키지 레벨에서 정의할 수 있는 것이 특징이었는데, 리눅스의 경우 기본 실행 엔진은 현재는 Mono를 기반으로 하고 있는 것이 특징입니다. 그럼에도 불구하고 K Runtime이 가지는 영역이 엄연히 있고, 아마 핵심 실행 엔진만 현재는 Mono를 기반으로 실행되는 것 같습니다.

그런 이유로 Mono의 최신 버전을 시스템에 설치해야 하는데, 안타깝게도 Ubuntu 14.04에 등록된 Mono 패키지의 최신 버전은 ASP.NET vNext를 실행하기 위해 필요한 버전과 격차가 상당히 크고, 또한 지원되지 않습니다. 그래서 제일 먼저 해야 할 일은 github에 올라와있는 Mono 소스 코드를 내려 받아 컴파일하고 새 버전으로 바꾸는 작업입니다.

우선은 기존에 Mono 런타임을 설치했던 이력이 있을 경우를 고려하여 Mono와 관련된 모든 패키지를 제거해야 하는데, 아래 명령어로 간단히 제거할 수 있습니다.


sudo apt-get -y purge mono-*

그 다음, Mono를 설치하기 위하여 필요한 이미징 라이브러리 관련 종속성을 해결해주어야 하는데, 필요한 패키지들중 상당수는 Ubuntu 14.04에서 직접 지원하지 않거나 오래된 버전으로 취급하여 apt-get으로 직접 설치가 어려운 패키지들입니다. 따라서, 이들 패키지들을 수동으로 내려 받아 설치하는 작업이 필요한데, 아래 명령어를 복사하여 하나씩 실행하시면 되겠습니다.


wget http://security.ubuntu.com/ubuntu/pool/main/j/jbigkit/libjbig0_2.0-2ubuntu1.13.10.1_amd64.deb
 wget http://security.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8_1.3.0-0ubuntu1.1_amd64.deb
 wget http://mirrors.kernel.org/ubuntu/pool/main/libj/libjpeg8-empty/libjpeg8_8c-2ubuntu8_amd64.deb
 wget http://mirrors.kernel.org/ubuntu/pool/universe/t/tiff3/libtiff4_3.9.7-2ubuntu1_amd64.deb
 wget http://mirrors.kernel.org/ubuntu/pool/universe/t/tiff3/libtiffxx0c2_3.9.7-2ubuntu1_amd64.deb
 wget http://mirrors.kernel.org/ubuntu/pool/main/libj/libjpeg8-empty/libjpeg-dev_8c-2ubuntu8_amd64.deb
 wget http://security.ubuntu.com/ubuntu/pool/main/j/jbigkit/libjbig-dev_2.0-2ubuntu1.13.10.1_amd64.deb
 wget http://security.ubuntu.com/ubuntu/pool/main/libj/libjpeg-turbo/libjpeg-turbo8-dev_1.3.0-0ubuntu1.1_amd64.deb
 wget http://mirrors.kernel.org/ubuntu/pool/main/libj/libjpeg8-empty/libjpeg8-dev_8c-2ubuntu8_amd64.deb
 wget http://mirrors.kernel.org/ubuntu/pool/main/libj/libjpeg8-empty/libjpeg-dev_8c-2ubuntu8_amd64.deb
 wget http://mirrors.kernel.org/ubuntu/pool/universe/t/tiff3/libtiff4-dev_3.9.7-2ubuntu1_amd64.deb

sudo dpkg -i libjbig0_2.0-2ubuntu1.13.10.1_amd64.deb
 sudo dpkg -i libjpeg-turbo8_1.3.0-0ubuntu1.1_amd64.deb
 sudo dpkg -i libjpeg8_8c-2ubuntu8_amd64.deb
 sudo dpkg -i libtiff4_3.9.7-2ubuntu1_amd64.deb
 sudo dpkg -i libtiffxx0c2_3.9.7-2ubuntu1_amd64.deb
 sudo dpkg -i libjbig-dev_2.0-2ubuntu1.13.10.1_amd64.deb
 sudo dpkg -i libjpeg-turbo8-dev_1.3.0-0ubuntu1.1_amd64.deb
 sudo dpkg -i libjpeg8-dev_8c-2ubuntu8_amd64.deb
 sudo dpkg -i libjpeg-dev_8c-2ubuntu8_amd64.deb
 sudo dpkg -i libtiff4-dev_3.9.7-2ubuntu1_amd64.deb

Mono 최신 버전 설치하기

이제 기본 준비 작업은 끝났고, 필요한 패키지들을 한꺼번에 설치할 차례입니다. 아래 명령어를 입력하도록 합니다.


sudo apt-get -y install libpng3 libpng3-dev libtool libexif12 libexif-dev libgif4 libgif-dev libpango1.0-dev libatk1.0-dev libgtk-3-0 libgtk-3-dev bison automake autoconf make gcc gtk-sharp2 build-essential xorg-dev libfreetype6 libfontconfig libfontconfig-dev gettext libglib2.0-dev git libjpeg-dev libjpeg8-dev libjpeg-turbo8-dev g++ unzip

쉬운 설명을 위하여, 사용자 프로필 디렉터리에서 설치를 진행한다고 가정하겠습니다.


cd ~

설치가 모두 되고 나면, mono git 리포지터리에서 libgdiplus 소스를 복사합니다.


git clone https://github.com/mono/libgdiplus.git

받은 소스 디렉터리로 이동합니다.


cd ~/libgdiplus

그리고 각종 설정 검사 및 헤더 구성을 진행합니다. 주의할 것은 공식 가이드에서는 –prefix=/usr/local로 소개하고 있으나 우분투의 경우 아래와 같이 /usr을 기준으로 잡아야 합니다.


./autogen.sh –prefix=/usr

구성이 끝나면 컴파일을 하도록 합니다.


make

컴파일 중 특별한 오류 메시지가 없었다면 시스템에 설치하도록 합니다.


sudo make install

이제 다시 홈 디렉터리로 이동합니다.


cd ~

mono 소스를 컴파일하는 과정 중에는 재귀적으로 mcs 컴파일러가 필요합니다. 이를 위하여 mono-gmcs 패키지를 구 버전이지만 우선 설치해야 합니다.


sudo apt-get -y install mono-gmcs

설치가 끝나면, 이제 mono 소스를 복사하도록 합니다.


git clone git://github.com/mono/mono.git
 cd mono

libgdiplus 때와 마찬가지로 prefix 설정에 유의하여 자동 구성을 진행합니다. 자동 구성 중에 다른 git 리포지터리에서 추가로 관련된 소스를 내려받기도 합니다.


./autogen.sh –prefix=/usr

모든 구성이 끝나면 컴파일하고 설치하도록 합니다.


make
 sudo make install

모든 설치가 다 끝났다면, 새 버전 (2014년 8월 현재 3.8)으로 업데이트가 잘 되었는지 확인해보도록 합니다.


mono –version
 mcs –version

위의 명령어에서 새 버전으로 표시가 된다면 ASP.NET vNext를 설치할 준비가 다 끝난 것입니다. 이제 다시 홈 디렉터리로 이동합니다.


cd ~

계속 하기 전에, 라이브러리 경로에 관련된 환경 변수를 하나 설정해주는 것이 좋습니다. 아래 명령어를 실행하여 LD_LIBRARY_PATH 환경 변수를 설정하도록 합니다.


export LD_LIBRARY_PATH=/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH

K Runtime과 ASP.NET vNext 설치하기

이제 중요한 부분이 남았습니다. K Runtime과 ASP.NET vNext를 설치하는 것이 남았는데, 앞의 과정보다 시간도 짧게 걸리고 비교적 쉽습니다.

ASP.NET vNext의 전체 소스 코드를 복사하지 않고 필요한 셸 스크립트 파일인 kvminstall.sh 파일만 가져오도록 합니다. 아래 명령어를 홈 디렉터리에서 실행합니다.


curl https://raw.githubusercontent.com/aspnet/Home/master/kvminstall.sh | sh

경로 설정을 맞추기 위하여, 아래 명령어를 실행합니다.


source ~/.kre/kvm/kvm.sh

이제 KVM을 사용자 프로필 디렉터리 아래의 .kre 폴더에 설치하기 위해, 다음 명령어를 실행합니다.


kvm upgrade

기본적인 실행 환경이 준비되었고, K Package Manager (달리 표현하면 K Package Manager의 실행을 담당하는 Mono)가 통신해야 할 사이트들의 HTTPS 인증서를 추가한 다음, 시스템에 설치된 루트 인증서를 가져올 수 있도록 하기 위하여 아래 명령어들을 실행합니다. 확인 프롬프트가 나타나면 여러번 yes를 입력하여 모든 필요한 인증서 및 인증서 체인을 가져오도록 합니다.


sudo certmgr -ssl -m https://go.microsoft.com
 sudo certmgr -ssl -m https://nugetgallery.blob.core.windows.net
 sudo certmgr -ssl -m https://nuget.org
 sudo certmgr -ssl -m https://myget.org
 mozroots –import –sync

Hello, World! 찍어보기

모든 설치가 끝났습니다. 예제 소스 코드를 가져와서 실행하기 위하여, David Fowler님의 github 리포지터리에 올라와있는 ASP.NET vNext 샘플을 이용하도록 하겠습니다. 공식 웹 사이트에 있는 샘플은 HTTPAPI를 기반으로 하는 것이어서 Nowin Factory로 교체하여 실행할 수 있지만 쉬운 설명을 위해 David Fowler님의 예제를 가져와서 대신 설명함을 말씀드립니다.

홈 디렉터리로 이동합니다.


cd ~

그리고 아래 명령어를 실행하여 콘솔 프로젝트 샘플 소스를 복사합니다.


git clone https://github.com/davidfowl/HelloWorldVNext.git

해당 디렉터리로 이동하여 다음 순서대로 명령어를 입력하여 Hello World! 메시지가 나타나는지 확인합니다.


cd ~/HelloWorldVNext/src/helloworld
 kpm restore
 k run

여기서 kpm restore 명령은 해당 예제를 실행하기 위하여 필요하다고 project.json에서 명시한 NuGet 패키지들을 전부 시스템에 설치하는 과정을 포함하며, 최초 한 번만 실행하면 됩니다. 그리고 k run 명령은 project.json 또는 그 상위에 정의되어있는 run 명령어를 실행한다는 의미이며, 보통 run 명령어는 재정의하지 않는 한 Main 메서드를 찾아 실행하는 것과 의미가 같습니다.

받은 프로젝트 디렉터리 상의 파일을 보면 흥미로운 것이, 이전처럼 mcs (gmcs)를 호출하여 exe 파일을 만들지 않았는데도 소스 상태에서 바로 k run이라는 명령어를 넣으면 프로그램이 시작된다는 점입니다. 이런 방식의 닷넷 응용프로그램은 웹 환경에서 큰 강점을 발휘하게 될 것입니다.

ASP.NET vNext 샘플 웹 프로젝트 띄워보기

이제 핵심입니다. ASP.NET vNext 샘플 웹 프로젝트를 띄워볼 차례인데, 다음과 같이 명령어를 입력하도록 합니다. 물론, 진행의 편의를 위해 홈 디렉터리에서 실행하는 것이 좋겠습니다.


git clone https://github.com/davidfowl/HelloWorldVNext.git
 cd ~/HelloWorldVNext/src/helloworldweb
 kpm restore
 k web

예제에 같이 들어있는 Nowin Factory 프로젝트의 코드를 보면 TCP/5000 포트를 웹 리스너 포트로 사용하고 있습니다. 밖에서 호스트 이름과 함께 5000번 포트로 접속하면 웹 페이지가 나타나는 것을 볼 수 있습니다. 그리고 서버를 종료하려면 콘솔에서 아무 키나 누르면 종료가 됩니다.

만약에 원격에서 좀 더 지속적으로 서버의 성능을 측정해보고 싶으시다면 screen 유틸리티를 사용하여 세션을 분리하신 상태에서 위의 명령어를 입력하고, 서버가 떠 있을 때 Ctrl 키를 누른 상태에서 빠르게 a, a, d 키를 누르면 세션이 분리되어 계속 살아있는 서버가 만들어집니다. 이 상태에서 Apache Bench (AB)등의 유틸리티를 사용하여 부하 테스트 등을 해보시는 것도 의미가 있을 것입니다.

참고로, NAT 환경이나 퍼블릭 클라우드 환경에서는 대표 IP 주소에 대한 외부 방화벽 설정을 열어주셔야 밖에서도 접속이 가능합니다.

마무리

아직 ASP.NET MVC 6나 다른 기술들이 완전히 준비된 것은 아니지만, 이 정도만 하더라도 ASP.NET은 더 이상 윈도 OS 안에서만 사용 가능한 기술이 아니라는 것을 증명하는데에는 손색이 없을 것입니다. 더 많은 가능성과 잠재력을 포함하는 최신 기술이 곧 나타나게 될 것이 무척 기대가 됩니다.

만약 기존에 ASP.NET 웹 사이트를 개발해 놓은 것이 있다면, ASP.NET vNext로 프로젝트를 마이그레이션하면서 플랫폼에 중립적으로 동작하는 코드로 업데이트하는 프로젝트를 한 번 진행함으로서 그리 어렵지 않게 멀티 플랫폼으로 ASP.NET 웹 응용프로그램을 포팅하실 수 있을 것입니다.

앞으로 더 자세한 정보와 상세한 내용들, 그리고 활용 방안들도 블로그 포스트로 전할 수 있도록 하겠습니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2013. 10. 20. 22:30

Windows Azure의 Virtual Machine 서비스는 Windows와 Linux를 Guest OS로 지원하는 전형적인 IaaS 플랫폼입니다. 그리고 Linux는 다양한 오픈 소스 소프트웨어와 결합할 수 있는 매우 이상적인 소프트웨어 개발 환경이기도 합니다.

Linux에서 사용할 수 있는 매력적인 소프트웨어들 중 최근 큰 주목을 받고 있는 프로젝트로 docker 프로젝트가 있는데, 이 프로젝트는 기본적으로 Hypervisor 없이 Linux 실행 환경을 가상화하고 서로 격리된 상태로 실행할 수 있도록 도와주는 Linux Container (LXC)를 조금 더 실용적이고 사용하기 편리하게 만들어주는 컴패니언 소프트웨어로, 이미지를 공유하거나, 이미지로부터 생성하는 컨테이너를 만들기 위해 필요한 명령을 자동으로 등록하거나, 컨테이너를 이미지로 변환하는 등의 작업을 단순화합니다.

docker 프로젝트를 설치하고 사용하는 방법에 대한 가이드는 인터넷 상에 이미 다양한 자료로 게시된 적이 있고, 최근에 열린 NAVER 개발자 행사인 DeVIEW 2013에서도 다루어진 적이 있습니다. (http://www.slideshare.net/modestjude/docker-in-deview-2013)

오늘 살펴보려는 내용은 docker 프로젝트를 Windows Azure Virtual Machine 상에서 설치하고 이용하는 방법과 함께, docker Index에 게시되어있는 최신 버전의 Mono 이미지를 다운로드하고 활용하는 방법을 간단히 살펴보려고 합니다. 지금 소개하는 방법을 통해서 쉽고 빠르게 리눅스 기반의 다중 개발 환경을 손쉽고 빠르게 프로토타이핑할 수 있습니다.

시작하기 전에 - Hypervisor 안에서 또다른 가상 환경을 만드는 것은 불가능하지 않습니까?

docker를 일반적인 PC나 서버 환경이 아닌 곳에서 사용할 때 가장 먼저 드는 의문점이 바로 이것입니다. 기본적으로 Hypervisor 위에서 실행하는 OS는 또 다시 가상 환경을 만들어낼 능력이나 여건이 되지 못합니다. 가능하도록 설정했다고 해도 결국 물리적인 한계에 부딪힐 가능성이 커집니다.

사실, docker는 Hypervisor가 아니기 때문에 Hypervisor 고유의 CPU 기능을 활용하는 일은 거의 없고, 호스트가 되는 리눅스의 커널의 재량에 따라 그 안에서 실행되는 독립적인 프로세스일 뿐입니다. 그러나, 제아무리 docker가 유용하다고 해도, 시스템이나 VM에 할당된 자원의 밀도나 품질을 생각해보았을 때 docker가 실제 처리할 수 있는 작업의 양이 항상 효율적이라고는 할 수 없습니다. 따라서, docker를 사용한 시스템 구축은 전적으로 충분한 시나리오 테스트와 QA를 거쳐야만 함을 염두에 두어야 할 것입니다.

docker로 할 수 있는 일

docker는 단순히 프로세스만을 격리하는 것이 아니라 일정 수준의 가상 환경을 다룹니다. 즉, 자체적으로 이용할 수 있는 파일 시스템, 네트워크 어댑터, 가용 메모리 크기 등이 있고, 상황에 따라 이들 자원의 크기가 동적으로 변화하게 됩니다. 그러나 우리가 일반적으로 사용하는 완전한 Hypervisor와는 다르게 자원을 명시적으로 제한할 수 있는 방법이 2013년 10월 현재 기준으로 특별히 없습니다. 그리고 네트워크는 사설 IP로만 할당되기 때문에, docker가 자체적으로 구성하는 NAT를 이용하여 외부로부터 들어오는 네트워크 요청을 특정 컨테이너 앞으로 도착하도록 연결해주는 것이 꼭 필요합니다.

그럼에도 불구하고, docker는 리눅스 기반의 환경에서 항상 있을 수 있는 파일 시스템, 커널, 잘못된 라이브러리나 패키지 설치로 인한 시스템의 중단으로부터 안전하게 지켜줄 수 있고, 신뢰할 수 있을만한 수준을 제공하면서도, 가볍게 다룰 수 있는 가상 환경을 제공한다는 점에서 큰 주목을 받고 있으며, 심지어 Hypervisor 기반의 실행 환경 위에서 전혀 다른 Linux Guest를 추가 실행할 수 있을만큼 유연합니다.

docker Index (https://index.docker.io/)에 게시된 이미지들을 살펴보면 알겠지만 호스트의 Linux OS와 아무 관련이 없는 busybox 같은 응급 이미지도 존재하고, Ubuntu가 호스트인 시스템에서 CentOS를 컨테이너 OS로도 택하는 것이 가능합니다. 즉, docker 환경에 맞추어 개발된 OS이기만하면 docker와의 상호작용을 전제로 호스트 OS와 완전히 분리된 환경에서 실행이 가능하므로 독립적인 환경 구성이 가능함을 뜻합니다.

docker를 Azure Linux VM 위에 설치하기

docker는 LXC 프로젝트를 기반으로 하기 때문에, 커널 버전에 대한 의존성이 크고, 사용할 수 있는 Host OS의 종류에도 제한이 있습니다. 현 시점에서는 Ubuntu Linux 13.04에서의 실행이 가장 안정적이기 때문에, Windows Azure Virtual Machine 갤러리에서 다음 그림과 같이 Ubuntu Linux 13.04 기반의 VM을 하나 추가해서 시작하셔야 합니다. 만약 Ubuntu Linux 12.04나 12.10 버전을 실행 중인 경우 Secure Shell 터미널 환경을 통하여 원격으로 13.04로 업그레이드하는 명령을 실행할 수도 있지만, libcurse 기반의 UI 실행이 일부 필요하기 때문에 putty 등에서는 정상적으로 보이지 않을 수 있고, 또한 잘못 선택할 경우 VM에 원격 접속이 불가능한 상황이 올 수 있으므로 추천하지 않습니다.

http://manage.windowsazure.com/ 으로 접속하여 새 VM을 갤러리로부터 생성하도록 시작합니다. 아래와 같은 대화 상자가 나타나는지 확인한 후 Ubuntu Linux 13.04를 선택합니다.

 

다음 버튼을 클릭한 다음 기본 VM 설정을 입력합니다.

 

PuttyGen을 이용하여 키 체인을 만들어 업로드하거나, 사용자 암호를 지정하고 다음 버튼을 클릭합니다.

 

클라우드 서비스는 네트워크 연결 및 중재를 위한 기본 단위이자 실행 환경을 정의하는 단위 환경입니다. docker 환경과 연결하려는 클라우드 서비스나 다른 VM이 있을 경우 같이 소속되도록 설정해주시고, 가용성 설정 등을 확인한 다음 다음 버튼을 클릭합니다.

 

기본적으로 SSH 포트가 열려있습니다. 그러나 docker container와의 연결을 허용하고 외부에서 접속을 받아들이려면 Windows Azure의 방화벽 설정도 수정해야 합니다. 외부에서 docker container 서비스로의 접속이 안된다면 이쪽의 방화벽 설정을 꼭 확인하셔야 합니다. 마침 버튼을 클릭하여 VM 생성을 시작합니다.

 

VM의 외부 DNS 주소를 확인하고, putty로 접속을 시작합니다.

 

접속이 완료되었다면 이제부터 명령어 입력을 진행합니다. 설치 가이드의 내용은 http://docs.docker.io/en/latest/installation/ubuntulinux/#ubuntu-raring-13-04-64-bit 에서 발췌하였습니다.

우선 최신 패키지 목록을 가져오기 위하여 다음 명령을 수행합니다. 최신 릴리즈를 사용하여 VM을 만들었다면 별 다른 업데이트는 발생하지 않을 것입니다.

sudo apt-get update

그리고 Ubuntu 13.04 시스템들 중 일부 릴리즈에서 누락되어있을 수 있는 AUFS 파일 시스템에 대한 지원 (LXC 실행을 위해 꼭 필요합니다.)을 추가하기 위하여 아래 명령어를 수행합니다. 참고로 Azure Virtual Machine을 통하여 최신 릴리즈를 사용하도록 VM을 생성했다면 역시 AUFS에 대한 지원이 이미 포함되어있어서 아래 명령어로 시스템에 변화가 발생하지는 않을 것입니다.

sudo apt-get install linux-image-extra-`uname -r`

이제 docker 리포지터리에 접근하여 패키지를 설치할 차례입니다. 우선 키 체인을 다운로드하여 시스템에 등록하여 docker 패키지를 인터넷으로부터 다운로드할 수 있도록 허가합니다.

sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"

OK라는 메시지를 확인하였으면 이어서 리포지터리 목록에 docker 리포지터리를 추가하기 위하여 다음 명령어를 실행합니다.

sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"

이제 패키지 업데이트를 다시 수행하여 사용 가능한 패키지 목록을 갱신합니다.

sudo apt-get update

출력 중에서 다음과 비슷한 메시지가 들어있는지 확인합니다.

Get:3 http://get.docker.io docker/main amd64 Packages [1,395 B]

이제 패키지 목록을 업데이트하였으므로 lxc-docker 패키지가 사용 가능한 상태가 되었을 것입니다. lxc-docker 패키지를 아래 명령으로 설치합니다.

sudo apt-get install lxc-docker

종속 패키지들을 다수 설치해야 함을 알리는 메시지가 나타나면 y 키를 눌러 진행합니다.

설치가 잘 되었는지 확인해보기 위하여 docker Index 사이트로부터 ubuntu 게스트 OS 이미지를 다운로드해보겠습니다. 아래 명령어를 실행합니다.

sudo docker run -i -t ubuntu /bin/bash

아래와 같이 다운로드 메시지가 나타나고 콘솔이 바뀌는 것을 확인하기 바랍니다.

rkttu@dockertest:~$ sudo docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu' (tag: latest) locally
Pulling repository ubuntu
8dbd9e392a96: Download complete
b750fe79269d: Download complete
27cf78414709: Download complete
root@f45ee37cf476:/#

호스트 이름이 Azure VM의 dockertest가 아니라 임의로 작명한 f45ee37cf476이라는 이름으로 바뀐 것을 볼 수 있습니다. 그리고 IP 주소 대역도 다르다는 것을 쉽게 파악할 수 있는데, ifconfig을 비롯한 네트워킹 도구가 이 버전의 이미지에는 들어있지 않기 때문에 다음 명령어를 실행하여 net-tools 패키지를 설치합니다.

apt-get install net-tools

격리 환경 상에서 자동으로 root 권한을 얻었으므로 sudo를 덧붙일 필요가 없습니다. 설치가 끝난 다음, ifconfig eth0 명령을 실행하면 다음과 같이 나타납니다.

eth0      Link encap:Ethernet  HWaddr fa:b2:4f:b9:15:84
          inet addr:172.17.0.2  Bcast:172.17.255.255  Mask:255.255.0.0
          inet6 addr: fe80::f8b2:4fff:feb9:1584/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:192 errors:0 dropped:0 overruns:0 frame:0
          TX packets:81 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:267507 (267.5 KB)  TX bytes:5591 (5.5 KB)

굵게 강조 표시한대로 사설 IPv4 주소가 할당되어있습니다. 그리고 패키지 업데이트와 업그레이드를 진행하여 인터넷 연결 상태를 다시 한 번 확인해봅니다.

apt-get update
apt-get upgrade

가상 환경에서 나가기 위하여 exit 명령을 입력하면 다음과 같이 원래의 Host OS로 프롬프트가 바뀌는 것을 볼 수 있습니다.

root@f45ee37cf476:/# exit
exit
rkttu@dockertest:~$

이제 방화벽 설정을 확인합니다. 기본적으로 Ubuntu는 ufw라는 방화벽 프로그램을 이용합니다. 그리고 Windows Azure 기본 구성 이미지에서는 ufw가 비활성화되어있고, Windows Azure의 방화벽이 외부로부터의 연결을 차단하며, Windows Azure 간 네트워크에는 제한이 없습니다. 아래 명령어를 입력하여 방화벽 상태를 확인합니다.

rkttu@dockertest:~$ sudo ufw status
Status: inactive
rkttu@dockertest:~$

그리고 방금 전 테스트를 위하여 받은 이미지와 그 이미지를 기반으로 실행한 컨테이너가 잘 등록되었는지 확인하여 설치 프로세스를 마무리합니다.

rkttu@dockertest:~$ sudo docker images -a
REPOSITORY          TAG                 ID                  CREATED             SIZE
ubuntu              12.04               8dbd9e392a96        6 months ago        131.5 MB (virtual 131.5 MB)
ubuntu              latest              8dbd9e392a96        6 months ago        131.5 MB (virtual 131.5 MB)
ubuntu              precise             8dbd9e392a96        6 months ago        131.5 MB (virtual 131.5 MB)
ubuntu              12.10               b750fe79269d        7 months ago        24.65 kB (virtual 180.1 MB)
ubuntu              quantal             b750fe79269d        7 months ago        24.65 kB (virtual 180.1 MB)
<none>              <none>              27cf78414709        7 months ago        180.1 MB (virtual 180.1 MB)

rkttu@dockertest:~$ sudo docker ps -a
ID                  IMAGE               COMMAND             CREATED             STATUS              PORTS
f45ee37cf476        ubuntu:12.04        /bin/bash           8 minutes ago       Exit 0

예상한 대로 이미지가 다운로드되어있고, 해당 이미지를 기반으로 /bin/bash 앱에 대한 컨테이너가 생성 후 실행되었으며 종료 코드 0으로 종료되었다는 결과 표가 보입니다.

mono 개발 환경 빠르게 구축하기

mono 개발 환경을 입맛에 맞게 구축하는 방법은 여러가지가 있습니다. 방금 전처럼 base image를 받아서 수작업으로 설치하거나, 그 과정을 서술하는 Dockerfile을 만들어 한 번에 일괄 실행하여 시스템의 설치를 전개하는 방식도 있을 수 있습니다. 그렇지만 docker를 개발 환경으로 이용하기 위해서 취할 수 있는 가장 좋은 방법은 docker Index 사이트에 게시된 최신 이미지를 확인하여 해당 이미지를 직접 로컬 시스템으로 Pull 하는 것입니다.

편의를 위하여 잠시 리눅스 콘솔에서 윈도 화면으로 되돌아온 다음 https://index.docker.io/ 로 접속하여 키워드로 mono를 지정하고 검색합니다.

 

 

Ubuntu 이미지를 이용하여 Mono 3.2.3을 설치하여 배포하는 이미지가 Docker Index에 올라와있습니다. 그 외에도, 닷넷 기반의 SOA 실행 및 개발 환경 구축을 편리하게 할 수 있도록 Service Stack과 연계한 리눅스 이미지도 보입니다. 우리가 사용하려는 것은 rwentzel/ubuntu-mono 이미지이므로 이 이미지의 이름을 기록합니다.

이제 다시 리눅스 콘솔로 되돌아가서 해당 이미지를 로컬 리포지터리로 다운로드하겠습니다. 다음 명령어를 실행하여 동기화를 시작합니다. 해당 이미지는 여러 차례 수정을 거쳐 만들어진 것이기 때문에 다운로드에 다소 시간이 걸리니 조금 오래 기다리셔야 합니다.

sudo docker pull rwentzel/ubuntu-mono

이미지 다운로드가 완료되었다면, 이제 이 이미지를 이용하여 컨테이너를 만들고 정말 안에 mono 개발 환경이 들어있는지 확인해볼 차례입니다. 아래 명령어로 이미지를 우선 확인합니다.

sudo docker images -a

설치한 이미지의 갯수가 매우 많아졌습니다. 그런데 주의할 것이 하나 있습니다. docker rmi 명령으로 이미지를 제거하는 것이 가능하지만, 꼭 필요한 경우가 아니라면 가급적 리포지터리나 TAG가 none으로 설정된 이미지를 임의로 삭제하는 일은 피해야 합니다. 콘솔에서는 잘 드러나지 않지만 이미지는 차이점 보관 방식으로 생성되어있고 일종의 트리 계층을 형성하기 때문입니다. 그래서 docker로 이미지를 만들 때 정말 중요하게 관리되어야 하는 이미지는 REPOSITORY나 TAG에 정확한 속성을 지정하여 쉽게 찾을 수 있도록 해주는 것이 중요합니다.

REPOSITORY             TAG                 ID                  CREATED             SIZE
rwentzel/ubuntu-mono   latest              2e8ec476cfd1        3 weeks ago         12.29 kB (virtual 2.627 GB)
<none>                 <none>              866ee2ba174c        3 weeks ago         12.29 kB (virtual 2.627 GB)
<none>                 <none>              9d58fdd1f145        3 weeks ago         28.67 kB (virtual 2.627 GB)
<none>                 <none>              48d313d93277        3 weeks ago         194.1 kB (virtual 2.627 GB)
<none>                 <none>              a6f3f7d033e8        3 weeks ago         1.151 GB (virtual 2.627 GB)
<none>                 <none>              0063533722a2        3 weeks ago         486.2 MB (virtual 1.476 GB)
<none>                 <none>              563cc9ce1df7        3 weeks ago         43.2 MB (virtual 989.9 MB)
<none>                 <none>              d963202bdca8        3 weeks ago         62.24 MB (virtual 946.7 MB)
<none>                 <none>              fa1d9d247e8a        3 weeks ago         27.46 MB (virtual 884.5 MB)
<none>                 <none>              e01eae29dae1        3 weeks ago         32.86 kB (virtual 857 MB)
<none>                 <none>              eb5606044c61        3 weeks ago         70.23 MB (virtual 857 MB)
<none>                 <none>              519b96c9a701        3 weeks ago         29.08 MB (virtual 786.8 MB)
<none>                 <none>              552c68e56d9a        3 weeks ago         46.38 MB (virtual 757.7 MB)
<none>                 <none>              17f3c8064eb6        3 weeks ago         25.59 MB (virtual 711.3 MB)
<none>                 <none>              0cb9cc3fc7b8        3 weeks ago         144.5 MB (virtual 685.7 MB)
<none>                 <none>              898780b65670        3 weeks ago         12.29 kB (virtual 541.2 MB)
<none>                 <none>              de6790a79ec8        3 weeks ago         158.2 MB (virtual 541.2 MB)
<none>                 <none>              29002fa46318        3 weeks ago         24.58 MB (virtual 383 MB)
<none>                 <none>              270acf4d2474        3 weeks ago         96.52 MB (virtual 358.5 MB)
<none>                 <none>              1d4aaea09576        3 weeks ago         81.83 MB (virtual 261.9 MB)
ubuntu                 12.04               8dbd9e392a96        6 months ago        131.5 MB (virtual 131.5 MB)
ubuntu                 latest              8dbd9e392a96        6 months ago        131.5 MB (virtual 131.5 MB)
ubuntu                 precise             8dbd9e392a96        6 months ago        131.5 MB (virtual 131.5 MB)
ubuntu                 12.10               b750fe79269d        7 months ago        24.65 kB (virtual 180.1 MB)
ubuntu                 quantal             b750fe79269d        7 months ago        24.65 kB (virtual 180.1 MB)
<none>                 <none>              27cf78414709        7 months ago        180.1 MB (virtual 180.1 MB)

위의 rwentzel/ubuntu-mono 이미지를 사용하여 내부에 들어있는 /bin/bash를 컨테이너로 실행하기 위하여 아래 명령을 실행합니다.

sudo docker run -i -t rwentzel/ubuntu-mono /bin/bash

그러면 다음과 같이 프롬프트가 변경되는 것을 볼 수 있습니다.

rkttu@dockertest:~$ sudo docker run -i -t rwentzel/ubuntu-mono /bin/bash
root@f739c613d0ae:/#

이제 간단한 C# 소스 코드를 작성하여 프로그램으로 컴파일하고 잘 작동하는지 확인해보겠습니다. vi를 사용해도 좋고, vi 사용에 익숙하지 않은 경우 아래와 같이 명령을 실행하여 pico/nano 에디터를 추가 설치할 수 도 있습니다.

apt-get install nano

Hello.cs 라는 소스 코드를 원하는 에디터로 아래와 같이 작성합니다.

using System;
using System.Linq;
using System.Collections.Generic;

public static class Program {
        [STAThread]
        public static void Main(string[] args) {
                var count = args.Count();
                List<string> options = args.Where(x => x.StartsWith("-")).ToList();
                Console.Out.WriteLine("Hello, World!");
                Console.Out.WriteLine("Total Args: {0}, Option Args: {1}", count, options.Count);
        }
}

Mono 3.2.3은 LINQ와 제네릭을 모두 잘 지원하므로 위의 코드를 아래와 같이 컴파일하였을 때 문제없이 컴파일이 완료될 것입니다.

mcs Hello.cs

그리고 JVM과 마찬가지로 Mono VM을 실행하여 컴파일한 어셈블리 파일을 실행해봅니다.

root@f739c613d0ae:/# mono Hello.exe
Hello, World!
Total Args: 0, Option Args: 0
root@f739c613d0ae:/# mono Hello.exe a b c
Hello, World!
Total Args: 3, Option Args: 0
root@f739c613d0ae:/# mono Hello.exe a b -c
Hello, World!
Total Args: 3, Option Args: 1

의도한 대로 LINQ와 제네릭을 잘 받아서 처리하고 있습니다.

mono 실행 속도 개선하기

최신 버전의 mono는 실행 속도를 개선하기 위하여 가비지 컬렉터를 새롭게 디자인하였고, 전처리 컴파일을 미리 수행하는 방법을 제공합니다. 특히, Microsoft .NET Framework와 마찬가지로 GAC에 대해 ngen을 수행하는 것과 비슷하게 AOT 컴파일을 미리 수행하도록 명령어를 한 번 실행해주면 실행 속도 개선에 큰 도움이 됩니다. 아래 명령어를 실행하여 GAC 내부의 모든 어셈블리에 대해 AOT 컴파일을 실행합니다.

for i in /usr/local/lib/mono/*/mscorlib.dll; do mono --aot $i; done
for i in /usr/local/lib/mono/gac/*/*/*.dll; do mono --aot $i; done

위의 이미지 환경 내에서의 mono 설치 경로는 /usr/local에 있으므로 경로는 mono 실행 파일의 위치를 which 명령으로 확인하여 적절하게 변경해야 합니다. 참고로 GAC에 대한 AOT 컴파일은 시간이 오래 걸릴 수 있으며, 이 버전의 가상 환경에서는 .NET Framework 1.0이나 1.1 기준으로는 개발이 불가능하므로 버전을 업그레이드 하거나 base image로부터 구 버전의 mono를 설치하도록 수동 구성해야 합니다.

그리고 개별 어셈블리에 대한 AOT 컴파일은 다음과 같이 실행할 수 있으며, 실행 결과로 .so 파일이 생성되므로 AOT 컴파일의 효과를 위하여 항상 같은 위치에 배포될 수 있도록 배포합니다.

mono --aot Hello.exe
mono Hello.exe

마무리

지금까지 Windows Azure Linux VM에서 docker를 이용한 mono 개발 환경의 구축 방법을 살펴보았습니다. 언제든 원하는 때에 즉시 Linux VM을 만들 수 있다는 것 말고도, 한 번 만든 VM을 손상시키지 않으면서 환경을 독립적으로 구성할 수 있도록 하는 환경 상의 완결성을 제공하는 docker를 이용함으로서 최상의 리눅스 개발 환경을 체험할 수 있게 된 것은 참 좋은 일입니다.

그리고 한 가지 더 덧붙이면, docker를 이용하여 컨테이너를 만들 때 -v 스위치를 사용하여 호스트 파일 시스템과 링크를 연결할 수 있으므로, 컨테이너 셸 상에서 만든 파일을 쉽게 호스트로 반출하거나 반입할 수 있습니다. -p 스위치는 가상 NAT를 통하여 포트 리디렉션을 할 수 있는 방법을 제공하며, 양쪽 스위치의 자세한 사용법은 http://blog.docker.io/2013/07/docker-0-5-0-external-volumes-advanced-networking-self-hosted-registry/ 의 내용을 확인하기 바랍니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

이벤트2012. 12. 6. 00:25

"Azure Camp @ 인하대 - 리눅스, Windows Azure를 만나다" 세미나를 2012년 12월 6일 오후 2시부터 약 1시간 동안 인하대학교 하이테크 001호에서 진행할 예정입니다. 관심있는 인하대 학우 여러분들의 많은 참여 부탁드립니다.

발표 자료 미리 보기: http://sdrv.ms/TFqg0P

ps. 발표 행사 후에는 경품 추첨을 통해서 4권의 책을 선물로 나누어드릴 예정입니다. :-)

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

IaaS2012. 12. 3. 22:32

안녕하세요. Windows Azure MVP 남정현입니다.

Windows Azure Virtual Machine에서 리눅스를 지원하는 것은 다들 잘 알고 계실 것입니다. Ubuntu, CentOS, RHEL, Suse Linux 등을 이미 지원하고 있고 앞으로 개발 진척 상황에 따라서 더 많은 배포판을 지원해 나가게 될듯 합니다. 이번 강좌에서 소개하려고 하는 내용은 Windows Azure Virtual Machine에서 리눅스를 사용하면서 Apache 2 + PHP 5 + Cubrid + XE의 조합으로 XpressEngine 기반의 웹 사이트를 만드는 방법에 대한 것입니다. 익히 알고 계시는대로 Cubrid는 국산 오픈소스 데이터베이스로 다양한 적용 레퍼런스를 가지고 있는 믿음직한 솔루션입니다. 충분한 테스트와 검증이 필요하겠으나, 첫 설치 과정과 기본적인 동작에서 Cubrid는 Windows Azure Virtual Machine 환경에서 안정적으로 잘 작동하고 있습니다.

ps. 2012년 초반에 문제가 되었던 Windows Azure Virtual Machine의 디스크 I/O 관련 이슈, 부팅 후 일정 시간이 지난 다음에 갑작스럽게 Kernel Panic이 찾아오는 현상은 이 글을 쓰는 현 시점에서 해결된 상태입니다.

업데이트: SkyDrive에 아래 60장의 스크린 샷을 모아서 XPS 문서와 ZIP 파일로 업로드하였습니다. 요약해서 보고 싶으신 분들께 도움이 될까하여 공유합니다.

링크 바로가기: http://sdrv.ms/TGXhWs

60장의 그림과 함께하는 설치 과정 따라하기

1. Windows Azure Virtual Machine 베타 프로그램의 신청 여부를 확인하고, http://manage.windowsazure.com/ 에서 하단의 NEW 버튼 클릭 -> Compute 클릭 -> Virtual Machine 클릭 -> Quick Create 순으로 클릭합니다.

* DNS 이름을 지정합니다.
* Ubuntu 12.04 LTS (혹은 다른 Ubuntu 이미지도 무관합니다.)를 선택합니다.
* 적정한 Instance Size를 선택합니다.
* 사용자 ID가 azureuser 임을 기억하시고 비밀 번호를 새로 지정합니다.
* 데이터센터 위치는 대한민국 접속자 기준으로 East Asia를 선택하는 것이 유리합니다.

모든 정보를 입력하면 Create Virtual Machine 버튼을 클릭하고 잠시 기다립니다.

2. 새 Windows Azure Virtual Machine과 Storage가 생성된 것을 확인하면 만들어진 Virtual Machine을 선택하여 상세 관리 페이지로 이동합니다. 

3. Dashboard 화면의 오른쪽 Quick Glance 섹션에서 SSH Details 항목의 접속 주소와 포트 번호를 확인합니다. 이 접속 정보를 사용하여 여러분이 선호하는 Secure Shell 지원 Telnet 프로그램으로 접속을 시도합니다. Windows 환경에서 널리 사용되는 프로그램은 Putty이며, http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 에서 내려받아 설치할 수 있습니다. 

4. Putty를 실행하고, Host Name 입력 상자와 Port 입력 상자에 접속 정보를 입력한 후 Connection type은 SSH로 선택하고 Open 버튼을 클릭합니다. 필요한 경우 Saved Sessions 입력 상자 아래에 새로운 엔트리 이름을 입력하고 Save 버튼을 클릭하면 다음번에 리스트 상자에서 저장된 항목을 더블 클릭하여 바로 연결을 시작할 수도 있습니다. 

5. 처음 원격 서버에 접속하면 임의로 생성한 RSA2 지문 키 값의 유효성 여부를 놓고 경고하는 대화 상자가 나타나게 됩니다. 예 (Yes) 버튼을 클릭하여 항상 이 값을 수락하도록 설정을 저장합니다. 

6. 사용자 ID는 azureuser로, 암호는 Quick Create 당시 지정한 암호를 입력하여 로그인합니다. 

7. 지금부터 수행하려는 작업들은 줄곧 권한 상승을 필요로 하기 때문에 작업의 효율성을 위하여 셸 자체를 권한 상승시키려고 합니다. sudo /bin/bash 명령을 실행하여 BASH 셸을 권한 상승 시킨 상태에서 실행합니다. 사용자 비밀 번호를 물어보는 경우 다시 입력합니다. 

8. vi /etc/hostname 명령어를 입력하여 /etc/hostname 파일을 아래와 같이 FQDN (Fully Qualified Domain Name) 이름으로 수정합니다. 초기값은 단순 호스트 이름으로만 되어있었을 것인데 이 이름을 앞에서 접속하기 위하여 사용한 전체 주소로 바꾸어주면 됩니다.

* VI에서 텍스트 편집 모드로 들어가려면 처음 상태에서 i 키를 누릅니다.
* 텍스트를 편집하고난 다음에는 Esc 키를 눌러 명령 모드로 전환합니다.
*  :wq! 를 입력하여 파일을 저장하고 VI를 닫습니다.

9. vi /etc/hosts 명령어를 입력하여 /etc/hosts 파일에 위에서 /etc/hostname에서 추가한 FQDN 이름에 대한 localhost 엔트리를 새로 추가합니다. VI에서의 파일 편집 방법은 8번 단계의 부연 설명을 참고하십시오. vi 사용이 익숙하지 않다면 nano 혹은 emacs 등의 유틸리티도 대안이 될 수 있습니다.

10. 새로 변경한 설정을 반영하기 위하여 service hostname start 명령을 입력합니다. 

11. SSL 인증서 갱신을 위한 유틸리티의 설치가 필요합니다. apt-get install ssl-cert 명령을 입력합니다.

12. 인증서 갱신을 위하여 make-ssl-cert generate-default-snakeoil --force-overwrite 명령어를 입력합니다. 

13. 이제 Apache HTTP Server를 설치할 차례입니다. apt-get install apache2 명령어를 입력합니다. 

14. PHP5를 설치합니다. apt-get install php5 명령어를 입력합니다. 

15. XpressEngine은 PHP GD 라이브러리의 기능을 활용합니다. GD 라이브러리는 .NET Framework의 GDI+가 ASP.NET이나 일반 응용프로그램을 위하여 해 줄 수 있는 백그라운드 이미지 렌더링에 대한 기능과 거의 일치하는 것으로 동적 이미지 생성 작업에 꼭 필요합니다. apt-get install php5-gd 명령어를 입력합니다.

16. Cubrid 측 Ubuntu Repository를 가져오기 위하여 Repository Entry를 수정해야 하는데 이를 위한 유틸리티를 설치하기 위하여 apt-get install python-software-properties 명령어를 입력합니다. 

17. add-apt-repository ppa:cubrid/cubrid 명령어를 입력하여 Cubrid Database 및 관련 구성 요소를 apt-get 명령어로 설치할 수 있도록 리포지터리 정보를 시스템으로 가져옵니다. 

18. 리포지터리 정보를 새로 내려받아 병합하기 위하여 apt-get update 명령을 수행합니다. 

19. 큐브리드 데이터베이스의 설치를 위하여 apt-get install cubrid 명령어를 실행합니다. 

20. PHP5에 큐브리드 데이터베이스 드라이버 설치를 위항 apt-get install php5-cubrid 명령어를 실행합니다. 

21. 큐브리드 데이터베이스의 환경 변수 반영 등 여러가지 부수적인 작업을 위하여 Windows Azure Virtual Machine의 리눅스 인스턴스를 shutdown -r now 명령어로 재시작합니다. 시스템 재 시작에는 얼마 시간이 걸리지 않습니다. 

22. 약 3~5분 정도 뒤에 아래 그림과 같이 PuTTY 창의 제목 표시줄을 오른쪽 버튼으로 클릭하여 Duplicate Session 혹은 Restart Session 메뉴를 클릭하면 같은 접속 정보를 사용하여 다시 접속을 시도합니다.

23. 다시 로그인합니다. 

24. 큐브리드 데이터베이스의 환경 설정을 위하여 전용 셸로 세션을 바꿉니다. sudo su -s $SHELL cubrid 명령어를 입력하고 azureuser 사용자의 비밀 번호를 다시 입력합니다.

* 주의: 이 명령어는 CUBRID 데이터베이스의 환경 변수 설정이 시스템 전체에 반영되지 않은 경우 작동하지 않습니다. 그런 경우 21단계의 명령어 shutdown -r now 명령어를 사용하여 시스템을 다시 시작해야 합니다. 권한이 없다고 나오는 경우 sudo shutdown -r now 명령어를 이용하여 권한 상승을 요청합니다.

25. cubrid service start 명령어를 입력하여 큐브리드 핵심 서비스를 시작합니다. 그리고 cubrid createdb xe 명령어를 입력하여 새 데이터베이스 'xe'를 생성합니다. 데이터베이스의 초기 크기는 512MB로 만들어지며 이 과정에서 시간이 다소 걸릴 수 있습니다.

26. cubrid server start xe 명령어를 입력하여 25단계에서 만들어진 데이터베이스 xe를 활성화시킵니다.

27. 새로 만들어진 xe 데이터베이스의 dba 계정 비밀 번호 변경을 위하여 csql -u[사용자 ID] [데이터베이스 이름] 형식으로 명령어를 입력합니다. 이번 강좌의 내용을 기준으로 하면 csql -udba xe 명령어를 입력하면 됩니다. 

28. CUBRID SQL Interpreter 배너가 출력되는 것을 확인할 수 있습니다. 이제 C-SQL 명령어를 입력해야 하는데 alter user dba password '[사용할 비밀 번호]'; 명령어를 입력합니다. 

29. 정상적으로 명령이 수행되었음을 확인한 다음 ;ex 명령어를 입력하여 CSQL 세션을 닫습니다. 

30. 이제 Apache HTTP Server의 디렉터리 컨텐츠를 구성해야 합니다. 정확한 디렉터리 위치를 알아보기 위해서 /etc/apache2 디렉터리로 이동한 다음 'DocumentRoot' 지시자를 포함하는 파일들의 내용을 grep -nr 'DocumentRoot' * 명령어로 검색해봅니다. 결과가 /var/www로 나타나므로 실제로 해당 위치로 이동해야겠군요.

31. 위치로 이동하기에 앞서 CUBRID 셸을 exit 명령으로 빠져 나옵니다. 그 다음 다시 원래의 셸에서 sudo /bin/bash 명령으로 권한 상승을 시도합니다.

32. 이제 cd /var/www 명령어를 입력하여 Apache HTTP Server의 기본 Contents 디렉터리로 이동합니다. 그리고 이곳에서 PHP의 정상 설치 여부를 확인하기 위하여 cat > test.php 명령어를 입력하여 표준 입력 장치로부터 들어오는 내용을 파일로 기록하도록 만듭니다. 여기서의 표준 입력 장치는 우리가 PuTTY를 통해서 밀어넣는 키보드 입력이 될 것이므로 간단한 스크립트 작성이 가능해집니다. 스크립트 파일의 내용은 다음과 같습니다.

<?php
phpinfo();
?>
[Ctrl+Z 키 입력] 

33. 기본적인 구성이 완료되었으므로 이제 Windows Azure Management Portal (http://manage.windowsazure.com/)으로 이동하여 방화벽 설정을 조금 변경해야 합니다. 현재 방화벽은 Secure Shell을 위해서 TCP 22번 포트만 개방된 상태이며 Apache HTTP Server가 열어놓은 TCP 80 포트가 밖에서도 연결될 수 있도록 설정을 변경해야 합니다. 아래 그림에서처럼 Endpoints 메뉴를 클릭하고 하단의 Add Endpoint 버튼을 클릭하여 새 설정을 추가합니다.

note. Linux VM 자체의 방화벽 설정이 있더라도 Windows Azure Firewall에서 열지 않으면 외부에서는 특정 포트 번호로 연결을 맺을 수 없습니다. 그러나 여러 VM이 단일 Cloud Service 안에 Join하는 경우 이 영역 안의 각각의 VM들은 상호 간의 자체 방화벽 구성이 Windows Azure 방화벽 구성보다 우선시됩니다.

34. Add Endpoint 라디오 버튼을 체크한 상태에서 다음 버튼을 클릭합니다.

35. NAME에는 알아보기 쉬운 설정 명칭 (여기서는 HTTP로 정했습니다.)을, PROTOCOL은 TCP를, PUBLIC PORT, 즉 밖에서 받아들일 포트 번호는 80, PUBLIC PORT로 받은 연결을 실제로 이어줄 VM 측의 PORT인 PRIVATE PORT도 80으로 지정하여 웹 연결을 개통시킵니다. 설정을 마쳤으면 완료 버튼을 클릭합니다.

36. 설정이 완료될 때 까지 잠시 기다립니다.

37. 정상적으로 반영되면 아래 그림과 같이 녹색 체크 마크가 설정 앞에 나타납니다. 이제 테스트 URL로 접속을 시도합니다. 지금 여러분의 브라우저에서 http://[호스트 이름].cloudapp.net/test.php 와 같이 주소를 입력해봅니다.

38. PHP 5.3 인터프리터가 잘 작동하고 있음을 확인할 수 있습니다. PHP 보완 솔루션도 같이 설치되었다고 나오는데 특이하게도 해외 프로젝트이지만 이름이 SUHOSIN (수호신)이라고 하는군요. :-D

39. Ctrl+F 키를 눌러서 페이지 내 검색 창을 엽니다. 검색 키워드로 CUBRID를 입력하여 아래 그림과 같이 Cubrid Driver가 활성화되어있는지 확인합니다.

40. 이어서 gd를 검색 키워드로 넣었을 때 아래 그림과 같이 항목이 검색되고 GD Support가 enabled로 되어있는지 확인합니다.

41. 이제 드디어 XpressEngine을 설치할 차례입니다. 브라우저 창에서 http://www.xpressengine.com/ 으로 주소를 넣어 이동한 다음, 최신 버전의 XE Core 패키지 다운로드 메뉴를 찾아 클릭합니다.

42. 다운로드 버튼을 오른쪽 버튼으로 클릭하여 바로 가기 복사 메뉴 (혹은 다른 브라우저의 경우 이에 준하는 기능을 활용하세요.)를 클릭하여 다운로드 링크를 가져옵니다. 이 주소를 이용하여 바로 xe.zip 파일을 리눅스 VM에서 내려받으려고 합니다. 이 방법을 사용하지 않고 PuTTY 유틸리티의 자매 도구인 PSFTP 툴을 사용하여 직접 업로드해도 무방하지만 추가 프로그램 없이 손쉽게 접근할 수 있어 이 방법으로 시도하려고 합니다.

43. 리눅스 VM에서 웹의 파일을 콘솔 상에서 다운로드받기 위해 wget 유틸리티를 설치하려고 합니다. 보통은 설치가 이미 되어있지만 업데이트 확인 차 apt-get install wget 명령을 입력하여 다시 설치를 확인합니다.

44. 파일을 다운로드받기 위해서 wget -O xe.zip [42단계에서 복사한 URL] 명령어를 입력합니다. -O 스위치는 HTTP 서버로부터 파일 다운로드가 발생할 때 저장할 파일의 이름을 미리 스위치로 지정한 것입니다. 그리고 42단계에서 복사한 URL은 wget -O xe.zip 명령어 다음에 공백을 한 칸 넣고 콘솔 윈도우에서 마우스 오른쪽 버튼을 클릭하면 아래와 같이 자동으로 붙여넣기가 됩니다. 이제 45단계의 내용을 꼭 참고하세요.

45. 리눅스 Bash 셸의 특성 상 URL에 붙어있는 기호들 중 & (Ampersand) 기호는 꼭 이스케이프 처리를 해주어야 합니다. 키보드의 좌우 방향키를 이용하여 명령어를 수정할 수 있으므로 & 기호를 \& 기호로 아래 그림과 같이 수정해줍니다. 이로서 전체 명령어는 다음과 같습니다.

wget -O xe.zip http://www.xpressengine.com/?module=file\&act=procFileDownload\&file_srl=21367347\&sid=2e7e5518f7168e68513400404840b5f1

46. 정상적으로 아래 그림과 같이 다운로드가 완료되었는지 확인합니다.

47. ZIP 파일의 압축을 풀기 위해서 unzip 유틸리티를 설치해야 합니다. apt-get install unzip 명령을 실행하여 unzip 유틸리티를 설치합니다.

48. unzip xe.zip 명령어를 실행하여 /var/www/xe 디렉터리에 XpressEngine 패키지를 압축 해제하여 설치합니다.

49. 이제 불필요한 파일을 정리하고 퍼미션 설정을 할 차례입니다. /var/www 디렉터리의 xe.zip, test.php 파일을 삭제하고 xe 디렉터리 내에 files 디렉터리를 새로 생성한 다음 chmod 명령어로 디렉터리 퍼미션을 조정합니다.

cd /var/www
rm xe.zip
rm test.php
cd xe
mkdir files
chmod 707 files

50. 이제 브라우저 창에서 http://[호스트 이름].cloudapp.net/xe/ 주소를 넣어 아래 그림과 같이 설치 마법사가 나타나는지 확인합니다.

51. 페이지 언어가 한국어로 변경되었으면 다음 버튼을 클릭합니다.

52. 아래 그림과 같이 모든 사항이 가능으로 표시되면 설치할 준비가 된 것입니다. "설치를 진행합니다." 버튼을 클릭합니다.

53. 이번 강좌에서 데이터베이스로 CUBRID를 사용할 것이므로 데이터베이스 종류는 cubrid를 선택하고 다음 버튼을 클릭하여 진행합니다.

54. 데이터베이스 접속 정보를 설정합니다.

* Apache HTTP Server와 DB 서버가 같은 위치에서 실행 중이므로 loopback 주소인 127.0.0.1을 입력합니다.
* DB 서버에 대해 별도로 포트 번호를 변경하지 않았으므로 포트 번호는 기본값을 사용합니다.
* DB 아이디는 빠른 진행을 위해서 dba로 사용하고, DB 비밀 번호는 28단계에서 지정한 비밀 번호를 입력합니다.
* DB 이름은 25단계에서 지정한 인스턴스 이름인 xe를 입력합니다.
* 테이블 머리말은 기존에 xe를 설치한 적이 없는 DB 위에 설치하는 경우 기본 값을 그대로 사용해도 됩니다.

여기서 참고할 사항은 데이터베이스의 경우 Windows Azure Firewall에서 해당 포트 번호인 33000을 임의로 개방하지 않을 경우 밖에서는 Cubrid 데이터베이스로 접속할 방법이 없습니다. 필요한 경우 Cubrid 서버의 기본 포트 번호를 변경하여 한층 더 강력한 보안을 유지할 수도 있습니다.

55. 데이터베이스 접속이 완료되면 아래와 같이 짧은 주소 사용 여부와 시간대 설정 페이지가 나타납니다. 짧은 주소 모듈이 Apache2 패키지와 함께 설치되므로 체크를 하고, 시간대는 적절하게 선택합니다. 대한민국 사용자들을 대상으로 하는 경우 GMT +09:00 Korea Standard Time, Japan Standard Time 항목을 선택하고 다음 버튼을 클릭합니다.

56. 관리자에 대한 기본적인 정보를 입력합니다. 메일 주소, XE 계정 접속 시 사용할 비밀 번호, 내부 아이디, 닉네임을 빠짐없이 적절하게 모두 입력한 다음 완료 버튼을 클릭합니다.

57. 아래와 같이 Welcome 페이지가 나타나면 설치가 끝난 것입니다. 왼쪽 메뉴들 중 관리 메뉴를 클릭하여 관리자 페이지로 이동합니다. 이 과정에서 다소 시간이 걸릴 수 있습니다.

58. 관리자 페이지가 나타납니다. 설치 환경 수집 동의 팝업에 적절한 응답을 선택합니다.

59. 이제 사이트를 구성할 준비가 완료되었습니다.

60. Azure Virtual Machine 관리자 페이지로 되돌아와서 보면 가상 컴퓨터의 움직임이 그래프로 기록된 것을 볼 수 있습니다. 이제 이 그래프가 점점 활기차고 높게 그려질 것을 기대해도 되겠군요. :-)

마무리하기

지난번에는 Windows Azure Web Site에서 XpressEngine을 설치하는 과정을 설명드렸습니다. 여기서는 MySQL의 클라우드 버전인 ClearDB의 서비스를 사용하는 것을 예로 들어드렸습니다. 이 방법을 사용하시면 동시 접속자 수가 많은 웹 사이트에서 최고의 확장성을 목표로 운영할 수 있습니다. 오늘 소개해드린 방법은 일반적인 서버 호스팅 환경에 익숙하신 분들께 더 친숙하고 유익한 방법이 될 수 있습니다. 늘 그렇지만, 비용과 목적에 알맞는 적절한 서비스 구성이 최적의 클라우드 서비스 선택이 될 것입니다.

감사합니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

Azure Storage/Database2012. 5. 25. 01:02

안녕하세요. Windows Azure MVP 남정현입니다.

SQL Azure를 사용한다면 아마 거의 예외없이 접속하는 클라이언트 측의 운영 체제는 Windows 운영 체제일 것입니다. 그러나 만약 리눅스를 클라이언트 측의 운영 체제로 직접 사용하기 원한다면 어떻게 해야 할까요? 기존에 여러분이 사용하고 있을 가능성이 높은 드라이버로 FreeTDS가 있겠습니다만 버전이 낮은 드라이버는 SQL Azure가 철칙으로 사용하는 SSL 연결을 지원하지 못합니다. 최근에 출시된 FreeTDS의 경우 SSL을 지원하기는 하지만, SQL Azure로 연결을 시도할 경우 연결 과정에서 응답 없음 상태로 빠지거나 여러가지 다른 오류가 발생할 수 있습니다. 아마도 향후에 개선될 것으로 기대합니다. 이 블로그에서 설명하려는 내용에 대해 최상의 결과를 얻기 위하여 현재는 Microsoft SQL Server ODBC Driver 1.0 for Linux가 필요합니다.

시스템 요구 사항

Microsoft SQL Server ODBC Driver for Linux를 설치하기 위해서는 다음의 조건을 만족해야 합니다.

  • 64비트 지원 프로세서가 필요합니다. (x64 또는 AMD64)
  • CentOS, Fedora, RHEL 등의 Redhat 계통의 최신 리눅스 운영 체제가 필요합니다.
  • 실행 중인 운영 체제의 커널이 x86_64 환경에서 실행 중이어야 합니다.

그리고 당연한 이야기이지만 시스템 관리자 권한을 얻은 상태에서 실행해야 합니다.

설치 전에 필요한 모든 패키지 설치하기

운영 체제의 버전마다 필요로 하는 패키지의 최소 버전에 차이가 존재하기는 하나, 아래의 명령어들을 사용하여 일반적인 종속성 상의 요구 사항을 모두 정리할 수 있습니다. 아래 명령어들은 설치 전후반에 걸쳐 필요한 패키지들을 모두 설치해 줄 것입니다.

  • yum install glibc
  • yum install e2fsprogs
  • yum install krb5-libs
  • yum install openssl
  • yum install libgcc
  • yum install libstdc++
  • yum install make
  • yum install gcc
  • yum install bison
  • yum install byacc
  • yum install libuuid
  • yum install wget
  • yum install tar

드라이버 파일 내려 받기

드라이버 파일을 내려받기 위하여 http://www.microsoft.com/en-us/download/details.aspx?id=28160 페이지에서 적절한 버전의 tar 패키지 파일을 내려 받아야 합니다. 만약 서버 환경에서 직접 설치해야 하는 상황인 경우, 다운로드 URL을 확인하여 bit.ly 등의 단축 주소로 주소를 줄이고 그 주소를 wget 명령에 대입하면 수고스러움을 덜 수 있습니다.

파일을 다운로드하고나서 tar 유틸리티로 압축을 해제합니다.

tar xvzf sqlncli-11.0.1790.0.tar.gz

그 이후에는 해당 디렉터리로 이동한 다음 필요한 작업을 진행합니다.

unixODBC Driver Manager 설치하기

SQL Server Driver for Linux는 unixODBC 환경 아래에서 작동하도록 만들어진 드라이버이므로 반드시 unixODBC Driver Manager를 시스템에 설치해야 합니다. 만약 기존에 이미 설치가 되어있는 상태이면 다음 섹션으로 넘어가서 곧바로 드라이버를 설치해도 됩니다.

아래 명령어를 sqlncli 디렉터리에서 실행합니다.

./build_dm.sh

상세한 안내 메시지가 나타나게 되는데, YES를 입력하여 내용에 동의함을 표시합니다. 그 다음에는 unixODBC를 대신 다운로드하고 컴파일하고 설치하는 작업이 자동으로 진행될 것입니다. 그리고 최종적으로 사용자가 직접 설치를 진행해야 하는데, 스크립트 실행이 완료되면 아래와 같은 메시지를 볼 수 있을 것입니다. 메시지에 실제로 출력된 임시 경로로 이동하도록 정확히 이름을 지정하는 것에 유의하여 아래와 유사한 명령어를 실행합니다.

cd /tmp/unixODBC.x.x.x/unixODBC-2.3.0; make install

Linux나 Unix 명령어에 익숙하지 않은 분들을 위하여 부연 설명을 드리면, 세미콜론은 순차적인 실행을 위하여 사용되는 연산자입니다. 즉, 디렉터리를 이동하고난 다음에 make install 명령어를 실행하라는 의미입니다. 설치가 끝나고 나면 다시 sqlncli 디렉터리로 이동합니다.

ODBCINST.INI 파일 백업하기

실제 드라이버를 설치하기 전에 만약 odbcinst.ini 파일을 백업해야 할 필요가 있다면 아래 명령어를 사용하여 정확한 경로를 확인하고 해당 파일을 복사하여 백업하기 바랍니다.

odbc_config odbcinstini

실제 드라이버 설치하기

이제 실제 드라이버를 설치할 차례입니다. sqlncli 디렉터리로 이동한 다음, 아래와 같이 명령어를 입력합니다.

./install.sh install

사용자 계약서를 표시하는데, 모두 읽어보기 귀찮으시다면 키보드의 q키를 누릅니다. 그러면 동의 여부를 곧바로 묻는 프롬프트가 나오는데 여기서 YES를 입력하고 기다립니다. 특별한 오류 없이 설치가 끝났다면 마지막으로 아래 명령어를 입력하여 정상적으로 설치가 되었는지 확인해봅니다.

./install.sh verify

특별한 오류 메시지가 없다면 정상적으로 설치가 완료된 것입니다.

SQL Azure 연결 테스트해보기

이제 리눅스 환경에서도 SQL Azure에 연결이 잘 되는지 확인해볼 차례입니다. ODBC를 사용한다고 하였지만 별도로 인스턴스를 등록하거나 복잡한 절차를 거치지 않고 곧바로 테스트해볼 방법이 있는데, FreeTDS와 마찬가지로, 그리고 FreeTDS가 그러했듯이 Microsoft가 제공하는 sqlcmd 유틸리티가 여기에서도 그대로 제공됩니다.

sqlcmd -U <SQL Azure 계정 ID> -P <SQL Azure 비밀 번호> -S <서버 ID>.database.windows.net -d <데이터베이스 이름>

Windows에서 사용하던 것과 다르지 않음을 알 수 있습니다. 정상적으로 접속이 되면 1> 프롬프트가 나타날 것이고, 여기에 아래와 같이 쿼리를 수행해 봅니다.

select @@version
go

그러면 아래 그림과 같이 결과가 나타나는 것을 볼 수 있습니다. 보시는 것과 같이 SQL Azure를 Linux에서도 Native Driver를 사용하여 접속할 수 있습니다. :-)

결론

다소 복잡한 내용들이었지만, 리눅스에서도 SQL Server와 SQL Azure를 얼마든지 접근하고 다룰 수 있는 방법이 있기 때문에 데이터베이스 때문에 Windows를 써야 하는 불편함을 감수해야 할 필요가 전혀 없다는 것을 확인하였습니다. 향후에는 더 나은 방법으로 더 리눅스 환경에서 최적화된 형태로 SQL Azure나 SQL Server에 접속할 수 있을 것으로 기대합니다. 아티클에 대해서 개선할 점이나 의견을 주실 부분이 있으시면 언제든 의견을 주십시오.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

기술 소식2012. 1. 5. 09:59

Windows Azure에서 리눅스를 게스트 OS로 2012년 중에 지원을 추가할 예정입니다.

Microsoft 전문 테크니컬 칼럼니스트인 Mary-Jo Foley의 기사에 따르면, Microsoft가 2012년 중에 리눅스를 실행할 수 있도록 Windows Azure 서비스를 업데이트할 예정이라고 합니다. 워낙에 특이하고 걸출한 토픽인지라 이 기사 자체가 잘못된 것이 아니냐는 반문을 살 정도로 뜨거운 이슈인 것 같습니다. :-)

현재 나와있는 Web Role, Worker Role은 Visual Studio를 이용하여 개발자가 Application Instance를 패키징해서 Windows Azure에 배포할 때 이것을 VM으로 변환하여 Windows Server 2008이나 Windows Server 2008 R2에서 실행할 수 있도록 바꾸고 있고, 작년에 나온 VM Role은 여기서 좀 더 나아가서 VHD 안에 Windows Server 2008 R2를 설치하고 VHD 단위로 VM을 만들 수 있도록 하는 기능을 내놓았습니다. 그러나 지금까지 나온 것은 모두 한 가지 기술적 특징이 있는데, 실행 중인 VM이 예고 없이 자동으로 재시작되거나 초기화될 수 있다는 점입니다. 그래서 Windows Azure 기반으로 서비스를 개발할 때에는 VM 안에 상태를 보관하는 방식 대신 Stateless/Remote Storage를 활용하는 전략을 택해야 했었습니다.

하지만 Linux VM에 대한 지원과 더불어 장기 실행 VM이 Windows Server에 대해서도 같이 제공되어 Amazon Web Service의 Elastic Cloud Computing 서비스와 같은 형태의 VM Hosting을 Windows Azure에서도 사용할 수 있을 것으로 보입니다. 현재 예상되는 리눅스 배포판으로는 CentOS, RHEL, Suse Linux 등 기존의 Hyper-V 스택에서 원활하게 구동 가능한 상용 리눅스 배포판 대부분이 여기에 포함될 것으로 보입니다.

지금 소개하는 기능은 CTP 버전으로 올해 봄 (2012년 봄) 시즌에 새로 런칭될 것으로 보입니다. 그리고 이 외에도 SharePoint 서버와 SQL Server를 탑재한 가상 머신 이미지의 배포도 같이 지원함으로서 SQL Azure 특유의 기술적 한계를 보완하고 Private Domain에서 사용 가능한 SQL Server를 Windows Azure에서도 이용할 수 있을 것으로 보입니다.

좀 더 자세한 내용은 http://www.zdnet.com/blog/microsoft/microsoft-to-enable-linux-on-its-windows-azure-cloud-in-2012/11508 에서 보실 수 있습니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

기술 소식2010. 12. 1. 01:14

PDC 2010에서 언급된 대로 이번 Windows Azure 업데이트에는 많은 수의 업그레이드가 있었습니다. 이러한 업그레이드들의 공통적인 목표는 단 한가지, 좀 더 높은 수준의 서비스를 좀 더 손쉽고 빠르게 개발할 수 있도록 개발자들을 지원하기 위함이었습니다. 그리고 12월 1일, 드디어 새 버전의 SDK와 함께 윈도 애저 서비스 포털이 새 단장을 합니다.

새 버전의 Windows Azure SDK의 버전은 1.3이며, Windows Azure Management Portal은 이제 정식으로 사용할 수 있도록 서비스됩니다. 다음은 Windows Azure SDK 버전 1.3에서 바뀐 사항들을 정리한 것입니다.

  • 권한 상승과 전체 IIS 기능 사용을 통하여 좀 더 완성도 높은 응용프로그램의 개발이 가능하게 됩니다. 이제 웹 역할과 작업자 역할에서 관리자 권한을 이용한 실행을 지원하므로 고유한 소프트웨어의 설치가 가능하게 되었고, 특히 웹 역할의 경우 IIS 전체 기능을 지원하도록 개선되어 IIS 7 전용 모듈을 설치하는 등의 작업이 가능하게 되었습니다.
  • 원격 데스크톱 기능을 켜고 끌 수 있도록 웹 역할이나 작업자 역할의 출판 속성이 추가되었습니다. 이에 대한 자세한 내용은 제 블로그의 글 ([Software Development/Windows Azure] - Windows Azure 인스턴스를 원격 제어하기)을 참조하십시오.
  • 윈도 서버 2008 R2 기반의 역할 지원: Windows Azure는 이제 Windows Server 2008 R2를 OS로 사용할 수 있도록 웹 역할, 작업자 역할, 그리고 가상 머신 역할이 개선되었습니다. 여기에는 IIS 7.5, AppLocker를 비롯하여 고급 명령줄 도구와 PowerShell 버전 2.0과 같은 자동화 기능까지 지원되며, 이전에 제 블로그 글 ([Software Development/Windows Azure] - 이제 UNIX 기반 프로그램도 Windows Azure의 First Citizen이 됩니다.)에서 언급했던 것과 마찬가지로 SUA 등의 리소스를 사용하여 UNIX, LINUX, POSIX 기반 응용프로그램을 윈도 애저 플랫폼으로 이식하는 작업도 가능하게 됩니다.
  • 다중 서비스 관리자 지원: 이제 Windows Azure는 다수의 윈도 라이브 ID를 관리자로 인정하여 서비스에 대한 제어를 수행할 수 있도록 기능이 개선되었습니다. 팀 단위 작업에 대한 지원을 고려하여 추가된 기능으로 더 효율적이고 편리한 작업을 수행할 수 있습니다. 특히 이 기능은 작업 시간대가 서로 다르고 위치가 떨어져있는 팀원들 사이에 관리 작업을 공유할 때 매우 효율적입니다.
  • 실버라이트 기반의 Windows Azure Portal 런칭: 기존의 AJAX 기반 Windows Azure Portal보다 더 사용하기 쉽고 빠르며, 새로운 기능들에 대한 완벽한 인터페이스를 제공하는 실버라이트 UI를 Windows Azure Portal에서 사용할 수 있습니다.
  • 향상된 진단 정보: 1차원적인 진단 정보가 아닌 좀 더 상세한 진단 정보를 통하여 관리하는 역할 인스턴스들의 종류, 배포된 시간, 마지막으로 다시 부팅한 시간등을 확인할 수 있습니다.
  • 새로운 회원 가입 프로세스: 이전보다 더욱 편리하고 쉽게 Windows Azure 서비스에 가입하여 곧바로 클라우드 컴퓨팅 서비스를 이용할 수 있게 됩니다.
  • 시나리오 기반의 Windows Azure Platform 포럼 런칭: 상황 별 대처 방안에 따라 빠르게 답을 구할 수 있는 Windows Azure Platform 포럼이 런칭됩니다. (http://social.msdn.microsoft.com/Forums/en-US/category/windowsazureplatform)

다음의 기능들은 베타 버전으로 제공됩니다.

  • Windows Azure 가상 머신 역할: 새로운 - 또는 - 기존의 윈도 서버 기반 응용프로그램을 VM Role을 이용하여 손쉽게 클라우드로 이관할 수 있습니다. 이에 대한 자세한 정보는 http://www.microsoft.com/windowsazure/compute/#vmrole 의 내용을 참조하십시오.
  • 극소형 인스턴스 레벨: 런타임 시간당 0.05$, 원화로 환산하면 한달 약 4~5만원 선으로 새로운 Windows Azure Platform의 기능을 경험해볼 수 있습니다. 극소형 인스턴스를 통하여 여러분이 원하는 클라우드 솔루션을 비용 걱정없이 자유롭게 테스트하며 개발할 수 있습니다. 자세한 내용은 http://www.microsoft.com/windowsazure/compute/#computeinstancesize 의 내용을 참조하십시오.

이제 개발자와 IT 전문가들은 Windows Azure Management Portal을 통하여 다음의 베타 서비스에 액세스할 수 있습니다.

  • Windows Azure 마켓플레이스: Windows Azure 마켓플레이스는 여러분의 빌딩 블록 구성 요소를 공유하거나, 판매하거나, 구입할 수 있도록 도우며, 고급 데이터를 거래할 수 있도록 도와주는 온라인 마켓플레이스입니다. 현재는 DataMarket (구 Codename: Dallas)이 런칭된 상태이며, 이번에는 Application Market Section이 오픈되었습니다. 40개 파트너사와 50여개의 응용프로그램과 서비스가 현재 게시되어있습니다.

다음의 기능은 CTP (Community Technology Preview)로 제공됩니다.

  • Windows Azure Connect (구 Project Sydney): 더욱 단순하고 관리하기 쉬운, 클라우드와 온 프레미스 사이의 IP 기반의 네트워크를 형성할 수 있도록 도움을 주는 서비스가 CTP로 런칭되었습니다. 현재는 별도의 비용을 받지 않는 CTP 버전으로 제공되며 Windows Azure Management Portal을 통하여 서비스를 신청하고 미리 테스트해보실 수 있습니다.

미국 시간 기준으로 2010년 12월 1일 오전 9시 (한국 시간은 2010년 12월 2일 오전 2시)에 Windows Azure Management Portal을 통하여 Overview 웹 캐스트 (http://go.microsoft.com/fwlink/?LinkID=207019)가 게시될 예정이니 관심있으신 분들께서는 꼭 살펴보시기 바랍니다. :-)

PDC10에서 발표된 Windows Azure 업데이트들을 다시 보시려면 http://www.microsoft.com/windowsazure/pdcannouncements/ 의 내용도 같이 확인하십시오.

출처: http://blogs.msdn.com/b/windowsazure/archive/2010/11/29/just-released-windows-azure-sdk-1-3-and-the-new-windows-azure-management-portal.aspx

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

Exploring2010. 11. 30. 22:24

오늘 도착한 ZDNET 코리아 메일링 리스트를 통해 아주 흥미로운 웹 캐스트가 하나 게시되었습니다. Delphi Prism은 Embacadero의 최신 Rapid Application Development Tool로서 종전의 Delphi .NET에 대한 업그레이드 제품이자, RemObjects사의 Object Pascal 제품의 최신 버전입니다. Visual Studio Shell을 통하여 이전 버전의 Delphi IDE에서 사용헀던 .NET 개발 환경때 보다 더 풍부하고 확장된 기능을 제공하기도 하고, 특히 이번 XE 버전에서는 MonoDevelop 기반의 IDE도 동시에 지원하고 있어서 기능성이 매우 돋보이기도 합니다.

이 동영상에서 소개하는 기술들에 대해 간단히 요약하면, 리눅스, 솔라리스, 맥 OS X에서 데스크 탑 및 서버 닷넷 프레임워크 대체 구현을 제공하는 Mono 프레임워크 (http://mono-project.com/Downloads), 상용 제품군으로 판매되는 MonoTouch (http://monotouch.net/) SDK, 맥 OS X 환경에서 구동 가능한 iPhone 및 iPad SDK (http://developer.apple.com/iphone/), 그리고 Embacadero Delphi Prism XE (http://www.embarcadero.com/products/delphi-prism)를 활용하여 iPhone과 iPad에서 실행 가능한 응용프로그램을 디자인하는 것입니다. 이 중에서 상용 라이선스가 필요한 것은 MonoTouch와 Delphi Prism XE가 되겠습니다.

만약 Delphi가 아닌 C#을 이용하여 응용프로그램을 개발하기 원한다면 Delphi Prism XE 대신 MonoTouch와 함께 제공되는 기본 IDE인 MonoDevelop 만으로도 충분한 개발이 가능합니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

PaaS2010. 11. 1. 19:35

최근 열린 Professional Developer Conference 2010 (이하 PDC 2010)에서, Windows Azure Platform의 실행 환경을 담당하는 Windows Azure Compute에 획기적인 기능이 추가되었습니다. 바로 VM Role의 추가인데, 여기에는 상당히 시사하는 점이 많습니다. VM Role은 이전 글 "[Software Development/Windows Azure] - PDC 2010에서 공개된 Windows Azure 업데이트"의 내용에서 소개했던 것 처럼 Windows Server 2008 R2 기반의 서버 컴퓨터를 Physical Machine to Virtual Machine (이하 P2V) 기술을 통해 Windows Azure에서 실행 가능한 Cloud Computing Appliance로 변환할 수 있습니다.

이 덕분에 좀 더 많은 종류의 서버 응용프로그램이 Windows Azure Platform의 수혜를 얻을 수 있게 됩니다. 이 중에는 기존의 전통적인 Microsoft Back Office Server들에 대한 것은 물론이거니와, 이전에 우리에게 Service For Unix라는 이름으로 잘 알려진 Microsoft의 Unix 호환성 도구인 SFU 및 SUA의 이점을 충분히 활용할 수 있게 될 것입니다. 즉, 기존에 FreeBSD, NetBSD, Linux, POSIX용 응용프로그램을 성공적으로 Windows Server 기반의 응용프로그램으로 마이그레이션할 수 있었다면, 약간의 수정을 통하여 성공적으로 Public Cloud Computing을 위한 응용프로그램으로도 출사표를 낼 수 있음을 뜻합니다.

SFU 및 SUA가 혹시 낯설다면, Cygwin 프로젝트를 참조하셔도 좋습니다. 그리고, 당연한 이야기이지만 Cygwin 프로젝트 기반의 유닉스 응용프로그램에게도 같은 혜택이 제공될 수 있습니다.

아래는 SUA 설치 과정 및 SUA에 대한 설명 동영상입니다. SUA Community 웹 사이트 http://www.suacommunity.com/ 에 방문하시면, SUA 위에 추가 설치 가능한 주요 유틸리티 패키지들을 더 추가하실 수 있으므로 요즈음 널리 사용되는 유닉스 기반 인기 유틸리티들을 Windows에서도 사용하실 수 있습니다. 아래 동영상은 SUA Community에서 제작한 동영상이며 저작권은 해당 원 저작자에게 있음을 밝힙니다.

SUA Installation Video

SUA Familization Video

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

기술 소식2009. 7. 1. 19:36

Port your .NET applications to Mono and Linux without leaving Visual Studio!

Mono 2.4가 발표된 이후로 지속적으로 Mono 프로젝트는 발전에 발전을 거듭하고 있습니다. 최근 흥미로운 툴킷 하나가 새로 등장하였는데 바로 Mono Tools for Visual Studio가 그 주인공입니다. 이전에는 Embacadero Delphi Prism을 통하여 Delphi Prism IDE 레벨에서 Mono와의 동시 Build를 제공한 것이 최선이었습니다만 이제 공식적으로 기본 IDE 위에서 사용할 수 있는 공식적인 Tool이 등장하게 되었습니다.

현재 Mono Tools for Visual Studio는 Private Preview 형태로 배포되는 것으로 소정의 가입 절차가 필요함을 알아두시면 좋겠습니다.

Mono Tools for Visual Studio의 주요 기능을 살펴보면 다음과 같습니다.

  • 호환성 검사: 이전부터 제공되어오던 MoMA (Mono Migration Assistant)를 활용한 호환성 검사 기능을 제공합니다. 개발 중인 닷넷 응용프로그램을 Mono로 가지고갈 때 발생할 수 있는 문제점들을 보고서의 형태로 알려주는 기능으로 호환성 문제에 대한 충분한 검토를 사전에 해 볼 수 있도록 해줍니다.
  • Windows에서 실행: Mono의 Win32 프레임워크를 이용하여 현재 개발 중인 닷넷 응용프로그램을 직접 실행할 수 있도록 해줍니다.
  • Linux에서 원격 실행: 미리 준비되어있는 Linux Workstation 컴퓨터 위에서 현재 개발 중인 닷넷 응용프로그램을 직접 실행할 수 있도록 해줍니다.
  • Linux에서 원격 디버깅: Mono Tools for Visual Studio의 중요한 기능이라고 할 수 있습니다. Linux에서의 원격 실행을 전제로, 원격 디버거를 통하여 Visual Studio의 Debugging Feature를 그대로 사용하여 문제점을 진단하고 파악할 수 있게 해 주는 기능입니다. 참고로, ASP.NET 디버깅도 지원된다고 합니다.

여기서 주목할 것은 VMware Virtual Appliance의 형태로 무료로 배포되는 가상 PC 패키지에 관한 것으로, 가상 PC 패키지를 이용하거나 Windows 7의 Windows Virtual PC 위에서 오픈수세 리눅스 + 모노를 설치하면 컴퓨터 앞을 떠나지 않고도 동시에 두 개의 운영 체제에서 테스트를 수행할 수 있는 편리성을 보여줍니다.

이 중에서 호환성 검사 기능과 원격 디버깅에 관한 내용은 블로그 강좌 형태로 다루어볼 계획이니 많은 관심 바랍니다. :-)

공식 홈페이지: http://go-mono.com/monovs/

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

  1. mono

    Monovs를 다운받으려고 Sign을 했는데, 제출후에는
    "내 스프레드시트에서 확인하세여?"인가 나오더라구요.

    어떻게 하면 monovs를 다운받을 수 있을까여?

    그리고 VS2008에서 만든 Winform을 Suse Linux에서 Mono로 실행해보면 Winform UI가 너무 허접하게 나옵니다.
    monoVS 사진을 보면 리눅스/윈도우즈 모두 UI가 비슷하게 이뿐것 같은데 ...
    정말 궁금하네요.

    2009.10.09 21:52 [ ADDR : EDIT/ DEL : REPLY ]
    • Mono VS Tool은 현재 Close Beta로 진행중입니다. 정식 출시까지는 시일이 좀 걸릴듯 합니다. 대신, Signup 신청을 하시면 메일링 리스트로 개발 상황이나 여러가지 피드백을 공유하실 수 있을 것입니다.

      Windows Forms의 UI Quality 향상이나 WYSIWYG 지원은 아직 실제 Windows 운영 체제에서 기동되는 것만큼 완전한 것은 아닐 것으로 생각됩니다. 조만간 출시되는 Mono 2.6 버전에서는 조금 더 개선될 것이라는 예상이 됩니다.

      2009.10.10 12:43 [ ADDR : EDIT/ DEL ]

기술 소식2008. 11. 3. 13:19

Mono 2.0 릴리즈 노트

Mono 2.0은 오픈 소스 기반의 이식성 높은 닷넷 프레임워크 구현으로, Unix, Windows, Mac OS 등의 운영 체제를 지원합니다.

발표일: 2008년 10월 6일

Microsoft 호환 API

  • 데이터베이스 액세스를 위한 ADO.NET 2.0 API
  • 웹 기반 응용프로그램 개발을 위한 ASP.NET 2.0 API
  • 데스크톱 응용프로그램 개발을 위한 Windows Forms 2.0 API
  • XML 문서 활용 및 제어를 위한 System.XML 2.0 API
  • 언어 연동 질의 (LINQ) 구현을 위한 System.Core API
  • XLINQ 구현을 위한 System.Xml.Linq API
  • 이식성 높은 그래픽 렌더링을 제공하는 System.Drawing 2.0 API

Mono API

  • Gtk# 2.12: Gtk+ 2.12와 GNOME 라이브러리에 대응되며, Linux, Windows, Mac OS X를 위한 데스크톱 응용프로그램 개발을 지원합니다.
  • Mono.Cecil: ECMA CLI 규격에 맞는 바이너리 파일을 생성하기 위한 라이브러리
  • Mono.Cairo: 2D 그래픽 렌더링을 위한 Cairo 그래픽 라이브러리 (이미지, GUI, 포스트스크립트, PDF 등의 생성을 지원합니다.)
  • Mono의 SQLite 지원: SQLite 기반 데이터베이스를 생성하거나 활용할 수 있습니다.
  • Mono.Posix: Linux와 Unix에 한정되는 기능을 관리되는 응용프로그램상에서 활용할 수 있게 하며, 저수준/고수준 API를 모두 제공합니다.

Mono에 번들링된 Thirdparty API

  • PostgreSQL, DB2, Oracle, Sybase, Microsoft SQL Server, SQLite, Firebird를 지원합니다.
  • C5 제네릭스 라이브러리: 제네릭 기반 컬렉션 클래스 라이브러리인 C5 라이브러리를 번들링하였습니다.

컴파일러

  • LINQ의 모든 사양을 지원하는 C# 3.0 컴파일러가 제공됩니다.
  • Visual Basic 8.0 컴파일러가 제공됩니다.
  • IL 어셈블러, 디스어셈블러와 개발에 필요한 모든 도구가 제공됩니다.

도구

  • 디버거: 관리 코드 환경에서 사용 가능한 첫 공식 디버거가 제공됩니다.
  • Gendarme: 닷넷 기반 응용프로그램과 라이브러리의 문제점을 진단합니다. 컴파일러가 진단하지 못하는 문제들을 추가 점검할 수 있도록 고안되었습니다.
  • Mono Linker: Mono 런타임 전체를 배포하지 않고 필요한 어셈블리군만을 통합하여 배포 런타임의 크기를 줄일 수 있도록 도와줍니다.
  • 이 외에도 Mono Tuner, Mono 문서화 도구가 제공됩니다.

라이선스

Mono는 오픈 소스 프로젝트로서, 클래스 라이브러리와 C# 컴파일러는 MIT X11 라이선스, 런타임은 GNU LGPL, SDK 도구들은 GNU GPL과 MIT X11 라이선스로 나뉘어서 제공됩니다.
Mono을 정적으로 링크하는 경우 (예를 들어 Apple iPhone이나 Nintendo Wii 또는 다른 모든 형태의 사유형 운영 체제들을 위하여) 라이선스를 별도로 문의할 수 있습니다.

주요 포커스

  • Windows Forms: ToolStrip과 MenuStrip이 완전히 구현되었습니다. 기존 Windows Forms 1.0의 메뉴 및 도구 모음 컨트롤도 유효합니다.
  • Windows Forms: VirtualMode 등 몇 가지 고급 기능이 누락되기는 하였지만, 이전보다 더 낳은 DataGridView 컨트롤이 제공됩니다.
  • Windows Forms: Mozilla Gecko 렌더링 엔진을 기준으로 WebBrowser 컨트롤이 구현되어있습니다.
  • Windows Forms: TableLayoutPanel, FlowLayoutPanel, SplitContainer와 같은 특수 컨테이너 컨트롤이 구현되었습니다.
  • Windows Forms: XIM을 통한 다국어 입력이 지원됩니다.
  • News: Paint.NET 3.0의 포팅 작업이 일정 수준 이상 진행되었습니다.
  • Component: 성능 카운터 구현이 제공됩니다.
  • ASP.NET: Virtual Path Provider 기능이 제공되며, Browser 정보 파일을 사용할 수 있습니다.
  • Visual C++: Microsoft Visual C++ 7.0 컴파일러 이후부터 제공되는 혼합 모드 어셈블리를 Windows용 모노에서 실행할 수 있습니다.
  • BCL: 64비트 인덱스를 사용하는 대규모 배열을 지원합니다. (--enable-big-arrays 옵션이 필요합니다.)
  • DTrace 지원: Mac OS X와 Solaris에서 Mono를 사용할 경우 DTrace 추적을 지원합니다. (--enable-dtrace 옵션이 필요합니다.)

Mono 프로젝트 홈페이지: http://www.mono-project.com/
Mono 2.0 다운로드 페이지: http://www.go-mono.com/mono-downloads/download.html

출처: http://www.mono-project.com/Release_Notes_Mono_2.0

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

  1. 김시억

    웹브라우져컨트롤에 로딩된 html페이지 자바스크립트실행관련

    <select id="editorSelect" name="editorSelect" onchange="tool_EditorChange(this.value, true);">
    <option value="H" >에디터</option>
    <option value="S">HTML</option>
    <option value="T" >텍스트</option>
    </select>

    이렇게 되어 있는데요..HTML 이거를 선택되게 해야하는데요.....

    WebBrowser1.Document.GetElementById("editorSelect").SetAttribute("value", "S");
    Object[] args4 = new Object[1];
    args4[0] = "this.value";
    WebBrowser1.Document.InvokeScript("tool_EditorChange", args4);


    이렇게 해도 셀렉트박스가 변경이 되지를 않네요 ㅠ.ㅠ.
    조언을 다시한번더 부탁드립니다

    2008.10.21 01:40 [ ADDR : EDIT/ DEL : REPLY ]
    • 답이 조금 늦었네요. tool_EditorChange 메서드가 혹시 C#에서 작성한 메서드라면, 그리고 이벤트 메서드로 private 접근 제한자가 걸려있으면 ScriptingObject로 설정했어도 이벤트가 걸리지 않습니다.

      제 생각에는, DocumentCompleted 이벤트를 통하여 해당 SELECT 요소를 찾아서 onchange 이벤트를 C# 코드에서 걸어주는것이 좋지 않나 생각이 듭니다.

      2008.10.29 00:53 [ ADDR : EDIT/ DEL ]
  2. VB.NET 의 mono 컴파일러는 없는걸로 기억하고있는데. Mono 2.0에서 지원하기 시작했군요...
    그런데 c#컴파일러는 C# 3.0 버전이고 VB.NET은 8.0이네요 지금 나와있는게 9.0일텐데.. 나중에 한번 해보고 싶긴한데.. 윈도판에는 모노 컴파일러가 없는거 같네요. 그냥 인터프리터만 들어있고..(XSP(ASP.NET)를 VB.NET 코드로 짜도 에러 안날려나.. (1.0에서는 에러났음))

    그리고 모노덕에 C#, VB.NET(이건 좀 불확실)이 멀티 플랫폼이 됬죠..

    2008.11.19 13:59 [ ADDR : EDIT/ DEL : REPLY ]
    • 닷넷은 속도가 좀 느리긴 하지만 CLR, CLI에 대한 대체 구현이 하나 둘씩 자바의 경우처럼 만들어지고 있고 각기 목적이 있습니다. 실버라이트, 닷넷 마이크로 프레임워크 (컴팩트 프레임워크가 아닙니다), GNU .NET 외에도 MS가 내세우는 비 윈도우 기반 OS인 미도리의 전신으로 추정되는 연구형 OS 프로젝트인 싱귤래러티가 채택하는 Bartok 컴파일러 및 관련 런타임 등등 상당히 많은 편입니다. 점점 선택의 폭도 넓어질 것이고 닷넷이 윈도 OS 전용이라는 편견도 더 빠르게 깨어질 것이라고 생각합니다.

      사설이 좀 길었습니다. ^^; VB.NET 컴파일러는 보신대로 8.0 버전에 머물러 있는 상태입니다. (많이 아쉽죠. ㅎㅎ) 약간씩 차이가 있는 것으로 알고 있습니다만 VB.NET 컴파일러가 포함되지 않은 배포판을 받으셨다면 모노 SVN 노드에서 VB.NET 컴파일러를 받아보실 수도 있을 듯 합니다.

      개인적으로는 모노의 모든 기능을 경험하고 이해하는 방법으로 VMware 기반 패키지를 사용하는 것을 권하고 싶습니다. 윈도우를 지우지 않아도 곧바로 원하는 환경으로 전환해서 개발하는 것도 가능하고 상당히 요긴하게 쓰입니다. :-)

      2008.11.19 18:17 [ ADDR : EDIT/ DEL ]

기술 소식2008. 8. 8. 16:47

Mono 1.0이 나온지 무려 4년여만에 2.0이 새롭게 모습을 드러내고 있습니다. 정식 버전은 올해 가을에 발표될 예정이며 이제 슬슬 그 윤곽을 드러내고 있습니다.

http://mono.ximian.com/monobuild/preview/archive/2.0/windows-installer/0/mono-2.0-gtksharp-2.10.4-win32-0.exe

Mono 2.0은 Microsoft .NET Framework 2.0과의 호환성을 상당부분 개선하였으며, C# 3.0 스펙과, Visual Basic 컴파일러를 내장하고 있고, IronPython과 Microsoft DLR 환경을 지원하는, 멀티 플랫폼 기반 CLI 프레임워크입니다. Microsoft .NET이 Windows에 최적화된 것이 특징이라면 Mono는 이와는 반대로 다양한 플랫폼에 걸쳐서 다재다능한 역할을 수행해내는 것이 다른 점이며, 최근에는 임베디드 장비로도의 이식이 진행 중입니다.

Major Highlights (주요 변경 사항)

Mono 2.0 is a major milestone in the Mono project, and it supports the following features:
Mono 2.0은 Mono 프로젝트에 있어서 중요한 전환점이며, 다음의 기능들을 지원합니다:

Microsoft Compatible API (Microsoft 호환 API):

  • ADO.NET 2.0 API for accessing databases.
    데이터베이스 접근을 위한 ADO.NET 2.0 API를 지원합니다.
  • ASP.NET 2.0 API for developing Web-based applications.
    웹 기반 응용프로그램 개발을 위한 ASP.NET 2.0 API를 지원합니다.
  • Windows.Forms 2.0 API to create desktop applications.
    데스크톱 응용프로그램 개발을 위한 Windows Forms 2.0 API를 지원합니다.
  • System.XML 2.0: An API to manipulate XML documents.
    XML 문서를 다루기 위한 API인 System.Xml의 2.0 API를 지원합니다.
  • System.Core: Provides support for the Language Integrated Query (LINQ).
    언어 통합 질의문 (LINQ)를 위한 System.Core API를 지원합니다. (닷넷 3.5)
  • System.Xml.Linq: Provides a LINQ provider for XML.
    Linq를 통한 XML 접근을 위한 XLinq를 지원합니다.
  • System.Drawing 2.0 API: A portable graphics rendering API.
    이식 가능한 그래픽 API인 System.Drawing의 2.0 API를 지원합니다.

Mono APIs (Mono 고유의 API, Microsoft .NET에는 없는 사항들입니다):

  • Gtk# 2.12: A binding to the Gtk+ 2.12 and GNOME libraries for creating desktop applications on Linux, Windows and MacOS X.
    Gtk+ 2.12와 GNOME 라이브러리에 바인딩되는 GTK# 2.12를 제공하여 리눅스, 윈도, 맥 OS X를 위한 데스크톱 응용프로그램을 제작할 수 있습니다.
  • Mono.Cecil: A library to manipulate ECMA CLI files (the native format used for executables and libraries).
    ECMA CLI 파일을 낮은 수준에서 재생산할 수 있는 Mono.Cecil 라이브러리를 제공합니다. (System.Reflection.Emit보다 한단계 더 낮은 수준의 기능을 뜻합니다. Mono.Cecil을 이용하면, 프레임워크의 버전이나 환경을 초월하는 특수 어셈블리 생산이 가능합니다.)
  • Mono.Cairo: A binding to the Cairo Graphics library to produce 2D graphics and render them into a variety of forms (images, windows, postscript and PDF).
    Cairo 그래픽 라이브러리에 바인딩되는 Mono.Cairo 라이브러리를 제공하며, 이미지, GUI, 포스트스크립트, PDF 제작을 지원합니다.
  • Mono's SQLite support: a library to create and consume databases created with SQLite.
    SQLite 데이터베이스에 관한 API가 제공됩니다.
  • Mono.Posix: a library to access Linux and Unix specific functionality from your managed application. With both a low-level interface as well as higher level interfaces.
    리눅스와 유닉스 시스템의 낮은 수준 API들과 함께 이를 응용하는 고급 API들을 공개적으로 지원하는 Mono.Posix 라이브러리를 제공합니다. Microsoft .NET의 Microsoft.Win32 네임스페이스의 위치와 유사한 것입니다.

Third Party APIs bundled with Mono (Mono에 번들링된 써드파티 API들, 역시 Microsoft .NET에는 없는 사항들입니다):

  • Extensive support for databases: PostgresSQL, DB2, Oracle, Sybase, SQL server, SQLite and Firebird.
    PGSQL, DB2, Oracle, 사이베이스, SQL 서버, SQLite, 파이어버드 DB와의 연동을 제공합니다.
  • C5 Generics Library: we are bundling the C5 generics collection class library as part of Mono.
    C5 제네릭 라이브러리를 번들링합니다. (제네릭을 이용한 다양한 컨셉 컬렉션을 제공합니다. C++ STL과 비슷한 개념으로 생각하시면 됩니다.)

Compilers (컴파일러):

  • C# 3.0 compiler implementation, with full support for LINQ.
    C# 3.0 컴파일러와 함께 LINQ가 지원됩니다. (C# 1.0과 2.0은 이미 지원되고 있습니다.)
  • Visual Basic 8 compiler.
    Visual Basic 8.0 컴파일러가 지원됩니다.
  • IL assembler and disassembler and the development toolchain required to create libraries and applications.
    IL 어셈블러와 디스어셈블러가 지원됩니다.

좀 더 자세한 정보는 http://www.mono-project.com/ 을 참고하세요. :-)

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

Linux + .NET2008. 8. 5. 00:33

지난번에 이어서 이번 글에서는 MonoDevelop을 이용하여 지역화 프로그래밍을 다루는 방법을 소개하고자 합니다. 이미 이전 글에서 언급하였듯이 Mono에서는 지역화를 위하여 libintl 기반의 프로그래밍 기법을 사용합니다. Microsoft .NET Framework가 사용하는 방법과는 다소 차이가 있으며 접근 방법도 조금 다릅니다.

국제화 기능을 적용해보기 위하여 새로운 프로젝트를 하나 만들어 보도록 하겠습니다.

사용자 삽입 이미지

새로운 프로젝트를 여느떄와 같이 작성합니다.

사용자 삽입 이미지

하단의 Translation 항목을 체크하면 추가할 지역화 대상 언어를 관리할 수 있는 리스트박스와 UI가 나타나는 것을 볼 수 있습니다. Add 버튼을 클릭합니다.

사용자 삽입 이미지

언어와 함께 지역 코드를 선택할 수 있는 세부 대화 상자가 나타납니다. 우리가 여기서 시험해 볼 것은 단순한 번역이므로 지역 코드는 사용하지 않고 언어만을 선택하기로 합니다. Korean (한국어)를 선택하고 OK 버튼을 클릭합니다. 같은 방법으로 Japanese (일본어)도 추가합니다.

사용자 삽입 이미지

C# 프로젝트 외에 지역화 프로젝트가 추가된 것을 볼 수 있습니다. 지역화 프로젝트를 사용하기 전에 C# 프로젝트에도 약간의 추가 작업이 필요하므로 다음 단계를 계속하기로 합니다.

사용자 삽입 이미지

C# 프로젝트의 References 폴더를 오른쪽 버튼으로 클릭한 다음, "Edit References" 메뉴를 클릭하면 위와 같이 대화 상자가 나타납니다. 수많은 어셈블리 참조들이 있는데 이 중에서 Mono.Posix 항목 앞의 체크 박스를 클릭하고 OK 버튼을 클릭합니다. Mono.Posix 어셈블리의 유틸리티 클래스를 기준으로 번역할 메시지를 찾고, 여기에 맞는 파일을 제공할 수 있습니다.

사용자 삽입 이미지

C# 코드 편집기에서 사용이 편할 수 있도록 Mono.Unix 네임스페이스를 using 절에 추가합니다. Mono.Unix 네임스페이스를 가지고 프로그래밍하는것은 잠시 후에 다시 살펴보겠습니다.

사용자 삽입 이미지

이번에는 국제화 프로젝트 항목을 오른쪽 버튼으로 클릭하여 Options 메뉴를 클릭합니다.

사용자 삽입 이미지
 

Init String 항목을 잘 살펴보시기 바랍니다. 이 항목에 나타나있는대로 libintl을 초기화해야 실질적인 연동이 가능합니다. 여기서 참고해야 할 것은, 지역화 프로젝트도 여러 개가 존재할 수 있다는 점입니다. Package Name 부분을 달리 설정하면 이러한 내용이 반영됩니다. Package Name을 입력하면 Init String 항목도 같이 바뀌는 것을 볼 수 있습니다.

사용자 삽입 이미지

위의 Init String 항목의 내용을 기억하여 호출할 때 전달할 인수를 정확히 지정해야 합니다. 아래는 C# 코드에서 카탈로그를 실제로 초기화한 예제입니다.

사용자 삽입 이미지

이렇게 함으로서 런타임 상에서의 libintl 연동이 가능해졌습니다. 그렇다면 실제로 다국어 번역을 어떻게 이끌어낼 수 있을까요?

사용자 삽입 이미지

Catalog 클래스 내의 GetString 메서드를 사용하여 기준이 되는 영어 문장을 먼저 입력합니다. 만약 복수 명사를 구분하여 취급할 필요가 있다면 GetPluralString을 대신 이용합니다. 여기서는 간단한 인사 메시지 번역을 해볼 것이므로 GetString 메서드를 이용합니다. 번역할 대상이 있으면 GetString 메서드에 전달된 인수에 대응되는 국제화 프로젝트 내의 실제 문자열로 치환되어 반환될 것이며, 그렇지 않으면 Fallback 모드로 대응되어 전달한 인수 그대로 반환됩니다.

사용자 삽입 이미지

C# 프로젝트를 우선 다시 빌드합니다. 문법적인 오류가 없음을 확인합니다.

사용자 삽입 이미지

이어서 국제화 프로젝트를 오른쪽 버튼으로 클릭한 뒤 Update Translations 메뉴를 클릭하여 번역 대상 문자열 리소스들을 MonoDevelop가 수집할 수 있도록 명령을 내립니다.

사용자 삽입 이미지

이제 시험삼아서 일본어 PO 파일을 열어보겠습니다. 놀랍게도, Catalog.GetString 메서드로 호출한 대상 메시지만을 정확하게 가져온 것을 볼 수 있습니다. 이제 Translated 란에 해당 일본어 메시지를 입력하고, Comments에 약간의 부연 설명도 달아봅니다. 만약, 번역이 어려운 상태의 문장이라면 상단의 리스트 뷰에서 Fuzzy 열의 체크 박스를 클릭해놓아도 됩니다.

사용자 삽입 이미지

이제 같은 방법으로 한국어도 번역을 완성합니다. 참고로, MonoDevelop VMware Image에서는 기본적으로 한국어/일본어/중국어 입력이 지원되지 않는데 이를 해결하기 위하여 전용 IME를 설치하지 않는 대신 호스트 컴퓨터에서 해당 문자열을 클립보드로 복사하여 가상 머신에 붙여넣기하는 방식으로 가져왔습니다. :-)

사용자 삽입 이미지

다국어 프로젝트를 다시 빌드하도록 합니다. 다국어 프로젝트의 산출물은 EXE 파일이나 DLL 파일 외부에 배포되기 때문에 별도로 빌드해야 합니다. 이제, 콘솔을 열어서 해당 디렉터리까지 이동해 봅니다.

우리가 작성한 로케일 파일인 ja와 ko 파일이 있는 것을 볼 수 있습니다. 우선 일본어 파일의 내용을 제대로 반영하고 있는지 확인해보기 위하여 다음과 같이 명령을 내립니다.

  LANGUAGE=ja mono i18n_test.exe

그리고 한국어도 같은 방법으로 테스트할 수 있습니다.

  LANGUAGE=ko mono i18n_test.exe

만약 LANGUAGE 변수 설정 없이 시작하면 어떨까요? 기본 문자열이 나타나겠지요. :-)

** 노트: 정정사항이 있습니다. 다음 그림에서처럼 빌드 유형에 대하여 실행 방법을 정의하여 외부 콘솔 프로그램에서 띄워볼 수 있도록 할 수도 있습니다.

사용자 삽입 이미지

다음번에는 GTK# 디자이너인 Stetic을 이용한 간단한 응용프로그램 디자인 및 테스트를 다루어보기로 하겠습니다. 감사합니다. :-)

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요

포트폴리오2007. 12. 8. 13:35

xPlatform의 Win32 API 영역 중에 Microsoft Visual C++ Runtime에 관한 정보 수집이 어느 정도 완료되었고 이것을 바탕으로 Phase #1을 이번달 말에 예정대로 런칭할 계획입니다. Visual C++ Runtime (msvcrt.dll)의 상당 수의 시그니처는 libc와 일치하는 것으로 보이며 이 중 몇 가지를 시험삼아 Linux 버전으로 옮겨서 작업 중입니다.

아래의 동영상은 Asianux 2.0 SP1 기반의 PC에서 Mono 1.2.5.1_3을 이용하여 xPlatform DLL을 이용한 간단한 파일 입/출력 서비스를 보여주고 있습니다. 점진적인 테스트를 거쳐 Linux에서도 표준 파일 입/출력 서비스 및 기본 C 런타임을 사용할 수 있도록 준비할 계획입니다.

Posted by Cloud Developer 남정현 (rkttu.com)

댓글을 달아 주세요