본문 바로가기
Programming

온라인 업데이트 이야기

by BITINITIALIZE 2008. 8. 9.
728x90
사용자 삽입 이미지
AnyUpdate version 0.9 ALPHA Capture


이것은 AnySend 2008을 위한 온라인 업데이트 프로그램 AnyUpdate이다.
AnySend 뿐 아니라 앞으로도 추가될 AnyShare/AnyTracer/AnyObserver 모두
사용할 수 있도록 확장성을 고려해서 작성되어 있다.

기능 구현에는 2일이 소요되었고 UI와 보안성 향상 작업을 하는데 9일이 걸렸다.

업데이트 정보는 XML로 구성하였기 때문에 유지보수가 대단히 쉽지만
분석을 쉽게 할 수 없도록 암호화와 체크섬, 무결성검사 루틴, 가짜 함수 등으로 둘러쳐져 있다.

온라인 업데이트를 위한 가장 간단한 코딩방법이다.

someUpdateCheckFun()
{
   ...
   if (IsApplicationFound())
   {
      if (IsOldVersion())
      {
         UpdateNow();
      }
   }
   ...
}

업데이트 정보는 XML로 구성되기 때문에 누구나 랜카드를 오고가는 패킷을 들여다보며
확인할 수가 있다.

문제는 업데이트 대상이 프리웨어라면 XML 정보를 들여다보든지 말던지 분석하든지 말든지 전혀~
신경쓸 바 아니지만 상용 프로그램이라면 반드시 포함해야 할 몇가지 요소가 있다.


 [초보자를 위한 상용 어플리케이션 업데이트 체크리스트]

 - 사용자의 시스템에 설치된 프로그램이 정품인가?
 - 설치된 프로그램이 구버전인가?
 - 설치된 프로그램이 복사되거나 유포된 버전이 아닌가?
 - 설치된 프로그램의 라이센스가 만료되지는 않았는가?
 - 설치된 프로그램의 크랙버전은 아닌가?

몇 가지 더 있으나 중요한 것은 이 정도쯤 되겠다.

이 업데이트 체크리스트로 인해서 깔끔하기 이를데 없는 someUpdateCheckFun() 함수는
꽤나 복잡해졌으며 추가 발생되는 코드 뿐 아니라 고려해야 될 사항도 함께 늘어난다는 점을
주목하기 바란다.

온라인 업데이트하는 기능을 추가하자며 쉬운거 아니냐 내일까지 끝내라는 직장 boss를
만나면 당장 회사를 때려치우고 도망가기 바란다.

물론 온라인 업데이트 기능이 어려운 것은 아니다.
구현하기 쉬운 것은 단지 직장 boss가 말하는 someUpdateFuc()일 뿐이며 정말 쓸만하고
확장성과 호환성 그리고 보안성을 고려한 업데이트 기능은 꽤 많은 노력이 들어가는 것이다.
이 사실을 이해하고 받아들이지 못한다면 웹하드와 같은 코인에 민감한 사업은 때려치우기 바란다.

자신들이 만든 프로그램을 업데이트할 때마다 크래커들의 우회 기술 역시 덩달아
업데이트되어 가는 모습을 지켜보며 무기력하게 지켜보는 방법 밖에는 없다.
따라서 업데이트 기능은 처음부터 일정 수준 이상의 보안성을 가지고 공개해야 한다.

온라인 업데이트를 지원한다는 것은 과거에는 많은 비용을 초래했지만
HW/SW 인프라가 비약적으로 발전한 지금은 업데이트를 지원한다고 해서 큰 비용은 들지 않는다.

AnyUpdate는 그야말로 최소한의 비용으로 온라인 업데이트를 지원한다.
비용이라고 해봐야 개발비용 뿐이다.

AnyUpdate는 온라인 업데이트를 위한 전용 서버가 없다. 믿어지는가?
일반적으로 온라인 업데이트를 지원하기 위해서는 전용 서버가 존재해야 하고 해당 서버에서
새로운 버전을 다운로드 받는 방식으로 구성되지만 난 서버급 PC가 없기 때문에 ㅠ.ㅠ
서버를 사용하지 않는 방향으로 개발 방향을 변경했다. 어떻게 했을까?.....그건 비밀이다ㅎㅎ
따라서 서버 운영에 필요한 유지보수 문제와 보안문제, 운영 비용은 없다.
우리나라의 강력한 IT 인프라 환경에 축복을~


AnySend 1.0.8.1 이전 버전의 사용자 분들께는 AnyUpdate가 포함된 새버전 1.0.9.1 버전을
테스트가 완료되는대로 일괄적으로 메일로 보내드립니다.
728x90

댓글