2024년 기준으로 TigerVNC는 고성능 원격 데스크톱 접근을 위한 핵심 오픈소스 프로젝트 중 하나입니다. 이 문서는 Visual Studio Code와 Docker를 활용해 일관성 있는 컨테이너 기반 개발 환경을 구성하는 방법을 설명합니다. 이를 통해 코드 기여, 디버깅, 컴파일 테스트까지 안정적으로 수행할 수 있습니다.
필수 도구 설치
시작 전 다음 도구들이 시스템에 설치되어 있어야 합니다:
- Docker 엔진 (버전 20.10 이상)
- Visual Studio Code
- Git
Linux 사용자는 apt 또는 dnf를 통해 설치 가능하며, Windows 및 macOS 사용자는 각 공식 웹사이트에서 설치 프로그램을 다운로드할 수 있습니다.
소스 코드 복제
먼저 Git을 사용해 미러 저장소에서 소스를 클론합니다:
git clone https://gitcode.com/gh_mirrors/ti/tigervnc
cd tigervnc
Docker 기반 빌드 환경 설정
프로젝트 내 .github/containers 경로에는 여러 리눅스 배포판용 Dockerfile이 포함되어 있습니다. 예를 들어 Rocky Linux 10 기반 빌드는 다음 스크립트를 사용합니다:
.github/containers/rocky10/build.sh
이 스크립트는 자동으로 패키지 의존성 해결부터 RPM 패키지 생성까지 처리합니다.
VSCode를 통한 컨테이너 개발 환경 구성
추천 확장 프로그램 설치
VSCode에서 다음 확장을 설치하여 C++ 및 컨테이너 개발을 지원하세요:
- Docker
- C/C++
- CMake Tools
- Remote - Containers
.devcontainer 구성
프로젝트 루트에 .devcontainer/devcontainer.json 파일을 생성하고 아래 내용을 추가합니다:
{
"name": "TigerVNC Dev Container",
"build": {
"context": "..",
"dockerfile": "../.github/containers/rocky10/Dockerfile"
},
"extensions": [
"ms-vscode.cpptools",
"ms-vscode.cmake-tools"
],
"settings": {
"cmake.configureOnOpen": true
}
}
이후 VSCode 명령 팔레트(F1)에서 Remote-Containers: Reopen in Container을 선택하면 컨테이너 내부에서 바로 작업이 시작됩니다.
빌드 및 컴파일 절차
컨테이너가 준비되면 아래 명령어로 빌드를 진행합니다:
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug \
-DENABLE_NLS=ON \
-DENABLE_H264=ON \
-DENABLE_GNUTLS=ON \
-S ..
make -j$(nproc)
이 설정은 GitHub Actions CI 파이프라인과 동일한 조건을 반영하며, 자세한 옵션은 .github/workflows/build.yml에서 확인할 수 있습니다.
실행 및 기능 검증
빌드 완료 후 뷰어를 실행하여 정상 동작 여부를 확인합니다:
./vncviewer/vncviewer
macOS나 Windows에서도 클라이언트 연결 테스트를 병행할 수 있으며, 크로스 플랫폼 호환성을 검사할 수 있습니다.
주요 디렉터리 구조
TigerVNC의 주요 구성 요소는 다음과 같습니다:
- vncviewer/: VNC 클라이언트 로직
- unix/: 리눅스/유닉스 서버 구현
- win/: 윈도우 전용 코드
- common/: 공통 모듈 및 네트워크 프로토콜
- cmake/: 빌드 스크립트 및 매크로
- tests/: 단위 및 성능 테스트 케이스
문제 해결 팁
의존성 오류
패키지 설치 실패 시, CI 워크플로우 파일에서 실제 사용된 apt install 또는 dnf install 명령어를 참조하여 수동 설치를 시도하세요.
Docker 그룹 권한 문제
리눅스에서 sudo 없이 도커를 사용하려면:
sudo usermod -aG docker $USER
명령 후 로그아웃 후 재접속이 필요합니다.
빌드 속도 최적화
-j$(nproc) 플래그로 멀티코어를 활용해 컴파일 시간을 단축할 수 있습니다.
마무리
이제 독립적이고 재현 가능한 개발 환경이 준비되었습니다. 컨테이너를 사용함으로써 호스트 시스템에 영향을 주지 않으면서도 안정적인 개발이 가능합니다. 추가 정보는 프로젝트 루트의 BUILDING.txt 문서를 참고하시기 바랍니다.