SQLER에 제가 글쓴지 얼마나 됐나요? 1년 넘었나요? 닷넷 프론티어는 잘 들 있는지 모르겠군요.

망할 정부표준 프레임워크 때문에 닷넷 하던 업체들 죄다 자바로 전향돼서 울며 겨자먹기로 자바 하신 분. 저뿐만은 아닐겁니다.


그렇다고 죽을 제가 아니죠.


애저가 리눅스 가상컴도 지원한다고 발표한 지 꽤 됐는데.

마침 체험에 리눅스가 뙇!


체험을 통해서 한번 제가 해보도록 하겠습니다.

으아아아아아아아아아아!


윈도우 기준 가상컴 가격 (종량제)

계산 인스턴스 이름가상 코어RAM기본 인스턴스신규 
(시간당 가격)
표준 인스턴스 
(시간당 가격)
매우 작음(A0)공유768MB₩21.60
(~₩16,071/월)
₩31.80
(~₩23,660/월)
작음(A1)11.75GB₩114
(~₩84,816/월)
₩127.20
(~₩94,637/월)
보통(A2)23.5GB₩228
(~₩169,632/월)
₩254.40
(~₩189,274/월)
큼(A3)47GB₩456
(~₩339,264/월)
₩508.80
(~₩378,548/월)
매우 큼(A4)814GB₩912
(~₩678,528/월)
₩1,017.60
(~₩757,095/월)


리눅스 기준 가상컴 가격 (종량제)

계산 인스턴스 이름가상 코어RAM기본 인스턴스신규 
(시간당 가격)
표준 인스턴스 
(시간당 가격)
매우 작음(A0)공유768MB₩21.60
(~₩16,071/월)
₩31.80
(~₩23,660/월)
작음(A1)11.75GB₩82.80
(~₩61,604/월)
₩97.20
(~₩72,317/월)
보통(A2)23.5GB₩165.60
(~₩123,207/월)
₩194.40
(~₩144,634/월)
큼(A3)47GB₩331.20
(~₩246,413/월)
₩388.80
(~₩289,268/월)
매우 큼(A4)814GB₩662.40
(~₩492,826/월)
₩777.60
(~₩578,535/월)




으컥러ㅓ거


MS도 리눅스를 아나 봅니다. 일단 매우 작음 빼고는 전체적으로 윈도우보다 저렴하게 선보였습니다.


윈도우 체험 계정은 내가 가상환경을 체험해 줬어. 그것도 아주 크고 아름다운 상품으로 말야.

매우 큼 인스턴스를 체험해주게 해주는 위엄으로 뭘 하냐면..



모노 깔겠습니다.

흐히힣. 닷넷을 리눅스로 돌리는 모노입니다.

현재 버전은 닷넷 4.5 가 거의 대부분 호환됩니다. 물론 OS 종속 클래스 빼고.

모노. 닷넷 개발자분이라면 많이들 들어보셨을 겁니다.

모른다구요? 그럼 나보다 더 전문적인 엄준일님의 정확한 설명 듣고 가시겠습니다.



이제 뭔지 알겠다면 시작하겠습니다. 이번 애저 후기에 리눅스가 깔린 관계로 작정하고 모노를 깔면서 후기를 올리겠습니다.

리눅스 가상컴이 깔린 애저 관리자 화면을 먼저 보시겠습니다.


sshot-19.png


어자피 잘린 계정 모자이크 철이 해서 뭐하리 그냥 보여드리겠습니다.


언뜻 보면 무슨 OS인지 분간하기 힘듭니다. 하지만 리눅스 가상컴의 특징은...

맨 아래 보시면 연결 버튼이 비활성화되어 있습니다. 윈도우 가상이라면 원격 데스크탑 연결하는 파일이라도 주는 기능이죠.

리눅스니까 원격 데스크탑 없으니 줄 리가 없죠. 알아서 접속해도 요즘 좋게좋게 접속되니 굳이 뭐..


이제 연결해 보겠습니다.


sshot-1.png


연결하면 우분투라 뜹니다. 그리고 끝점에 22번 포트가 열려서 그냥 접속이 되죠.

만약 실제 운영하실 거라면 22번 포트 여는 건 거의 자살행위일 겁니다 ㅋㅋ.

테스트니 걍 냅두겠습니다.


우분투입니다. 신선한 우분투죠. 윈도우 애저의 힘들 받았다고 하지만 그래봤자 우분투입니다.

이제 여기서 모노를 설치하겠습니다.


sshot-2.png


먼저 모노에 필요한 라이브러리들을 받아야 합니다. 우분투니 아래 명령을 실행하겠습니다.

아참, sudo 하고 하세요. 애저의 우분투는 root 가 비공개라서 su 쳐봐야 비번도 모르는 상태에서는 뭐 할 수가 없어요.

