JMCloud-ComputeManager 개발기를 들려드립니다

오픈 소스 프로젝트를 진행하여 2013 공개SW 개발자 대회에서 금상을 수상한 경험을 공유합니다. 공개 SW 개발을 활성화하고 공개 소프트웨어 개발자를 양성하기 위해 매년 열리는 공개 SW 개발자 대회는 2013년에 7번째 대회가 열렸습니다.

개발자 클라우드 관리 어플리케이션

개인적으로 Amazon Web Service (AWS) 클라우드를 사용할 때 기본으로 제공하는 환경이 편하지 않았습니다. 특히 처음 서버에 ssh 접속하려면 keypair를 생성하고 security rules (방화벽) 설정을 해야 합니다. 이후 ssh 클라이언트를 사용해 접속할 때 keypair를 지정해야 합니다. 기본으로 제공하는 ssh 클라이언트는 느리고 더 불편했습니다. 처음에는 Putty를 사용해서 keypair를 설정하고 사용했는데 AWS의 경우 요금을 내고 Elastic IP를 발급 받지 않은 경우 서버의 공인 IP 가 변경 되는 경우도 많았습니다. 특히 서버를 사용하지 않을 때 꺼두었다 다시 켜면 IP 가 변경되어 다시 정보를 입력 해야 했습니다.

“이런 불편한 점들을 개선한 어플리케이션이 없을까?”

검색을 해보니 기업용 클라우드 관리 솔루션들은 많이 존재하는데 개발자가 간단하게 사용할 수 있는 것을 찾을 수 없었습니다. 특히 딱 제가 원하고 필요한 기능인 가상머신 서버 리스트를 보고 클릭하면 바로 ssh 접속이 되는 그런 기능을 바로 제공하는 어플리케이션을 찾을 수가 없었습니다.

“대신 제가 원하는 기능을 개발할 수 있는 다양한 형태의 AWS 인프라 관리 API가 제공되고 있었습니다.”

처음에는 제공된 API 를 써서 간단하게 만들어 볼까? 하고 시작 했습니다. 그러나 개발을 진행 하면서 Security Group, Keypair, 가상머신 상태 등이 기본적으로 관리되어야 했고 이와 같은 기능들을 추가하니 최종적으로 개발자 용 클라우드 관리 어플리케이션으로 공개SW 개발자 대회에 출품하게 되었습니다.

JMCloud-ComputeManager

목표 : Amazon EC2의 가상머신을 관리하는 stand-alone GUI 어플리케이션으로 복잡한 기능을 모두 알 필요 없이 쉽게 Cloud에 서버를 만들고 사용할 수 있도록 지원한다.

주요 기능 :

  • 전 세계에 있는 Amazon Region들의 EC2 가상머신의 통합 뷰 제공
  • 각 Region 별 가상머신 그룹을 구성하여 관리
  • 그룹별 보안 그룹 (방화벽) 관리
  • 그룹별 Keypair 관리
  • 여러 그룹 내의 가상머신 또는 개별 가상머신들에 동시 작업 수행
  • 개별 가상머신의 정보를 쉽게 얻을 수 있음 (표로 표시되고 Copy & Paste 가능)
  • 각 가상머신에 SSH client를 사용하여 쉽게 접속

