
StandAlone App다음과 같은 환경에서 서비스될 Desktop App 신규 개발 건이 들어 왔다. WPF와 Electron을 두고 그간 WPF로 개발하면서 느낀 불편함이 떠올라 Electron을 도입하게 되었다.
도입 계기중 가장큰 비중은 방대한 커뮤니티와 NPM라이브러리가 가장 크다.
Component 이하, UseControl에 대한 처리도 가능하기때문에 여간 복잡한게 아니다. Xaml 자료는 있어도 Xaml Style 자료는 정말 찾기 힘든 실정..위에서 말하는 상속 관계가 단순히 Css의 아래와 같은 관계는 아니다.
Html의 경우 MarkUp업으로 단순 계층화된 텍스트에 지나지 않지만, WPF는 컴파일되는 실제 객체의 상속관계를 띄고 있어서 더 욱 어려운 Style 선언이 이루어 진다..
<!-- css -->
.container {
background : '#ff0';
margin : 6px;
}
.container > div {
color : '#ff0'
}
<!-- Xaml Style -->
<Style x:Key="WindowHeader" TargetType="DockPanel" >
<Setter Property="Background" Value="AntiqueWhite"></Setter>
<Style.Resources>
<Style TargetType="Image">
<Setter Property="Margin" Value="6"></Setter>
</Style>
<Style TargetType="TextBlock">
<Setter Property="FontColor" Value="#ff0"></Setter>
</Style>
</Style.Resources>
</Style>
(위 두 코드는 같은 Effect를 발생하는 Css, Style Code 이다
위와 같은 실정으로 WPF는 현재 상용라이브러리에 의존하고 있는 실정이다. 개인 프로젝트에서 700달러나 하는 상용라이브러를 쓰는것은 부담이 크다. 무료 라이브러리도 있지만 결국 일 부분은 직접 Style을 수정해야한다는 부담이 따른다..
문제는 언어의 태생에 있었다.
javascript는 태생적으로 Browser에서 작업을 처리하기 위한 형태로 진화해 왔고 C#은 Window OS 친화적인 언어라는 태생을 가지고 있다. 지금이야 NodeJs도 Express, Nest와 같은 Framework가 많이 개발되면서 차츰 이런 모습이 퇴화되고 있지만, 태생부터 C#은 native Code로 Window 자원을 가져오는 것에 제한이 없다. javascript의 경우 브라우저 단에서 클라이언의 자원을 가져오는 것이 엄격히 금지되어 왔고, Nodejs가 오랜기간 군림하고 있음에도 클라이언트의 OS자원을 가져오고 처리하는것에는 다른 언어, 프레임워크의 third party의 의존하고 있는 실정이다. (보통 python Module을 내부적으로 돌려서 처리하는 형태)

생 NodeJs가 떠서 처리하기에는 아직 부족한 점이 많았다.
위와 같은 케이스에서 기능개발에 문제가 발생하였다. python Module로 처리하면 되지만 StandAlong App으로 개발되어 배포되기 때문에 모든 사용자의 PC의 python을 설치하여 전처리기로 사용할수는 없는 노릇이다...
Backend Server가 있어서 중앙에서 처리할 수 있는 구조만 된다면 문제가 어느정도 해소되지 않을까 싶다.

많은 역경이 있었지만 결국에 1년간의 개발 끝에 성공리에 배포 하였다.
배포는 Spring WebServer를 이용하여 다운로드 기능을 통해서 배포하였고 빌드는 Electron-builder를 통해서 빌드 하였다. WPF의 경우 툴에서 Release해버리면 그만이지만, Electron은 빌드전용 라이브러리를 받아서 빌드 명령을 내리면 5분정도 소요되고 빌드가 되었다.
WEB 환경임에도 오히려 신속하지 못한 Build 환경...
개발하면서 느낀 WPF, Electron의 장단점을 적어보았다.

Backend Server가 외부에 있고 기존에 웹개발자라면 Electron을 고려 해볼만 하다고 생각한다. 또 이미 서비스 중인 웹사이트가 있다면 주저하지 않고 도입해도 될 것 이라 생각된다.
다만, desktop app이 StandAlone 환경에서 서비스 되야한다면 Electron보다 WPF를 추천한다.
Electron 플젝을 헀지만 Electron을 만질 일은 거의 없었다. NodeJs, React, Typescript를 깊이있게 해볼 수 있어서 좋았다.
혹시 Electron 도입을 고민하는 개발자라면 Vue-Electron를 이용해여 Vue와 Electron의 구조를 한번에 잡아주는 보일러 플레이트가 있으니 고려해봄직 하다.