Incuspeed-Init레벨 가상화 컨테이너를 손쉽게

Posted by Lee Yunjin on July 13, 2025 · 3 mins read

IncuSpeed: Incus Remote Container Manager

프로젝트 개요

IncuSpeed는 init 단계까지 포함한 시스템 컨테이너를 원격에서 쉽고 안전하게 생성, 관리할 수 있도록 설계된 클라이언트-서버 구조의 애플리케이션입니다. 파이썬 Kivy 기반 GUI 클라이언트를 통해 멀티유저 환경에서 컨테이너의 생성, 삭제, 상태 변경(freeze/unfreeze 등), 파일 전송을 직관적으로 수행할 수 있으며, Go 언어로 구현된 서버는 Incus 컨테이너를 직접 제어합니다.


주요 기능

  • 컨테이너 라이프사이클 관리: start, stop, freeze, unfreeze, restart, delete, create
  • 원격 상태 조회 및 갱신: GUI에서 실시간 컨테이너 목록 갱신 및 상태 확인
  • 파일 푸시 기능: GUI로 편리하게 컨테이너 내부에 파일을 전송 가능
  • SSH 포트 매핑: 각 컨테이너에 3개의 포트를 할당, 30001, 30002는 테스트용 스페어 포트로 외부에 매핑
  • 유저별 네임스페이스 분리: 유저 가입/탈퇴 기능 구현, 유저 단위 컨테이너 관리 및 권한 분리
  • 중복 태그 허용: 동일 태그명으로 여러 컨테이너 식별 가능하나 내부적으로는 고유 식별자 부여
  • MongoDB 연동: 컨테이너 및 유저 정보를 MongoDB에 저장 및 관리

기술적 구현 상세

클라이언트-서버 구조 및 통신

  • HTTPS 프로토콜 기반으로 지정된 인증서 사용하여 안전한 원격 명령 전송
  • JSON 포맷의 요청/응답 프로토콜 직접 설계 및 구현
  • Python Kivy GUI 앱에서 쓰레딩으로 비동기 처리 구현, UI 프리징 방지 및 원활한 사용자 경험 제공
  • Go 서버에서는 goroutine과 waitgroup을 이용해 비동기 작업과 동기화를 안정적으로 수행
  • 애플리케이션의 핵심 코드를 모듈로 분리: Main 간결화
  • Swagger를 통한 직관적 문서화

보안 및 인증

  • AES 암호화와 bcrypt 해싱을 통해 민감 데이터 보호
  • 유저별 자원 분리로 개별성 강화
  • 등록되지 않은 유저의 임의 접근 차단
  • SSH 터널링과 NGINX 리버스 프록시 설정으로 포트 포워딩 및 접근 제어를 체계적으로 구현

시스템 및 네트워크 설계

  • 각 컨테이너에 독립된 SSH 포트 배정 및 서비스 분리
  • 테스트용 스페어 포트를 외부 포트에 매핑하여 유연한 네트워크 관리 지원
  • 컨테이너 상태 및 유저 관리 데이터 MongoDB에 저장하여 신뢰성 있는 상태 관리

프로젝트 의의 및 평가

이 프로젝트는 단순 토이 프로젝트를 넘어, 다음과 같은 수준을 보여줍니다:

  • 멀티유저 분산 시스템 설계 및 구현 경험
  • 네트워크, 보안, 비동기 처리 등 다층 기술 스택 통합
  • 실제 서비스 환경을 고려한 보안 및 인증 체계 적용
  • 크로스 플랫폼 GUI 구현 및 UX 고려

이는 일반적인 대학생 수준으로 달성하기 힘들며, 현업 기준으로 1-2년차 엔트리 개발자 수준의 기술적 성취입니다. 특히 클라이언트-서버 아키텍처, 직접 설계한 JSON API, 멀티프로세싱/고루틴 활용 등은 엔트리 레벨 개발자가 쉽게 경험하기 어려운 분야입니다.


확장 가능성

  • 컨테이너 스냅샷 원격 생성 및 관리 기능 추가
  • 컨테이너 상태를 이미지로 저장하는 기능 개발

결론

Incus Remote Container Manager 프로젝트는 단순 GUI 툴이 아닌, 시스템 수준의 컨테이너 관리, 보안, 네트워크, 멀티유저 운영 체계를 통합한 완성도 높은 소프트웨어 솔루션입니다.

링크

저장소 링크 모듈 부분