물론 su passwd root 치면 root 비번 바꿔서 행세할 수는 있죠. 뭐.. 여러가지 방법이 있지만 논외로 하겠습니다.

대신 sudo 하고 현재 계정 비번을 입력하면 root 에 준하는 작업을 수행할 수 있습니다.

단지 조금 불편할 뿐이죠.


모노 깔기 전 필요한 라이브러리 설치:
apt-get install libpng3 libpng3-dev libtool libtiff4 libtiff4-dev 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 mono-complete libjpeg-dev libjpeg8-dev libjpeg-turbo8-dev


그냥 실행하세요.


sshot-3.png


액티브엑스 깔때 여러분 Y 누르잖아요. Y 쳐줍시다.


sshot-5.png


이런.. 실패떴네요.

하아.. 애저 우분투 저장소는 왜이렇게 없는게 많습니까..

몇 번 해도 안되니 특단의 조치를 취하겠습니다.


sshot-6.png


우분투 저장소를 한국서버로 옮겼습니다. Daum 과 Neowiz 가 우분투 저장소 서버를 제공하죠.

어자피 서버 위치가 일본이라서 한국섭으로 해도 크게 지장은 없습니다. 물론 일본 서버를 안다면 더 빠르겠죠.

그런 다음 apt-get update 쳐서 최신 상태를 유지합니다.


sshot-7.png


그리고 다시 시도해 본 결과...


 sshot-8.png


오류 없이 필요 라이브러리가 성공적으로 설치됐습니다.

이제 모노를 깔아보겠습니다. 모노를 설치하기 위해 폴더를 만들어야겠죠? 만들어 주고.


설치 폴더 생성:
mkdir install
폴더 이동:
cd install

현재 모노 최신 버전이 3.4.0 이라서 3.4.0을 설치하겠습니다.

모노 소스 폴더 만들기:
mkdir mono-3.4.0
모노 소스 폴더 이동:
cd mono-3.4.0


sshot-4.png


여기에 libgdiplus 를 github 저장소에서 받겠습니다.

libgdiplus 설치:
git clone https://github.com/mono/libgdiplus.git
cd libgdiplus
./autogen.sh --prefix=/opt/mono-3.4.0 --libdir=/opt/mono-3.4.0/lib
make 
make install
cd ..

sshot-9.png


그리고 설치합니다.

sshot-12.png


물한잔 먹고.. 이제 make!


sshot-13.png


sshot-14.png


아 맞다 루트권한..


sshot-15.png


컴파일 완료됐으면 아래 명령을 실행하여 본격적인 mono 를 설치하겠습니다.

모노 설치:
wget http://download.mono-project.com/sources/mono/mono-3.4.0.tar.bz2
tar xfv mono-3.4.0.tar.bz2
cd mono-3.4.0
./autogen.sh --prefix=/opt/mono-3.4.0 --libdir=/opt/mono-3.4.0/lib
make 
make install
exit #if you're root


sshot-16.png


압축 풀고.


sshot-17.png


아까 libgdiplus 설치했듯이 설치하면 됩니다.


sshot-18.png


그다음 make 로 컴파일 해줍시다. 위에 보이시죠? 닷넷 4.5 지원되는거.


sshot-20.png


어.. 뭔가 잘못됐나..

하지만 다시 할 자신이 없지만 일단은 잘되는지부터 확인해 보도록 하겠습니다.

mono --version 으로 모노가 잘 동작하는지 확인해 보겠습니다.


sshot-21.png


잘 됩니다. 다행이군요.

그렇다면 한번 프로그램 돌려보도록 하겠습니다.

그전에 일반 사용자에게 mono를 쉽게 돌릴 수 있도록 심볼릭 링크(바로가기)를 만들겠습니다.


sshot-22.png


사용자 폴더/bin 폴더에 mono 폴더를 바로 가기로 만든 다음,

사용자폴더/.bashrc 파일을 편집하여 사용자가 접속할 때마다 모노 개발과 실행 환경을 생성하도록 하겠습니다.


Code:
export PATH="/home/<user>/bin/mono/bin:$PATH"
export PKG_CONFIG_PATH="/home/<user>/bin/mono/lib/pkgconfig:$PKG_CONFIG_PATH"
export MANPATH="/home/<user>/bin/mono/share/man:$MANPATH"
export LD_LIBRARY_PATH="/home/<user>/bin/mono/lib:$LD_LIBRARY_PATH"
export MONO_THREADS_PER_CPU=2048
export MONO_GC_PARAMS=nursery-size=64m


sshot-23.png


이렇게까지 하면 모노 개발과 실행 환경의 준비는 끝.

이제 테스트 해봐야겠죠?

Hello.cs 파일 하나 만들어 보겠습니다.


sshot-24.png


mcs Hello.cs 를 실행하여 컴파일하겠습니다.


sshot-25.png


