최근에 오픈소스 프로그램을 하나 만들고 있습니다.

핵심 기능 자체는 간단한데 실생활 환경에서 모든 사람들이 그걸 이용할 수 있게 만들어야 하니 추가로 구현해야 하는 것들이 계속 불어나더라구요. 그래서 그것들을 어느 정도 분류하고 고찰해보려고 합니다.

  • 로그 시스템 & 오류 보고

학교 또는 연구실의 과제를 구현하는 정도에선 실행 환경과 개발 환경이 일치하는 경우가 많습니다.

프로그램이 어디까지 잘 수행되었고 어디에서 제대로 수행되지 않았는지 알아야 할 땐 개발 툴의 디버그 모드를 이용하는 선에서 해결 가능한 경우가 많죠. 하지만 일반 사람들 또는 과제를 의뢰한 고객 측에서 프로그램이 오작동했을땐 그들의 PC를 조작하면서 디버깅을 할 수 있는 편이 아닙니다.

따라서 개발하는 사람과 이용하는 사람이 다른 경우엔 로그 시스템을 구축해서 최대한 그 문제를 파악하기 쉽게 해야합니다.

단순히 로그만으론 원인을 알기 힘든 경우도 많습니다. 어떤 객체나 함수의 상태가 이상한 것 까진 알 수 있지만 그 시점에서 다른 것들의 상태가 어땠는지, 어떤 과정을 거쳐서 그런 상황에 왔는지 동적으로 추적하기 위해선 프로세스의 메모리 자체를 덤프해서 받아와야 편하게 할 수 있습니다. 그래서 예외가 발생했을 땐 minidump 같은걸 저장시키고 그걸 개발자 측으로 보낼 수 있도록 하는 것도 고려해볼 수 있습니다.

  • 프로젝트 관리

본인이 개발하는 프로그램의 핵심 기능은 하나일 수 있어도, 그걸 실제로 실생활에서 쓰기 위해 추가로 구현해야 하는 기능이 여러 가지 생기게 됩니다. 대표적으로 UI 및 UX 영역과 앞서 말한 오류 관리 영역이죠. 이런 여러 영역에서 갖가지 문제점과 개선 사항이 쏟아져 나오면 이들을 기억할 수 있어야 하고, 우선 순위도 정할 수 있어야 합니다.

따라서 Trello나 Jira, Redmine과 같은 이슈 추적 시스템을 반드시 이용하게 됩니다. 하지만 단순히 그곳에 이슈를 쌓아두고 끝날 게 아니라 최대한 한정된 개발 인력이 효율적으로 이슈를 해결할 수 있게 분류화 및 자동화 과정을 설정해둬야 합니다.

보통 아래에서 언급하는 프로그램의 차기 버전 값을 이정표(milestone)로 삼고, 그 이정표에 도달하기 위해 해결해야 하는 이슈들을 묶는 편입니다. 그러면 자연스레 분기 목표를 달성하니까요. 또 이슈의 성격에 따라서도 분류를 합니다. 이게 오류인지, 새로운 기능 요청인지, 기능 개선 요청인지 나누죠. 추가로 그 이슈가 어떤 영역의 이슈인지도 분류하는게 좋습니다. UI 관련 이슈인지, 특정 기능 쪽 이슈인지…

  • 버전 관리 & 배포

git이나 svn 등을 이용해 코드 버전 관리를 할 수 있지만, 그것과 별개로 프로그램 자체의 버전 값(0.0.1, 0.0.2, …)을 관리해야 공개 시점을 정리할 수 있습니다. 또 일반 사용자에겐 단순히 컴파일 결과물을 준다고 끝나지 않을 수 있습니다.

프로그램에 따라 사전에 설치되어 있어야 하는 다른 프로그램이 있을 수도 있고, “업데이트”를 하는 것도 구체적인 과정을 직접 정해야 하니까요. 단순히 기존에 있던 파일들을 전부 지우고 새로 실행해도 되는 건지, 아니면 특정 파일만 교체하면 되는건지, 기존에 관리하던 설정값들은 어떻게 유지할지 등등을 고려해야 합니다. “자동 업데이트” 기능도 생각할 것이 많습니다.

배포 역시 어떤 곳에 파일을 공유할 건지를 생각해야 하죠.

  • 문서화

사용자 입장에선 최대한 설명서를 읽지 않아도 되는 방향으로 프로그램을 짜는 게 최선이지만, 그렇지 않은 경우라면 가능한한 개발자스러운 설명 보다는 일반 사용자의 눈높이를 인지하면서 간단명료하게 적는것이 좋습니다.

새 버전에선 어떤 게 바뀌었는지도 꼬박꼬박 적어줘야 합니다. 보통 다음 4가지 분류로 나눠 설명하면 될 것 같습니다.

  • 버그 수정
  • 기능 추가
  • 기능 개선
  • 기타 공지사항

 

얘기하고 싶은게 더 많은 것 같았는데, 여기까지 적으니 나머지는 생각이 안 나네요… 생각나는 대로 덧붙여보겠습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.