Kiwi의 개발일기

서비스를 포함하는 Clickonce 응용 프로그램 배포 with AWS S3 본문

개발/C#

서비스를 포함하는 Clickonce 응용 프로그램 배포 with AWS S3

Whitekiwi 2020. 5. 30. 16:26

이번에 포스기 개발을 부분적으로 맡게 되면서 Windows 응용 프로그램의 배포 방식 중 하나인 Clickonce에 대해 알게 되었습니다.

Clickonce는 installer를 배포 방식과 함께 윈도우의 대표적인 프로그램 배포 방식으로 업데이트가 가볍고 쉽다는 장점이 있습니다.

 

 

본 포스트에서는 서비스를 포함한 윈도우 응용 프로그램에서 Clickonce 배포 세팅을 어떻게 하였는지를 중심으로 다룹니다.

윈도우 프로그램 개발이 주 분야가 아니기 때문에 본 방식이 정석이 아닐 수 있고 그럴 것이라고 생각합니다. Clickonce를 이용하여 서비스 프로젝트를 함께 배포하는 방법을 알고 계시면 댓글로 의견 남겨주시면 감사하겠습니다 :)

 

1. 기본 배포 설정

먼저 프로젝트의 속성으로 이동합니다.

 

게시 탭으로 이동하면 폴더 위치 게시, 설치 폴더 URL, 설치 모드 및 설정 등이 보입니다.

 

폴더 위치 게시는 게시를 했을 때 로컬에 설치파일이 생길 경로를 의미합니다. 

게시를 하게 되면 publish 폴더 안에 설치파일들이 생성됩니다.

 

설치 폴더 URL은 업데이트 검사, 진행할 때 업데이트 여부를 확인할 관련 파일들이 업로드되어 있는 주소입니다.

저는 s3에 이 파일들을 업로드 하여 s3 주소를 입력하였습니다.

 

 

애플리케이션 파일에서는 포함할 파일들을 설정할 수 있습니다.

 

필수 구성 요소에서는 이 프로그램에 필요한 .net framework를 함께 설치할지 설정할 수 있습니다.

 

애플리케이션 업데이트에서 업데이트 정책을 설정할 수 있습니다.

만약 지정한 조건에서만 업데이트를 진행하고 싶다면 프로그래밍 방식으로 진행할 수도 있습니다.

 

 

마지막으로 옵션에서 기본적인 배포 옵션(시작 프로그램에 등록될 폴더/제품명 및 연결할 파일 등)들을 설정할 수 있습니다.

 

주의할 점은 게시 버전이 프로그램의 버전과 다르다는 것입니다. 

게시 버전은 프로그램의 게시 버전이 아니므로 프로그램의 버전은 어셈블리 설정에서 맞추어 주어야합니다.

 

 

 

2. S3에 파일 업로드

프로그램을 게시하면 폴더 게시 위치(위에서는 publich 폴더)에 설치 파일들이 생성됩니다.

이를 아마존 S3에 그대로 업로드 하면 배포 준비가 완료됩니다. 

프로그램을 수정하고 다시 게시한 후 나온 파일들을 다시 S3에 업로드 하면 프로그램에서 자동으로 업데이트를 체크해줍니다.

 

 

 

3. 서비스를 함께 배포

이렇게 세팅을 마쳤는데 문제는 서비스였습니다.

Clickonce를 이용해서 하나의 프로젝트는 게시할 수 있었는데 동시에 두 개의 프로젝트를 게시하는 방법을 찾지 못했습니다.

그래서 저는 서비스 프로젝트를 빌드하여 게시한 프로젝트에 포함하고 프로그램이 업데이트 되면 프로그램 내에서 서비스를 같이 재설치하는 과정을 밟는 방법을 선택하였습니다.

 

 

 

프로그램 시작 시에 설정파일에 저장된 버전과 현재 프로그램의 버전이 다르면 업데이트가 이루어진 것으로 간주하고 서비스 업데이트를 진행합니다.

 

먼저 서비스를 종료합니다.

서비스가 종료되는 과정에는 시간이 걸리기에 최대 2분동안 체크하면서 기다리도록 하였습니다.

 

다음은 ProgramData 폴더로 파일을 복사합니다. 

ProgramData로 설정한 이유는 CurrentStartupPath나 ApplicationData에 정보를 저장하면 프로그램 업데이트 시에 정보가 초기화되기에 프로그램 제거 과정에서 문제가 생길 수 있어서 이와 같이 설정했습니다.

 

다음은 복사한 프로그램을 -install 옵션을 주어 실행합니다.

 

install 옵션이 붙을 때에는 서비스 설치하는 과정을 밟도록 서비스를 구현하였습니다.

 

이를 위해서 System.Configuration.Install를 이용하여 installer를 생성해야 했습니다.

Service.cs를 우클릭하여 설치 관리자를 추가할 수 있습니다.

Installer를 생성하여 코드에서 서비스를 설치할 수 있도록 하였습니다.

 

 

최종적으로 서비스를 빌드하여 윈도우 프로그램 프로젝트에 포함 시켰고 Clickonce를 이용한 업데이트가 진행될 때 서비스를 재설치하도록 하였습니다.

Clickonce에서 두 개의 프로젝트를 함께 빌드하는 방법을 찾지 못했고 두 개의 설치파일을 만드는 것은 사용자 입장에서 불편할 것이고 현실적으로 그런 설치 과정을 밟는 프로그램도 없기에 야매로 구현한 것 같습니다.

 

 

C#을 이용해서 ASP.NET 개발을 하다가 입사하게 되었는데 C#을 해봤다는 이유로 윈도우 프로그램 개발을 부분적으로 맡게 되었습니다. 윈도우 프로그램 개발도 재밌지만 주 분야가 아니라 정석도 잘 모르고 개발하기에 작동하기만 하는 코드를 짜고있는게 아닌가 하는 느낌이 듭니다.

 

비둘기 짤을 보고 웃었던 기억이 있는데 지금 제 코드가 그렇지 않나 하는 느낌이 개발이었습니다.

아직 배울 것이 많고 많이 부족한 것 같습니다

더 노력해야겠다는 생각이 듭니다 ㅠㅠ