어.. 오타났네 ㅋㅋ;;


오타 수정해 주고.. 다시 해보겠습니다.


sshot-26.png


mcs hello.cs 로 컴파일 해준 다음,

mono hello.exe 로 컴파일된 모노 파일을 실행해 줘서 원하는 결과가 나왔습니다.


휴우. 고생 좀 했습니다.


하지만 이걸로 끝나면 애저 체험이 너무나 허전합니다.

그래서 저는 김대우 형님께 미리 알린 대로 Nancy Framework 를 리눅스 환경에서 돌려보도록 하겠습니다.


윈도우 환경에서 개발할 시, 준비물은 비주얼 스튜디오 2010 이상과 mono 윈도우 버전이면 끝입니다.

저 환경에 MonoDevelop 가 없는데, 비주얼 스튜디오 없다면 MonoDevelop 깔아도 됩니다. 특히 다른 OS라면.


준비 됐으면 키고, 콘솔 응용 프로그램을 만들겠습니다. Nancy 웹 프레임워크는 독립성이기 때문에 어느 환경에서도 웹이 돌아가는 환경을 추구하다 보니 리눅스도 잘 돌아갑니다. 일단 실행 파일 하나 만들어야죠?


sshot-8.png


Nancy 는 다양한 환경에서도 돌아가도록 구성했습니다. Nancy.Hosting.Self 로 스스로 웹 환경에서 돌아가도록 하겠습니다.

nuget 으로 Nancy.Hosting.Self 만 깔면 끝. 종속된 모듈 당연히 설치됩니다.


sshot-9.png


그러면 주저 없이 실행 파일 소스를 구성하겠습니다.


sshot-10.png


소스 코드는 아래와 같습니다.

namespace NancyDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            var uri = "http://localhost:8888";
            Console.WriteLine(uri);
            // NancyHost 인스턴스를 초기화합니다 (Nancy.Hosting.Self 패키지에 있습니다.)
            var host = new NancyHost(new Uri(uri));
            host.Start();  // 서버 시작

            //모노에서 데몬 방식으로 돌릴 경우 Console.ReadLine 메소드가 EOF를 발생을 시킬 수 있습니다. 
            //그래서 다른 방법으로 무정지 방식을 구현합니다.
            if (args.Any(s => s.Equals("-d", StringComparison.CurrentCultureIgnoreCase)))
            {
                Thread.Sleep(Timeout.Infinite);
            }
            else
            {
                Console.ReadKey();
            }

            host.Stop();  // 서버 종료
        }
    }
}

localhost:8888 로 8888번 포트로 돌아가는 웹 서버를 구성하겠습니다.

그리고 접속하면 뭐라도 띄울 라우팅을 구현하겠습니다.


sshot-11.png


소스는 아래와 같습니다.


namespace NancyDemo
{
    public class HelloModule : NancyModule
    {
        public HelloModule()
        {
            Get["/"] = parameters => "Hello World";
        }
    }
}


준비는 됐으니 이제 빌드해 보겠습니다.

하지만 리눅스에서 돌릴려고 하기 때문에 MSBuild 쓰면 안됩니다.

mono 빌드를 써야 겠죠? 

"모노설치폴더/bin/xbuild.bat" "솔루션파일.sln"

위 명령어로 빌드하시면 됩니다.


sshot-13.png


sshot-14.png


별 문제 없이 빌드됐습니다. 이제 리눅스로 옮기겠습니다. SFTP를 통해 파일질라 같은 FTP 클라이언트로 파일을 옮기면 됩니다.

필요한 파일은 Build 된 exe 파일과 종속되는 DLL 파일입니다. 모두 모노 빌드이기 때문에 리눅스에서도 문제 없이 돌아갑니다.

또한 리눅스에서 돌릴 거기 때문에 버전 정보 같은 쓸데없는 메타데이터는 빠져서 윈도우에서 보면 신뢰된 DLL인지 알 길이 없긴 하죠.


sshot-15.png


위에 선택된 파일을 FTP를 통해 옮기겠습니다.


sshot-16.png


제가 테스트했던 hello 프로그램도 있네요.

주저없이 실행하도록 하겠습니다.

mono NancyMonoTest.exe


sshot-17.png


근데 이상하게 실행이 안됐습니다. MONO_GC_PARAMS 환경변수가 빠졌다고 안되는게 그 이유인데요.

분명 .bashrc 에 환경세팅이 되있는데 왜 안됄까요..

어떻게 해야 하나 해매다가 그냥 콘솔에 직접 환경변수를 세팅하면서 사태는 해결됐습니다.

아무래도 max-heap-size 속성은 필수값인가 봅니다.

하지만 .bashrc 에 세팅을 해야 나중에 괜한 고생 안합니다.


sshot-18.png


위에 URL 나오면 일단 성공!

