이 프로젝트는 제가 운영체제 및 클라우드 연구실의 학부연구생으로 있을 때의 경험이 바탕이 되었습니다.
연구실에서는 연구 목적으로 우분투 서버를 학생들에게 할당해주었는데,
구글 공유문서로 각자에게 할당된 IP를 공유 받고, 접속하여 작업하였습니다.
하지만 위 과정에서 문서를 통해 Private IP
및 1:1 NAT Public IP
를 공유하는 방식은
보안적으로 문제가 있을 수 있다고 생각하였습니다.
따라서 애초에 연구실 관리자가 연구실 학생에게 IP를 알려주지 않고도 작업할 수 있도록 할 수 없을까?
위 생각을 바탕으로 "서버 접속정보를 공유 및 접속하는 방식을 소프트웨어로 자동화해보자!" 라는 마음을 가지게 되었고,
데모 프로젝트인 Shade를 시작하였습니다.
개발 조직에서 관리자를 제외한 인원에게 접속정보를 은닉하기 위해,
개발 조직의 특정 서버에서 사용자들이 원하는 목표 인스턴스로의 ssh 연결을 대신 맺고,
사용자가 이 연결에 명령어를 주입할 수 있는 API를 제공하는 것이 목표입니다.
위 그림처럼 핵심 아이디어는 접속을 대리하고 이를 사용자와 공유하는 것입니다.
이때 shade backend는 마치 reverse proxy처럼 작용할 수 있습니다.
사용자는 데스크톱 어플리케이션의 인터페이스를 통해 접속을 대리하는 외부 환경과 통신할 수 있으며,
세부 프로젝트 구조는 이곳에서 확인하실 수 있습니다.
다음은 서비스의 구조 및 흐름입니다.
- 조직 내 관리자는 조직을 생성합니다.
- 조직 내 project-category-instance의 계층을 제공하여, 조직의 인스턴스를 직관적으로 관리할 수 있습니다.
- 관리자는 접속 정보를 토대로 인스턴스를 등록합니다.
- 이후 관리자는 조직 내 개발자를 조직에 Contributor로 초대합니다.
- 조직 내 개발자는 등록되어 있는 인스턴스를 사용합니다.
프로토타입 설치 가이드를 참고해주세요.
- 로그인/회원가입이 가능합니다.
- 깃허브와 같이 누구나 조직을 생성하여 관리자가 될 수 있습니다.
- 관리자는 서버 접속 정보를 프로젝트 > 카테고리 내에 등록할 수 있습니다.
- 관리자는 Contributor(조직 내 개발자)를 초대하여 관리할 수 있습니다.
- 관리자는 조직의 서버 접속 정보를 등록합니다.
- Contributor(조직 내 개발자)는 관리자가 등록해놓은 서버를 접속 정보 없이 사용할 수 있습니다.
더 자세한 기능 명세는 UseCase Wiki를 참고해주세요.