본문 바로가기

소프트웨어개발자의 삶/개발일기

ClickOnce

ClickOnce

도입배경

현지 진행하는 프로젝트는 빌링 프로젝트이다. 이 프로젝트는 레거시가 있는 프로젝트인데 닷넷 윈폼으로 개발이 되었다. 마음같아서는 비지니스로직까지 싹 분리해서 이쁘게 백엔드를 빼내고 UI가 웹 or WinForm, WPF 등으로 적용을 하고 싶지만 현실적인 예산과 범위는 그것을 허용하지 않는 계약이라서 포팅에 중점을 주고 WinForm으로 이관을 하고 있다. 

배포 부분에서 어떻게 배포를 해야되나 많은 고민을 하였다. 자동배포를 해야되는데 배포서버를 따로 만들고 버전관리가 되도록해서 다른 프로젝트에서도 써먹을 웹 API를 닷넷코어 WebAPI로 개발을 하고 도커에 심어서 리눅스 서버에서 테스트까지 다 마쳤지만 배포과정에서 발생하는 프로그램 샐행과 해제 등을 고민하다가 그런 고민으로 시간을 보내는거보다 클릭원스로 해결을 하고 배포서버는 다음에 다른데서 유용하게 사용하기로 결정을 하였다.

예전에 클릭원스를 급하게 적용하여 테스트하고서는 그렇게 썩 마음에 들지 않아 사용을 안하다가 제대로 사용하기 위해서 수집한 정보와 경험을 한번 나열해 본다.

간단한 원리

WPFWinform 프로젝트의 배포의 경우 클릭윈스라는 MS기술을 이용하면 설치부터 업데이트까지 편하게 배포를 할 수 있다.

원리는 간단한다. 프로젝트 게시라는 과정을 통해서 나오는 결과물을 FTP로 전송하여 웹페이지로 노출하게 되면 다운로드 해서 설치를 할 수 있으며, 업데이트가 될 때마다 생성된 파일을 서버에 올려두면 프로그램이 실행되며 자동으로 업데이트가 있음을 알리고 업데이트를 유도할 수 있다.

이 기술은 MS의 인프라를 꼭 이용해야되는 것은 아니다. 게시라는 과정을 통해서 나온 파일을 웹을 통해서 보여질 수도 있도록 올려두면 설치와 업데이트가 손쉽게 되는 구조이기 때문에 꼭 IIS를 써야 되는 것이 아니다. 리눅스 서버로도 할 수 있으며 필요에 따라 AWS에도 게시를 한 사례를 볼 수 있다.

다만 게시를 할 경우에 인증서를 필요로 하는데 비주얼 스튜디오를 통하여 게시를 할 경우는 본인의 컴퓨터임이 인증 되어 있어서 발급되는 인증서를 이용하면 관계가 없지만 빌드 서버 등을 이용해서 빌드를 할 경우에는 빌드하는 컴퓨터에서 발급한 인증서가 있어야 빌드가 정상적으로 이루어질 수 있다. (발급 받는 방법은 추후 테스트하여 추가)

 게시를 하여 발생되는 파일은 보통 아래와 같다.

Index.htm 파일이 웹을 통해서 설치할 수 있도록 안내해주는 페이지가 된다. 고로 인스톨파일을 등을 만들어서 배포할 필요도 없다.

하위 Application Files 폴더에 게시 때 마다 배포되어야하는 파일들이 배포가 된다.

, 비주얼 스튜디오로 꼭 저 파일을 FTP를 통해서 배포해야만 하는 것도 아니다. 웹에 올라가면되기 때문에 게시는 로컬을 통해서 하고 관련 파일을 FTP등을 이용하여 웹으로 올려두면 된다. 하지만 비주얼 스튜디오를 이용하여 FTP를 배포지로 할 경우 FTP까지 배포를 해주니 편하긴 하지만 중간에 아이디랑 비밀번호를 묻게 되어있다. 이 아이디와 비밀번호가 설정파일이 저장을 어떻게 하는지 찾지를 못 했다. 고로 안될 경우 로컬에 게시를 하고 게시된 파일을 FTP등을 통해서 배포를 하면된다. 이 과정의 자동화가 들어가면 손쉽게 배포가 될 것이다.

 적용방법

1. 프로젝트에서 오른쪽 마우스를 눌러 설정에 들어가면 게시관련 탭을 만날 수 있다.

1-1 게시위치는 FTP나 로컬 폴더 어디로 하여도 관계없다.

1-2 설치폴더 URL을 웹으로 게시하게 되면 웹을 통하여 다운로드 및 설치시작을 할 수 있다. 그러면 설치파일을 전달하는 수고를 덜 수 있다.

1-3. 게시버전 에서 게시할 때마다 자동으로 수정 번호 증가를 선택하면 게시할 때 마다 수정버전의 항목이 1씩 증가를 하게 된다. 이는 곶 게시되는 프로그램의 번호 기준이 된다.

1-4. ‘업데이트버튼을 통한 어플리케이션 업데이트 설정 부분에서 이 애플리케이션이 필요한 최소 버전 지정을 체크하여 버전을 지정할 경우 강제 업데이트가 되는 기능이라고 볼 수 있다. 하지만 게시마다 버전이 올라가는 것은 아니므로 게시후 항상 최신배포판이 실행되야 되는 프로그램이라면 최소버전을 항상 게시되는 버전으로 지정해줘야 한다. ‘업데이트 위치(게시 위치와 다른 경우)’ URL을 부여하여 로컬에 게시를 하는 경우라도 실제 프로그램이 실행될때는 업데이트를  지정한 위치에서 확인을 하여 자동으로 업데이트를 수행한다.

1-5. ‘옵셥버튼을 통하여 배포웹이지를 생성할 수 도 있고 당연히 배포되는 웹페이지에 표시되는 제품에 대한 정보도 셋팅 할 수 있다.

 

상기과정을 통해서 게시기능을 만들었고 리눅스 서버에 도커를 이용하여 vsFTP와 아파치 웹서버를 이용하여 실행이 되고 업데이트가 되는 것 까지 실행확인을 하였다. 하지만 한가지 아쉬운 점이 아직 배포자동화까지는 적용하지 못했다. 빌드서버에 적용하기 위해서 인증서를 빌드서버에 발급시키고 빌드를 해야되는 과정이 남아있다. 일단 여기까지하고 고객에게 화면을 보여주면 개선을 하기 위해서 아직은 수동빌드 및 배포를 적용하였다.

인증서 발급을 테스트하고 적용하면 이 문서도 갱신이 될 것이다.

인터넷의 많은 예제들이 웹서버와 FTP서버를 이용하여 배포하는 것을 보여주기 위해서 IIS를 셋팅하는 모습을 보여주기 때문에 클릭원스가 마치 IIS의 기능을 이용하나 오해할 수 있지만 IIS는 웹서버와 FTP서버로 이용하는 것일 뿐 클릭원스는 게시되는 파일로서 모든 기능이 작동되니 윈도우 서버라이선스를 걱정할 필요가 없다.

실제 지금 실무에 적용한 서버도 아주 작은 사양의 리눅스 서버이고 서버셋팅도 도커를 이용하여 편하게 셋팅하였다.