본문 바로가기
Work/개발 노트

툴 제작 계획

by ★용호★ 2015. 10. 18.

 기존에 팀에서 제작해놓은 툴이 c++로 되어 있어서 유지보수 하는데 불편한 점이 있어서 내가 c#으로 컨버팅을 하는 작업을 진행했다. 작업하면서 기획에서 사용하면 편할 것 같은 기능들을 몇가지 추가하고 마무리를 짓고나서 보니 각팀에서 필요한 기능들이 추가되어 있긴 한데 팀에만 종속되는 기능들이 존재해서 이를 분리하고 싶은 마음이 들었다. 


 우선, 기능을 분류해보면 서버의 상태 정보를 모니터링할 수 있는 기능, 서버 관리 기능, 서버 배포 기능, 기획팀에서 테이블을 배포하거나 generate하는 기능으로 나뉘는데 여기서 서버 배포 기능은 서버팀에서만 사용하고 테이블 관련 기능은 기획팀에서, 그리고 나머지 기능은 공통으로 사용하고 있다.  현재 세운 계획으로는 서버팀에서만 사용하는 기능들은 jenkins로 활용하고, 서버의 모니터링과 관리부분은 웹으로, 테이블 관련 기능은 Tool로 제공하려고 한다. 


 jenkins를 이용한 배포는 현재 빌드까지 되도록 구성해 놓은 상태이고 파일을 복사하고 서비스를 등록하는 기능은 프로그램을 제작하여 이를 jenkins가 실행하도록 하려한다. 최종적으로는 이 기능을 ant를 사용해서 수행하려는데 아직 ant에 대해 잘 몰라서 공부 후 에 적용할 계획이다. 


 

 기존의 툴에서는 모든 기능이 원격에 있는 툴에서 해당 머신에 직접적으로 명령을 수행했다.


▲ 기존의 툴 동작 방식



 서버 상태에 대한 모니터링 기능은 웹을 제작해서 제공할 계획인데, node.js를 사용한 웹서버를 구축하고 서버 상태 정보를 얻어오는 부분은 따로 프로그램을 제작한 후 서버 머신에 고정된 location에 등록 후 node.js에서 실행하여 정보를 얻오는 방식을 사용할 생각이다. 이 것은 오픈 소스 프로젝트 중 서버의 자원을 모니터링하는 nagios에서 아이디어를 얻어서 생각하게 되었는데 특정 위치에 추가되는 플러그인을 등록하고 웹서버에서 이를 실행하여 정보를 얻어오는 식으로 할 계획이다. 프로그램의 다운로드는 서버를 모니터링하는 웹페이지에 기능을 등록하여 어떤 머신에서든 동일한 방법으로 설치를 하도록 할 생각이다. 웹서버를 이용하면 타 팀에게 툴을 직접 전달할 필요 없이 웹 페이지에 접속하면 항상 최신 상태를 유지할 수 있기 때문에 팀에 전달하는 수고를 줄일 수 있을 것 같다.


▲ 구상 중인 툴 동작 방식



 여기서 조금 고민되는 부분이 Node.js와 서버 머신간의 통신을 어떤식으로 할 것인지 이다. TCP로 연결이 되어있다면 실시간으로 받으면 되겠지만 웹 서버이다보니 서버 머신으로 해당 프로그램을 실행시켜라 라고 명령은 내릴 수 있지만 응답을 받아오기가 애매해진다. (왜냐하면 Server Machine에 있는 프로그램이 서버가 아니기 때문에) nagios의 방식 처럼 실시간으로 정보를 얻어오는 것이 아닌 주기적으로 머신에 물어보고 해당 내용을 웹서버에 캐시한 후 클라이언트로 요청이 올때 해당 정보를 전달해주는 방식이 좋을 것 같다. 평소에는 조금 여유있게 서버 정보를 동기 시키다가 클라이언트의 요청이 있는 시점 부터 그 주기를 줄여서 조금 더 자주 서버 정보를 받아 오게끔 하면 효율을 높일 수 있지 않을까 싶다. 


정리하자면

1. 서버 모니터링 및 관리 : 웹 페이지 (Bootstrap + node.js)

2. 서버 배포 : jenkins (devenv, ant, msbuild)

3. 테이블 작업 : Tool (C#)


댓글