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 툴이 아닌, 시스템 수준의 컨테이너 관리, 보안, 네트워크, 멀티유저 운영 체계를 통합한 완성도 높은 소프트웨어 솔루션입니다.