사용 기술 :

  • Java : Windows와 Mac OS에서 동작하는 GUI 어플리케이션을 개발하기 위해 Swing을 사용했습니다. 간혹 Windows에서는 잘 동작하지만 Mac 에서는 이미지가 다르게 보이거나 잘 동작하지 않을 때가 있어 Windows와 Mac 양쪽에서 테스트를 해보느라 고생했습니다.
  • SSH Client : 쉽게 ssh 접속을 지원하기 위해 Java의 Process를 사용해 ssh client를 실행 하고 ssh 접속을 위해 필요한 정보를 전달 할 수 있어야 했습니다. 이를 위해서 Mac 에서는 기본으로 제공되는 SSH Client를 사용했고 Windows에서는 Cygwin를 통해 제공되는 SSH Client를 사용했습니다.
  • Amazon EC2 CLI : Java를 사용해서 개발을 진행 했기 때문에 당연히 Java API를 사용하려고 했습니다. 하지만 검토해보니 AWS에서 정보 가져오는 객체 구조가 복잡했습니다. 그리고 개발을 시작하기 전에 간단하게 테스트를 할 때 CLI API 를 사용해서 테스트를 해보았었고 검토해보니 모든 기능을 동일하게 Windows용과 Unix 계열 용 CLI API로 제공하고 있었습니다. 하지만 적용했다가 문제가 되어 Java API로 변경하게 되면 많은 부분을 새로 개발할 수 있기 때문에 사전 검토가 필요했습니다. 필요한 CLI API를 호출하는 JUnit 테스트를 작성하여 테스트를 하였고 확신을 가진 후 적용했습니다.

2013 공개소프트웨어 개발자대회에서 금상을 수상하기까지

출품 후 최종 프리젠테이션 심사까지 3개월정도의 시간이 있었습니다. 출품할 때 처음에 생각했던 기능이 거의 개발이 되었기 때문에 결과를 기다리는 상태였습니다. 이 시기에 주변 개발자들에게 객관적인 의견을 들어보니 간단하고 불편한 것을 해결해 주는 게 좋긴 하나 단순히 관리만 편리하게 하는 것은 뭔가 임팩트가 없는 것 같다는 평을 받았습니다. 저도 이 상태로 상을 받을 수 있을까? 하는 의문이 생기게 되었고 프리젠테이션을 할 때 무언가 임팩트 있는 기능이 필요하다고 생각하고 어떤 것을 넣을지 고민했습니다.

“Cloud App : 가상머신 프로비져닝 + 어플리케이션 설치 자동화”

오픈소스 프로젝트 중 Apache Whirr 을 보면 간단하게 Hadoop 을 클라우드에서 사용할 수 있게 가상머신을 생성하고 Hadoop을 설치해주는 기능을 제공하고 있습니다. 만약 Big data 분석 분야에서 많이 사용되고 있는 RStudio Server를 간단하게 AWS에 설치하고 사용할 수 있는 기능을 제공하면 임팩트가 있을 것으로 생각되어 개발에 착수했습니다. 시간이 많지는 않았기 때문에  프리젠테이션에서 Live 데모를 할 수 있는 수준으로 개발을 했습니다. 그리고 이름을 붙이면 멋있을 것 같아 이와 같은 기능을 Cloud App이라고 명명하였습니다.

“one more thing”

최종 프리젠테이션을 할 때 처음 제출한 계획서의 기능에 Cloud App이라는 추가된 기능이 하나 더 있다라고 설명하고 Live 데모를 하였습니다. 데모 후 심사 때 심사 위원으로부터 기본 기능보다 Cloud App에 대해 더 많은 질문을 받았고 상당히 관심을 가지고 있는 것을 느낄 수 있었습니다. 이후 최종적으로 금상을 수상하게 되었습니다.

수상 후기

처음에는 내가 필요하고 개발할 때 재미가 있어서 시작한 것이 SK planet에서 만난 최고의 개발자들에게 많은 도움을 받아 오픈소스로 진행을 할 수 있었습니다. 다들 업무 외에도 무언가를 꾸준히 개발하고 공부하는 모습이 저에게 많은 자극이 되었습니다. 개인적으로 일을 떠나서 꾸준히 개발을 했던 것이 상까지 수상하게 되어서 개발자로서 정말 즐거운 한 해를 보낼 수 었습니다.

JMCloud-ComputeManager 관련 링크

Opensource repository link

JMCloud-ComputeManager & RStudio Server on Cloud (Cloud App) Demo link

취미로 개발한 것들을 오픈소스로 공개하는 것을 좋아하는 Java Backend Server 개발자입니다.

공유하기