...인데 이번엔 외부에서 접속 불가...


윈도우 애저에서 끝점 추가해서 8888 포트를 외부에서 열어주시고.

우분투 방화벽에서도 포트를 열어 테스트 가능하게 하도록 하겠습니다.

ufw allow 8888

명령 실행하면 바로 적용됩니다.


sshot-19.png


sshot-21.png


웹 프레임워크 실행은 성공적이긴 한데..


어.. 어? 왜 404 뜨지.. 낸시의 기본 제공되는 404 화면은 정말 귀엽습니다.


sshot-22.png


알고보니 라우팅 들어간 클래스가 public 이 아니라서 Nancy 가 라우팅 수집을 못해서 발생한 문제였습니다.

클래스에 public 달아주고 접속하면... Hello World 라고 잘 떴습니다.


이렇게 해서 리눅스 후기가 끝났습니다.

많은 삽질까지는 아니지만 이렇게 모노부터 깔고 애저에 Nancy 프레임워크를 돌려보면서.

애저에 대한 생각은 이렇습니다..


윈도우에 익숙한 크로스 플랫폼 개발자가 테스트하고 서비스하기엔 애저는 정말 익숙한 환경을 제공한다.


자바라도 다를 거 없을 겁니다.

여담으로 오라클 11g 는 리눅스 콘솔 환경에 못깔아요.


어쨌든 이것으로 후기를 마치도록 하겠습니다.

생유베리감사.


주말에 베리 아이스크림이나 먹어야 겠다.


참고 사이트:

http://forums.osgrid.org/viewtopic.php?f=14&t=4625 : HOW TO: Compile Mono 3.2.3 from source code [Universal *nix]

https://github.com/NancyFx/Nancy/wiki/Hosting-Nancy-with-Nginx-on-Ubuntu : Hosting Nancy with Nginx on Ubuntu

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 568
317 모던 비즈니스를 위한 클라우드 (6) Azure 데이터 서비스 - DaaS 코난(김대우) 2014.11.11 15574
316 모던 비즈니스를 위한 클라우드 (5) 모바일 디바이스를 위한 Mobile Service 코난(김대우) 2014.11.11 16441
315 모던 비즈니스를 위한 클라우드 (4) 클라우드 플랫폼의 주인공은 PaaS! Azure Website 코난(김대우) 2014.11.11 16198
314 모던 비즈니스를 위한 클라우드 (3) 클라우드 서비스의 초석, 인프라스트럭처 코난(김대우) 2014.11.11 14075
313 모던 비즈니스를 위한 클라우드 (2) 엔터프라이즈 클라우드, 하이브리드 클라우드 코난(김대우) 2014.11.11 14670
312 모던 비즈니스를 위한 클라우드 (1) Microsoft Azure의 숨가쁘게 달려온 1년 코난(김대우) 2014.11.11 14818
311 클라우드 모바일 서비스 서버 로직을 .NET으로! - 한걸음 더, .NET으로 암호화 루틴 추가해 보기 (3) 코난(김대우) 2014.10.15 15434
310 클라우드 모바일 서비스 서버 로직을 .NET으로! - Visual Studio로 개발과 배포를 한방에! (2) 코난(김대우) 2014.10.15 15648
309 클라우드 모바일 서비스 서버 로직을 .NET으로! - Microsoft Azure Mobile Service의 .NET backend (1) 코난(김대우) 2014.10.15 14636
308 [15차 캠프 후기]15차-Microsoft Azure 커뮤니티 연합 온라인 캠프를 참석하고... 곰붕어 2014.05.26 9749
307 [13차 캠프후기]SQL Server 2014 기능체험 - Native Backup Encryption [1] 주디아줌마 2014.04.21 9686
306 [13차 캠프후기] Windows Azure 가상머신에서 SQL Server 2014 체험 오버탑 2014.04.19 10022
305 [13차 캠프후기]SQL Server 2014 기능체험 - Azure Backup 테스트 성대중(지우아빠) 2014.04.18 9729
304 12차 캠프 후기 - XE를 애저 윈도우 가상머신에 설치하자 자윤마이1 2014.04.07 8410
303 12차 캠프 후기 - centos 잘 되네요 설인95 2014.04.07 7172
302 [12차 Azure 캠프 후기] 애저 삽질일기. 늘푸른해리 2014.04.05 6519
301 [12차 Azure 캠프 후기] 처음 사용하는 서버용 윈도우에 화내고 왔습니다;; Beulhae 2014.04.04 5993
300 [12차 Azure 캠프 후기] Windows 2012 R2에 XE 설치 삽질기 YJSoft 2014.04.04 7306
» [12차 애저후기] 적(?)과의 동침 후기. 컴포지트 2014.04.04 6621
298 [12차 체험후기] Windows Server + XE 설치기 LI-NA 2014.04.04 6449





XE Login