SQLER에 제가 글쓴지 얼마나 됐나요? 1년 넘었나요? 닷넷 프론티어는 잘 들 있는지 모르겠군요.
망할 정부표준 프레임워크 때문에 닷넷 하던 업체들 죄다 자바로 전향돼서 울며 겨자먹기로 자바 하신 분. 저뿐만은 아닐겁니다.
그렇다고 죽을 제가 아니죠.
애저가 리눅스 가상컴도 지원한다고 발표한 지 꽤 됐는데.
마침 체험에 리눅스가 뙇!
체험을 통해서 한번 제가 해보도록 하겠습니다.
으아아아아아아아아아아!
윈도우 기준 가상컴 가격 (종량제)
계산 인스턴스 이름 | 가상 코어 | RAM | 기본 인스턴스신규 (시간당 가격) | 표준 인스턴스 (시간당 가격) |
---|---|---|---|---|
매우 작음(A0) | 공유 | 768MB | ₩21.60 (~₩16,071/월) | ₩31.80 (~₩23,660/월) |
작음(A1) | 1 | 1.75GB | ₩114 (~₩84,816/월) | ₩127.20 (~₩94,637/월) |
보통(A2) | 2 | 3.5GB | ₩228 (~₩169,632/월) | ₩254.40 (~₩189,274/월) |
큼(A3) | 4 | 7GB | ₩456 (~₩339,264/월) | ₩508.80 (~₩378,548/월) |
매우 큼(A4) | 8 | 14GB | ₩912 (~₩678,528/월) | ₩1,017.60 (~₩757,095/월) |
리눅스 기준 가상컴 가격 (종량제)
계산 인스턴스 이름 | 가상 코어 | RAM | 기본 인스턴스신규 (시간당 가격) | 표준 인스턴스 (시간당 가격) |
---|---|---|---|---|
매우 작음(A0) | 공유 | 768MB | ₩21.60 (~₩16,071/월) | ₩31.80 (~₩23,660/월) |
작음(A1) | 1 | 1.75GB | ₩82.80 (~₩61,604/월) | ₩97.20 (~₩72,317/월) |
보통(A2) | 2 | 3.5GB | ₩165.60 (~₩123,207/월) | ₩194.40 (~₩144,634/월) |
큼(A3) | 4 | 7GB | ₩331.20 (~₩246,413/월) | ₩388.80 (~₩289,268/월) |
매우 큼(A4) | 8 | 14GB | ₩662.40 (~₩492,826/월) | ₩777.60 (~₩578,535/월) |
으컥러ㅓ거
MS도 리눅스를 아나 봅니다. 일단 매우 작음 빼고는 전체적으로 윈도우보다 저렴하게 선보였습니다.
윈도우 체험 계정은 내가 가상환경을 체험해 줬어. 그것도 아주 크고 아름다운 상품으로 말야.
매우 큼 인스턴스를 체험해주게 해주는 위엄으로 뭘 하냐면..
모노 깔겠습니다.
흐히힣. 닷넷을 리눅스로 돌리는 모노입니다.
현재 버전은 닷넷 4.5 가 거의 대부분 호환됩니다. 물론 OS 종속 클래스 빼고.
모노. 닷넷 개발자분이라면 많이들 들어보셨을 겁니다.
모른다구요? 그럼 나보다 더 전문적인 엄준일님의 정확한 설명 듣고 가시겠습니다.
이제 뭔지 알겠다면 시작하겠습니다. 이번 애저 후기에 리눅스가 깔린 관계로 작정하고 모노를 깔면서 후기를 올리겠습니다.
리눅스 가상컴이 깔린 애저 관리자 화면을 먼저 보시겠습니다.
어자피 잘린 계정 모자이크 철이 해서 뭐하리 그냥 보여드리겠습니다.
언뜻 보면 무슨 OS인지 분간하기 힘듭니다. 하지만 리눅스 가상컴의 특징은...
맨 아래 보시면 연결 버튼이 비활성화되어 있습니다. 윈도우 가상이라면 원격 데스크탑 연결하는 파일이라도 주는 기능이죠.
리눅스니까 원격 데스크탑 없으니 줄 리가 없죠. 알아서 접속해도 요즘 좋게좋게 접속되니 굳이 뭐..
이제 연결해 보겠습니다.
연결하면 우분투라 뜹니다. 그리고 끝점에 22번 포트가 열려서 그냥 접속이 되죠.
만약 실제 운영하실 거라면 22번 포트 여는 건 거의 자살행위일 겁니다 ㅋㅋ.
테스트니 걍 냅두겠습니다.
우분투입니다. 신선한 우분투죠. 윈도우 애저의 힘들 받았다고 하지만 그래봤자 우분투입니다.
이제 여기서 모노를 설치하겠습니다.
먼저 모노에 필요한 라이브러리들을 받아야 합니다. 우분투니 아래 명령을 실행하겠습니다.
아참, sudo 하고 하세요. 애저의 우분투는 root 가 비공개라서 su 쳐봐야 비번도 모르는 상태에서는 뭐 할 수가 없어요.
물론 su passwd root 치면 root 비번 바꿔서 행세할 수는 있죠. 뭐.. 여러가지 방법이 있지만 논외로 하겠습니다.
대신 sudo 하고 현재 계정 비번을 입력하면 root 에 준하는 작업을 수행할 수 있습니다.
단지 조금 불편할 뿐이죠.
그냥 실행하세요.
액티브엑스 깔때 여러분 Y 누르잖아요. Y 쳐줍시다.
이런.. 실패떴네요.
하아.. 애저 우분투 저장소는 왜이렇게 없는게 많습니까..
몇 번 해도 안되니 특단의 조치를 취하겠습니다.
우분투 저장소를 한국서버로 옮겼습니다. Daum 과 Neowiz 가 우분투 저장소 서버를 제공하죠.
어자피 서버 위치가 일본이라서 한국섭으로 해도 크게 지장은 없습니다. 물론 일본 서버를 안다면 더 빠르겠죠.
그런 다음 apt-get update 쳐서 최신 상태를 유지합니다.
그리고 다시 시도해 본 결과...
오류 없이 필요 라이브러리가 성공적으로 설치됐습니다.
이제 모노를 깔아보겠습니다. 모노를 설치하기 위해 폴더를 만들어야겠죠? 만들어 주고.
현재 모노 최신 버전이 3.4.0 이라서 3.4.0을 설치하겠습니다.
여기에 libgdiplus 를 github 저장소에서 받겠습니다.
cd libgdiplus
./autogen.sh --prefix=/opt/mono-3.4.0 --libdir=/opt/mono-3.4.0/lib
make
make install
cd ..
그리고 설치합니다.
물한잔 먹고.. 이제 make!
아 맞다 루트권한..
컴파일 완료됐으면 아래 명령을 실행하여 본격적인 mono 를 설치하겠습니다.
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
압축 풀고.
아까 libgdiplus 설치했듯이 설치하면 됩니다.
그다음 make 로 컴파일 해줍시다. 위에 보이시죠? 닷넷 4.5 지원되는거.
어.. 뭔가 잘못됐나..
하지만 다시 할 자신이 없지만 일단은 잘되는지부터 확인해 보도록 하겠습니다.
mono --version 으로 모노가 잘 동작하는지 확인해 보겠습니다.
잘 됩니다. 다행이군요.
그렇다면 한번 프로그램 돌려보도록 하겠습니다.
그전에 일반 사용자에게 mono를 쉽게 돌릴 수 있도록 심볼릭 링크(바로가기)를 만들겠습니다.
사용자 폴더/bin 폴더에 mono 폴더를 바로 가기로 만든 다음,
사용자폴더/.bashrc 파일을 편집하여 사용자가 접속할 때마다 모노 개발과 실행 환경을 생성하도록 하겠습니다.
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
이렇게까지 하면 모노 개발과 실행 환경의 준비는 끝.
이제 테스트 해봐야겠죠?
Hello.cs 파일 하나 만들어 보겠습니다.
mcs Hello.cs 를 실행하여 컴파일하겠습니다.
어.. 오타났네 ㅋㅋ;;
오타 수정해 주고.. 다시 해보겠습니다.
mcs hello.cs 로 컴파일 해준 다음,
mono hello.exe 로 컴파일된 모노 파일을 실행해 줘서 원하는 결과가 나왔습니다.
휴우. 고생 좀 했습니다.
하지만 이걸로 끝나면 애저 체험이 너무나 허전합니다.
그래서 저는 김대우 형님께 미리 알린 대로 Nancy Framework 를 리눅스 환경에서 돌려보도록 하겠습니다.
윈도우 환경에서 개발할 시, 준비물은 비주얼 스튜디오 2010 이상과 mono 윈도우 버전이면 끝입니다.
저 환경에 MonoDevelop 가 없는데, 비주얼 스튜디오 없다면 MonoDevelop 깔아도 됩니다. 특히 다른 OS라면.
준비 됐으면 키고, 콘솔 응용 프로그램을 만들겠습니다. Nancy 웹 프레임워크는 독립성이기 때문에 어느 환경에서도 웹이 돌아가는 환경을 추구하다 보니 리눅스도 잘 돌아갑니다. 일단 실행 파일 하나 만들어야죠?
Nancy 는 다양한 환경에서도 돌아가도록 구성했습니다. Nancy.Hosting.Self 로 스스로 웹 환경에서 돌아가도록 하겠습니다.
nuget 으로 Nancy.Hosting.Self 만 깔면 끝. 종속된 모듈 당연히 설치됩니다.
그러면 주저 없이 실행 파일 소스를 구성하겠습니다.
소스 코드는 아래와 같습니다.
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번 포트로 돌아가는 웹 서버를 구성하겠습니다.
그리고 접속하면 뭐라도 띄울 라우팅을 구현하겠습니다.
소스는 아래와 같습니다.
namespace NancyDemo
{
public class HelloModule : NancyModule
{
public HelloModule()
{
Get["/"] = parameters => "Hello World";
}
}
}
준비는 됐으니 이제 빌드해 보겠습니다.
하지만 리눅스에서 돌릴려고 하기 때문에 MSBuild 쓰면 안됩니다.
mono 빌드를 써야 겠죠?
"모노설치폴더/bin/xbuild.bat" "솔루션파일.sln"
위 명령어로 빌드하시면 됩니다.
별 문제 없이 빌드됐습니다. 이제 리눅스로 옮기겠습니다. SFTP를 통해 파일질라 같은 FTP 클라이언트로 파일을 옮기면 됩니다.
필요한 파일은 Build 된 exe 파일과 종속되는 DLL 파일입니다. 모두 모노 빌드이기 때문에 리눅스에서도 문제 없이 돌아갑니다.
또한 리눅스에서 돌릴 거기 때문에 버전 정보 같은 쓸데없는 메타데이터는 빠져서 윈도우에서 보면 신뢰된 DLL인지 알 길이 없긴 하죠.
위에 선택된 파일을 FTP를 통해 옮기겠습니다.
제가 테스트했던 hello 프로그램도 있네요.
주저없이 실행하도록 하겠습니다.
mono NancyMonoTest.exe
근데 이상하게 실행이 안됐습니다. MONO_GC_PARAMS 환경변수가 빠졌다고 안되는게 그 이유인데요.
분명 .bashrc 에 환경세팅이 되있는데 왜 안됄까요..
어떻게 해야 하나 해매다가 그냥 콘솔에 직접 환경변수를 세팅하면서 사태는 해결됐습니다.
아무래도 max-heap-size 속성은 필수값인가 봅니다.
하지만 .bashrc 에 세팅을 해야 나중에 괜한 고생 안합니다.
위에 URL 나오면 일단 성공!
...인데 이번엔 외부에서 접속 불가...
윈도우 애저에서 끝점 추가해서 8888 포트를 외부에서 열어주시고.
우분투 방화벽에서도 포트를 열어 테스트 가능하게 하도록 하겠습니다.
ufw allow 8888
명령 실행하면 바로 적용됩니다.
웹 프레임워크 실행은 성공적이긴 한데..
어.. 어? 왜 404 뜨지.. 낸시의 기본 제공되는 404 화면은 정말 귀엽습니다.
알고보니 라우팅 들어간 클래스가 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