개발환경(C#): Linux + Monodevelop

이번 챕터에서는 리눅스 데스크탑에서 Monodevelop IDE 를 이용해서 C# 프로젝트를 개발하는 방법에 대해서 설명합니다.

C# 프로젝트는 CentOS 리눅스는 지원하지 않기 때문에 우분투 리눅스를 기준으로 설명합니다.

Monodevelop 설치하기

Monodevelop IDE 공식 사이트의 설치 가이드에 따르면 Mono 프로젝트에서 공식적으로 지원하는 Mono 저장소를 추가하도록 안내하고 있습니다. 그러나, 아이펀 엔진을 설치하는 과정에서 이미 추가했던 저장소에서 설치가 가능합니다.

만약, Mono 프로젝트 저장소를 추가해야 한다면 Monodevelop IDE 설치 가이드의 저장소 대신 아래 방법에 따라 아이펀 엔진 가이드에서 안내하는 저장소를 설정해 주시기 바랍니다.

Important

우분투 리눅스 배포판 별로 기본적으로 설치되는 Mono 라이브러리 버전이 다릅니다.

아이펀 엔진은 구버전의 Mono 라이브러리도 지원하고 있습니다만, C# 프로젝트의 안정적인 동작을 위해서 아이펀엔진과 Monodevelop 개발도구를 설치하기 전에 반드시 아래 절차를 따라 Mono 라이브러리 저장소를 설정 해 주시기 바랍니다.

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

// Ubuntu 16.04 일 경우
echo "deb http://download.mono-project.com/repo/ubuntu stable-xenial/snapshots/6.8 main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list

// Ubuntu 18.04 일 경우
echo "deb http://download.mono-project.com/repo/ubuntu stable-bionic/snapshots/6.8 main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list

// Ubuntu 20.04 일 경우
echo "deb http://download.mono-project.com/repo/ubuntu stable-focal/snapshots/6.8 main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list

Mono 프로젝트 저장소를 추가했다면 apt 명령을 통해서 monodevelop 패키지를 설치하면 됩니다.

sudo apt-get update
sudo apt-get install monodevelop

Important

현재 아이펀엔진 C#은 Flatpak 버전의 MonoDevelop 를 지원하지 않습니다.

새 프로젝트 생성

프로젝트는 monodevelop 를 통해서 생성할 수 없기 때문에 리눅스 커맨드라인에서 다음과 같이 입력하여 hello 라는 서버 프로젝트를 생성합니다.

$ funapi_initiator hello --csharp

Important

Monodevelop IDE를 사용하기 위해서는 프로젝트를 반드시 C# 프로젝트 로 생성해야 합니다. 즉, 위의 예에서 --csharp 을 반드시 쓰셔야 됩니다.

Monodevelop 로 프로젝트 열기

  1. Monodevelop을 실행합니다.

_images/mono-1.png
  1. 좌측 상단의 파일 을 클릭 후 열기 버튼을 누릅니다.

_images/mono-2.png
  1. 프로젝트 내 mono 디렉토리에 있는 hello.csproj 혹은 hello.sln 파일을 엽니다. (프로젝트 이름이 hello 가 아닌 경우 {{ProjectName}}.csproj 혹은 {{ProjectName}}.sln 파일을 엽니다.)

_images/mono-3.png

프로젝트를 로드하는 모든 과정이 끝났습니다. 프로젝트가 열리게 되면 코딩을 시작하실 수 있습니다.

_images/mono-4.png

Monodevelop 로 빌드하기

특별한 설정 없이 Build 메뉴나 F8 버튼을 눌러 빌드를 하실 수 있습니다. 또한 프로젝트를 우클릭하여 Build, Rebuild, Clean 등의 기능을 활용할 수도 있습니다.

_images/mono-5.png

Monodevelop 7 버전에서 실행 시

7 버전에서 프로젝트를 실행할 때는 다음 그림과 같이 {프로젝트 이름}-Custom Command 를 대상으로 지정해야 정상적인 실행이 가능합니다.

_images/mono-13.png

Monodevelop 7 이전 버전에서 생성한 프로젝트를 7 버전에서 실행할 때

7 이전 버전에서 생성한 프로젝트를 7 버전에서 실행할 경우 정상적인 빋드가 되지 않을 수 있습니다. 이 때는 Monodevelop에서 생성한 빌드 파일({프로젝트 디렉토리}/mono/bin} 파일을 삭제한 후 다시 시도해 주시기 바랍니다.

Monodevelop 로 디버깅하기

Mono에서 디버깅을 하기위해서는 Monodevelop IDEMono Soft Mode Debugger 기능을 이용하여 진행해야합니다.

Mono Soft Debugger 사용 설정

Mono Soft Debugger 기능을 활성화 하기 위해 환경 변수에 MONODEVELOP_SDB_TEST 값을 설정합니다. 아래 명령을 입력합니다.

$ echo "export MONODEVELOP_SDB_TEST=1" >> ~/.profile

해당 내용이 진행 되고 나면 로그아웃했다가 다시 로그인하거나 재부팅하여 해당 내용을 적용합니다. 환경 변수가 설정 되었는지 확인은 아래와 같이 하실 수 있습니다.

$ echo $MONODEVELOP_SDB_TEST
1

이제 Monodevelop 을 실행하여 상단의 Run With 의 하위 메뉴를 확인합니다. 그 다음 하위 메뉴에 있는 Custom Command Mono Soft Debugger 를 클릭합니다.

_images/mono-10.png

Listen 을 클릭합니다. 여기까지 Monodevelop IDE에서 설정은 끝입니다. Monodevelop IDE는 이제 디버깅을 대기하는 상태입니다.

_images/mono-11.png

이제, 게임 서버를 실행시켜 디버거에 연결합니다. 다음과 같이 입력합니다.

$ ./hello/mono/bin/Debug/buildcpp/hello-local --mono_debug

아래와 같이 디버깅 과정을 진행됩니다.

_images/mono-12.png

Monodevelop 7 버전에서 Mono Soft Debugger 사용

7 버전부터는 Mono Soft Debugger 기능이 Custom Configuration 설정으로 옮겨졌습니다.

_images/mono-14.png

Custom Configuration 설정을 클릭하면 보이는 아래 화면에서 Custom Command Mono Soft Debugger 를 클릭하면 됩니다.

_images/mono-15.png

Important

Custom Command Mono Soft Debugger 가 목록에 없다면 $MONODEVELOP_SDB_TEST 환경 변수 설정이 제대로 되어있는지 확인해 주세요.

ORM 값 확인하기

Monodevelop 디버깅 시 Watch 기능을 사용하여 ORM 의 Create(...) 로 생성 또는 Fetch(...) / FetchBy...(...) 함수로 불러온 Object 객체의 값을 확인할 수 있습니다.

아래 화면과 같이 Watch 창에 값을 보고자 하는 Object 객체의 getter 함수(Get...())를 입력하면 됩니다.

_images/mono-16.png

Important

전역 변수인 Object 객체에 접근할 때 이벤트 핸들러를 벗어나면 정상적인 값을 출력하지 않을 수 있습니다. 저장한 오브젝트 refresh 내용을 참조해 주세요.

또한, Delete() 메소드를 통해서 삭제된 Object 에 다시 접근하게 되면 서버가 크래시 할 수 있으니 주의하여 사용해야 합니다.