개발환경 (C++/C#): Linux + Visual Studio Code 원격 개발

아이펀 엔진은 Visual Studio Code(이하 VS Code)Remote - SSH 확장 프로그램을 사용해서 아이펀 엔진으로 생성한 C++ 또는 C# 프로젝트를 원격으로 개발 할 수 있도록 지원합니다.

이로써 여러분은 MS Windows 또는 macOS 처럼 익숙한 데스크탑 호스트에서 리모트 리눅스 호스트에 생성한 프로젝트에 대해서 다음과 같은 작업을 할 수 있습니다.

  • 소스코드 수정

  • 터미널 명령 실행

  • 어플리케이션 실행/종료

  • 디버깅

Tip

VS Code 는 로컬 호스트에는 프로젝트를 생성하지 않고, 리모트 리눅스 호스트의 소스코드를 직접 수정합니다.

반면, Visual Studio 2015 원격 개발 은 리모트 리눅스 호스트의 원본 프로젝트의 복사본을 로컬 호스트에서 수정하고, 빌드 타임에 동기화합니다.

Important

버전 6.8 미만의 Mono 라이브러리 버전을 사용하면 VS Code 확장 프로그램 중 C# (Microsoft) 확장 프로그램이 정상적으로 동작하지 않습니다.

아이펀엔진과 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

sudo apt-get update
sudo apt-get install mono-devel

시작하기

본격적인 설명에 앞서 다음 내용들을 확인 해 주시기 바랍니다.

  • VS Code 원격 개발 기능은 SSH 연결을 사용하기 때문에 로컬 호스트(데스크탑)와 리모트 호스트(리눅스)에는 각각 SSH ClientSSH Server 가 설치되어 있고, 클라이언트가 서버의 SSH 포트에 접속 가능하도록 방화벽과 같은 네트워크 접근 설정이 허용되어 있어야 합니다.

    Warning

    Windows 에서 기본으로 제공하는 SSH Client 의 경우 별도의 설정을 하지 않고도 사용할 수 있으며, PuTTY 클라이언트는 사용할 수 없습니다.

  • Visual Studio Code 를 설치 해 주세요.

  • Remote Development extension pack 을 설치 해 주세요.

  • 그 밖에 사용하는 아이펀 엔진 프로젝트에 따라서 C++ 또는 C# 언어를 지원하는 VS Code 확장 프로그램이 필요할 수 있습니다.

리모트 호스트에 연결하기

리모트 호스트에 연결하는 방법은 몇 가지가 있습니다만, 여기에서는 패스워드 인증을 사용한 빠른 접속 방법을 설명하겠습니다.

  1. F1 키를 눌러서 명령창에 Remote-SSH: Connect to Host… 를 선택하고, SSH 접속 사용자와 호스트 정보를 입력합니다.

    _images/vscode-ssh-connect.png
  2. 새로운 VS Code 창이 실행되면서 SSH 접속을 진행합니다. 이때, 진행 상황을 표시하는 창이나 SSH 사용자 또는 SSL 인증서의 Password 를 입력하는 창이 표시됩니다.

  3. 접속에 성공하면 아래 스크린샷과 같이 하단에 접속 상태를 표시합니다.

    _images/vscode-ssh-connected.png

Tip

  1. SSH 접속 시 패스워드 기반의 인증대신 공개키 기반의 접속 방식을 사용하시려면 VS Code 원격 개발 팁(영문) 페이지를 참고하시기 바랍니다.

  2. SSH file permission 관련 오류가 발생했을 때에는 파일 권한 오류 해결하기(영문) 페이지를 참고하시기 바랍니다.

새 프로젝트 만들기

VS Code 와 연결할 프로젝트를 만들기 위해서는 리모트 호스트의 명령을 실행할 터미널이 필요합니다. Putty 같은 별도 터미널 프로그램을 사용해도 되고, VS Code 에서 지원하는 내장 터미널을 사용할 수도 있습니다.

VS Code 에서 지원하는 내장 터미널을 사용하기 위해서는 VS Code 가 리모트 호스트에 접속되어 있는 상태에서 Terminal -> New Termianl 을 선택하면, 아래와 같이 리모트 호스트의 명령을 입력할 수 있는 터미널을 사용할 수 있습니다.

_images/vscode-terminal.png

터미널 상에서 다음 명령을 입력해서 my_project 라는 새로운 프로젝트를 생성합니다. 이미 프로젝트를 생성했다면 다음 단계로 이동하시기 바랍니다.

Warning

본 매뉴얼에서는 jwlee 사용자의 홈디렉터리 아래 servers/vscode 디렉터리에 프로젝트를 생성했습니다.

$ funapi_initiator my_project
$ funapi_initiator my_project --csharp

위 명령어를 실행하면 아래 스크린샷과 같이 입력한 프로젝트명에 ‘-source’ 라는 접미사가 붙은 디렉터리를 생성합니다.

_images/vscode-generate-project.png

Tip

게임 개발팀에서는 이 디렉터리를 SVN 저장소나 GIT 저장소에 넣고 공유할 수 있습니다.

VS Code 에서 프로젝트 열기

VS Code 로 프로젝트를 열기 위해서는 먼저 프로젝트를 VS Code workspace 형식에 맞도록 셋팅해야 합니다.

터미널에서 다음 명령을 실행합니다.

$ my_project-source/setup_build_environment --type=vscode

이제, 프로젝트를 VS Code workspace 로 사용할 수 있습니다.

VS CodeOpen folder… 메뉴를 선택해서 프로젝트 경로를 선택하고 OK 버튼을 누릅니다.

_images/vscode-open-project.png

빌드하기

VS CodeTerminal -> Run Build Task 메뉴를 실행하면 프로젝트를 빌드합니다.

_images/vscode-build.png

빌드를 수행하는 또 다른 방법으로 Terminal -> Run Task 메뉴에서 Build 작업을 수행할 수 있습니다.

_images/vscode-run-task.png

Tip

Run Task 메뉴에서는 Build 외에 .vscode/tasks.json 파일에 정의된 Task 들을 실행 할 수 있으며, 아이펀 엔진을 사용하는 데에 필요한 Packaging 같은 작업들도 미리 정의되어 있는 것을 확인 할 수 있습니다.

VS CodeTask 에 대한 자세한 설명은 VS Code 공식 매뉴얼(영문) 에서 확인 할 수 있습니다.

디버깅하기

VS Code 의 원격 개발에서 디버깅은 C++C# 언어에 따라서 필요한 확장 프로그램과 디버깅 방법이 상이하기 때문에 각각에 대해서 따로 나눠서 설명합니다.

공통적으로 실행 가능한 서버의 종류는 .vscode/launch.json 파일에 정의되어 있으며, 앞에서 설명했던 VS Code workspace 를 생성하는 과정에서 아이펀 엔진 프로젝트에서 사용하는 Flavor 들을 자동으로 등록합니다.

C++ 프로젝트

C++ 프로젝트의 원격 디버깅을 위해서는 C/C++ extension pack 이 필요합니다.

  1. VS Code 왼편 메뉴 중 디버그 메뉴를 선택합니다.

  2. 실행할 서버 Flavor 를 선택하고, 실행(화살표) 버튼을 누릅니다.

_images/vscode-cpp-start-debug.png
  1. 디버깅이 진행 중일 때는 아래와 같은 화면을 볼 수 있으며 다양한 디버깅 작업을 진행할 수 있습니다.

    VS CodeC++ 디버깅 에 대한 자세한 설명은 VS Code C++ 디버깅(영문) 에서 찾아볼 수 있습니다.

_images/vscode-cpp-in-debugging.png
  1. 디버깅을 완전히 중단하고 싶다면, 아래 스크린샷의 메뉴를 사용해서 디버깅을 멈출 수 있습니다.

_images/vscode-cpp-stop-debug.png

Tip

Terminal 창에서 Ctrl + C 같은 터미널 명령을 사용해서도 종료 할 수 있습니다.

C# 프로젝트

C# 프로젝트의 디버깅은 Mono runtime 에서 제공하는 Mono Soft Debugger 를 사용하며, VS Code 에는 Mono Debug 확장 프로그램 이 설치되어 있어야 합니다.

C++ 프로젝트의 디버깅은 서버 프로세스를 VS Codedebugger 가 실행하는 반면 C# 프로젝트의 경우에는 VS CodedebuggerMono Soft Debugger Agent 를 실행할 뿐이고, 서버 프로세스는 launch.jsonPreLaunchTask 설정으로 등록한 Task 에 의해서 실행됩니다.

설명은 복잡하지만, 아이펀 엔진은 이 모든 설정을 VS Code workspace 를 생성하는 과정에서 자동으로 생성 해 줍니다.

여러분은 C++ 프로젝트와 마찬가지로 디버그 메뉴에서 쉽게 디버깅을 시작할 수 있습니다.

디버깅을 시작하는 과정은 C++ 프로젝트와 동일하기 때문에 생략하고 종료 과정에 대해서 추가로 설명하겠습니다.

  1. 아래 스크린 샷의 메뉴를 선택해서 디버깅 종료를 선택합니다. 주의해야 할 점은 디버깅 종료를 선택하더라도 VS Code soft debugger Agent 만 종료되고, 서버 프로세스는 살아 있다는 점입니다.

    _images/vscode-stop-debug-csharp-01.png
  2. 이어서 종료할 서버 프로세스를 선택할 수 있습니다. 만약, 이 창을 그냥 닫게 되면 VS Code 상에서 디버깅은 종료된 것으로 인식되지만, 리모트 호스트의 서버 프로세스는 계속 실행되는 상태가 됩니다.

    이럴 경우, F1 키를 눌러서 명령창에 Tasks: Terminate Task 명령을 입력하면 종료할 서버 프로세스를 선택하는 창을 다시 볼 수 있습니다.

    _images/vscode-stop-debug-csharp-02.png

Tip

Terminal 중에 프로세스가 실행되고 있는 Terminal 을 찾아서 Ctrl + C 명령으로 직접 프로세스를 종료할 수도 있습니다.

Flavor 추가하기

Flavor 기능 을 사용하는 경우에는 각각의 Flavor 들을 디버깅 대상으로 추가 해 줘야 합니다.

아래 명령을 실행해서 VS Code workspace 를 재설정 함으로써 변경된 Flavor 들이 디버깅 대상으로 추가됩니다.

$ my_project-source/setup_build_environment --type=vscode

Note

만약, .vscode 디렉터리 이하의 파일을 직접 수정한 경우, 수정하기 전 내용의 백업 파일을 같은 디렉터리에 저장합니다.