SlideShare a Scribd company logo
1 of 27
Download to read offline
리멤버 데스크톱 앱 개발기
✕
최소 비용으로 새로운 플랫폼 지원하기
DRAMA&COMPANY 

Engineer 김담형
스마트한 비즈니스 습관, 리멤버
찍으면 입력해주는 No.1 명함관리 앱
100% 정확한 입력

수정이 필요없는 편리함
리멤버 회원 간 명함 정보 변경 시

실시간으로 자동 업데이트
명함정보 업데이트
휴대폰 및 구글 주소록에 저장,

Excel 다운로드 및 아웃룩 연계
주소록 저장 지원
리멤버 소개
비서의 수기입력
리멤버 데스크톱 버전 개발기
- 작년 11월에 리멤버 데스크톱 버전 배포!
- Electron을 이용해서 데스크톱 버전을 개발하기로 고민
한 시점부터 배포 후 결과까지의 경험한 내용들을 정리
- 리멤버 데스크톱 버전은 SSB(Site-specific brower)
- 기존의 Android, iOS 외에 Web 버전을 새롭게 런칭
- Slack과 같이 업무에 사용되는 유틸리티 성격의 웹앱
인데 브라우저로 매번 접속하기가 번거로움
- Slack이 WebView(SSB)로 만들어진 것 같으니 조사
해보자
시작하게 된 계기
- 내가 제일 많이 사용하고 있는

Atom, Slack, VS Code가 Electron으로 만들어졌
었다니!
- → Electron을 도입할 수 있을지 조사
시작하게 된 계기
- 멀티 플랫폼(Windows, Mac, Linux)을 지원할 수
있다
- 예전에 node-webkit(지금은 NW.js)를 공부하면서
매우 편했던 기억이 있음
- Squirrel Installer를 이용한 자연스러운 인스톨, 업데
이트 과정
- HTML, CSS, JS를 그대로 사용할 수 있다
마음에 들었던 점
0.3X 버전인데 production에 사용해도 괜찮을까?
- Electron만으로 앱을 만드는게 아니라 WebView의
역할만 만드는 것이니 괜찮을 듯
- 우리가 필요한 기능들은 모두 지원
- Slack, Atom, VS Code과 같은 믿음직한 레퍼런스
걱정되었던 점
- 개발할 당시 Stack Overflow에 ‘Electron’으로 tag
된 질문들 300개 이하.. (AngularJS는 당시에 13만
+)
- 주위에 사용하는.. 아니 들어본 사람도 없음

- → Github 코드, 이슈 등 보면서 혼자 삽질..
어떻게 공부하지?
- 지금은 모르겠으나, 그 당시의 Slack Windows 버전을
설치하고, Asar로 합쳐진 파일들을 언팩하면 HTML,
CSS, JS 파일들을 주석까지 다 볼 수 있었음
- Electron 관련 오픈 소스에 많은 commitment를 보여
주시는 폴벳츠님의 주석까지 보면서 많은 공부를 함
- 딱 필요했던 SSB를 구현하는 코드라 좋은 참고 코드였
음
- 지금은 Automattic/wp-desktop도 추천
Slack을 참고하자!
개발 환경
- 당시에는 Node 4.x를 사용하여 Main Process 쪽은

평소에 하던 Node 개발하듯 진행
- Renderer쪽도 평소에 하던 웹 front-end 개발 하듯 진
행
- Grunt를 이용하여 빌드 등 잡다한 업무 처리
- 테스트 코드는 작성을 못했음 (지금은 Spectron이 생김!)
SSB를 만들면서 추가로 고려할 점
파일 다운로드

- will-download event가 발생하면 임시 폴더로 다운로
드
- 사용자에게 저장 위치 지정 창 띄움
- 파일 이동
- 완료 notification
SSB를 만들면서 추가로 고려할 점
OAuth 로그인

- 리멤버에서는 Facebook, Google, Naver 세 가지
의 OAuth 로그인 기능 제공
- 세 서비스 모두 전체 페이지를 redirect하는 방식을
사용하여 기존의 팝업창을 띄우던 웹앱 수정
SSB를 만들면서 추가로 고려할 점
새 창

- Renderer Process에서 new-window event가 

발생할 때 external 창을 띄움
SSB를 만들면서 추가로 고려할 점
네트워크 연결 상태

- online, offline event, navigator.onLine를 이용하
여 renderer 쪽의 HTML에서 webview와 network
status 화면을 교체
SSB를 만들면서 추가로 고려할 점
기존 웹앱와의 연동

- 결국은 웹 브라우저이기 때문에 기존의 웹앱에서 원하
지 않는 페이지로 가는 링크들을 모두 막아야 함
- 방법 1. Electron에서 HTML selector로 특정 링크들
숨겨주기

→ 작업이 간단하나, 웹사이트에서 selector 수정이 일어나면 데스
크톱도 바로 같이 수정되야 함
- 방법 2. 웹앱을 수정해서 Electron으로 접속할 경우
UserAgent에 따라 분기 처리를 하는 방법

→ 작업량은 비교적 많으나, 데스크톱에서는 더 이상 고려할 사항
없음
SSB를 만들면서 추가로 고려할 점
업데이트

- 앱을 실행하면 update할 버전이 존재하는지 확인
- 존재할 경우 자동으로 업데이트를 할 수 있게 설치
파일 다운로드, 업데이트
- 업데이트를 완료하기 위해서 재시작을 하라는 풍선
을 띄워줌
- 재시작 시 업데이트 완료
코드 보호

- 앞에서 Slack을 예로 얘기한 것과 같이 맘만 먹으면
코드를 다 볼 수 있음
- JS를 모두 minify함 (ES6 -> babel -> minify)
- 지금은 EncloseJS(컴파일) 등 코드 보호할 수 있는

툴 있다고 들음
SSB를 만들면서 추가로 고려할 점
기타 삽질..
.exe 파일 배포

- 처음 exe 파일을 배포해보는거라 SmartScreen 등
IE, Windows, Chrome의 보안 필터링에 걸림
- 분명 얘기해준대로 디지털 서명까지 다 했는데?
- SmartScreen에 일정 다운로드 이상, 일정 시간이
지나야 함.. (보통은 첫 릴리즈 이전에 사내 직원, 지
인들한테 먼저 다운받아달라고 부탁을 해야 함)
- 매우 낮은 진입장벽, 개발 속도, 편안함

(마치 크롬 브라우저만 지원해도 되고, 파일 시스템에 접근할 수 있
는 웹 개발하는 기분!)
- 손쉬운 cross-platform 지원
- 가벼운 설치와 업데이트
- 웹앱만 업데이트하면 두 개 플랫폼을 업데이트한 효
과
- 다른 앱과 다르게 거의 반 강제 업데이트
개발 후 느낀 장점들
지금은 1.x가 나왔지만 개발한 당시를 기준으로..

- 이상하네? 싶어서 검색을 해보면 issue가 open, 실
시간 처리중
- 버그, 기능, 문서화 모두 부실
- 참고 자료가 거의 없었다..
- 사실 제품 개발은 크게 어렵지 않았는데, Squirrel
Installer가 문서화가 되어있는게 별로 없어서 가장
힘들었음
개발 후 느낀 단점들
- 플랫폼 하나를 더 지원하는데 들어간 시간 약 3주

(여기서 추가로 다른 플랫폼 지원은 훨씬 적을 듯)
- 처음 개발 이후 들어간 개발 비용 거의 없음
- 웹앱만 업데이트해도 데스크톱 사용자들에게도 업데이
트
결과 - 개발 기간
Daily Active User 성장!!
(물론 위 그래프에서는 다른 비즈니스 요인들도 있음)
결과 - 서비스
- 설치 등의 과정에서 간혹 error CS가 접수됨
- 하지만 대부분 재현이 되지 않고 직접 볼 수 없어서
처리하기가 힘듦
- 로그 파일을 기록하도록 해두었지만 조금 더 체계적
으로 로깅할 수 있는 Error reporting framework
이 있으면 좋을듯
결과 - 아쉬운 점
Mac? Linux? 지원하고 싶은데..
Windows Macintosh Linux
98.39% 1.59% 0.1%
드라마 주연배우 캐스팅 중!
Android
- Java / Android
- Reactive Programming
- Sqlite / Realm
iOS
- Swift / Objective-C
- CoreData
Web
- Ruby on Rails /
AngularJS
- Bootstrap / SASS
- Electron
- Grunt
API
- Ruby on Rails
- AWS
- MySQL
데이터 관리
- MySQL
- NoSQL
- Java
- Python
http://dramancompany.com/joinus
명함 교환방 -> 코드로 교환방 찾기
명함 교환해요!
ELTRN 0629

More Related Content

What's hot

실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기Haze Lee
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: YeomanJae Sung Park
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15Chanwoong Kim
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN정호 전
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드수정 김
 
Front-end Development with Ruby on Rails
Front-end Development with Ruby on RailsFront-end Development with Ruby on Rails
Front-end Development with Ruby on Rails추근 문
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기JinKwon Lee
 
Selenium and XpressEngine
Selenium and XpressEngineSelenium and XpressEngine
Selenium and XpressEngineSol Kim
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나NAVER D2
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!영호 김
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효NAVER D2
 
Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅JinKwon Lee
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정중선 곽
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017devCAT Studio, NEXON
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejsNAVER D2
 
Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현병태 정
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angularredribbon1307
 

What's hot (20)

실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기실시간으로 안드로이드 프론트엔드 작업하기
실시간으로 안드로이드 프론트엔드 작업하기
 
도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman도구를 활용한 더 나은 웹 개발: Yeoman
도구를 활용한 더 나은 웹 개발: Yeoman
 
김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15김찬웅_그룹웨어에 새 에너지를_NDC15
김찬웅_그룹웨어에 새 에너지를_NDC15
 
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
빠른 프로토타이핑을 위한 웹앱 자동화 툴 - YEOMAN
 
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
Yeoman(모던웹 개발을 위한 관리도구)설치사용가이드
 
Front-end Development with Ruby on Rails
Front-end Development with Ruby on RailsFront-end Development with Ruby on Rails
Front-end Development with Ruby on Rails
 
웹 Front-End 실무 이야기
웹 Front-End 실무 이야기웹 Front-End 실무 이야기
웹 Front-End 실무 이야기
 
Selenium and XpressEngine
Selenium and XpressEngineSelenium and XpressEngine
Selenium and XpressEngine
 
Cooking jquery
Cooking jqueryCooking jquery
Cooking jquery
 
[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나[111] 네이버효과툰어떻게만들어졌나
[111] 네이버효과툰어떻게만들어졌나
 
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
NDC 2017 마이크로토크 - Spacemacs: 최고의 에디터는 Emacs도 Vim도 아니다. Emacs와 Vim이다!
 
[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효[145]5년간의네이버웹엔진개발삽질기그리고 김효
[145]5년간의네이버웹엔진개발삽질기그리고 김효
 
Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅Logcat과 함께 하는 모바일 웹 디버깅
Logcat과 함께 하는 모바일 웹 디버깅
 
젠킨스 설치 및 설정
젠킨스 설치 및 설정젠킨스 설치 및 설정
젠킨스 설치 및 설정
 
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
이승재, 박경재, NDC Replay 제작기: static website, static backoffice, NDC2017
 
React Redux React Native
React Redux React NativeReact Redux React Native
React Redux React Native
 
[C5]deview 2012 nodejs
[C5]deview 2012 nodejs[C5]deview 2012 nodejs
[C5]deview 2012 nodejs
 
Jenkins
JenkinsJenkins
Jenkins
 
Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현Service Worker 를 이용한 
Offline Web Application 구현
Service Worker 를 이용한 
Offline Web Application 구현
 
응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular응답하라 반응형웹 - 4. angular
응답하라 반응형웹 - 4. angular
 

Similar to 리멤버 데스크톱 앱 개발기

게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows TerminalOnGameServer
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)수보 김
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page ApplicationSangmin Yoon
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트iFunFactory Inc.
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Appsjungkees
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST_NHNent
 
Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevHeo Seungwook
 
Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기
Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기
Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기hajaekwon
 
Internship backend
Internship backendInternship backend
Internship backendYein Sim
 
PWA - overview [written in KOREAN]
PWA - overview [written in KOREAN]PWA - overview [written in KOREAN]
PWA - overview [written in KOREAN]Seulgi Choi
 
The New Feature of Notes9
The New Feature of Notes9 The New Feature of Notes9
The New Feature of Notes9 Do Hyun Kim
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for AndroidSangkyoon Nam
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔NAVER D2
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자Sewon Ann
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowByoung Do Ahn
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발Jinuk Kim
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱NAVER D2
 
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월월간 IT 슬라이드
 
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...MaRoKim4
 

Similar to 리멤버 데스크톱 앱 개발기 (20)

게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
게임 개발에 도움을 주는 CruiseControl.NET과 Windows Terminal
 
Parallel diary
Parallel diaryParallel diary
Parallel diary
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
Single-page Application
Single-page ApplicationSingle-page Application
Single-page Application
 
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
[아이펀팩토리]2017 NDC 강연 자료_아이펀 엔진 개발 노트
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)TOAST Meetup2015 - 구름 Cloud IDE (류성태)
TOAST Meetup2015 - 구름 Cloud IDE (류성태)
 
Cruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedevCruise control net_and_terminal_with_gamedev
Cruise control net_and_terminal_with_gamedev
 
Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기
Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기
Softcon_하재권_Only javascript의 하이브리드 앱서버 도전기
 
Internship backend
Internship backendInternship backend
Internship backend
 
PWA - overview [written in KOREAN]
PWA - overview [written in KOREAN]PWA - overview [written in KOREAN]
PWA - overview [written in KOREAN]
 
The New Feature of Notes9
The New Feature of Notes9 The New Feature of Notes9
The New Feature of Notes9
 
빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android빠르고 지속적으로 전달하기: Continuous Delivery for Android
빠르고 지속적으로 전달하기: Continuous Delivery for Android
 
[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔[124] 하이브리드 앱 개발기 김한솔
[124] 하이브리드 앱 개발기 김한솔
 
ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자ant로 안드로이드 앱을 자동으로 빌드하자
ant로 안드로이드 앱을 자동으로 빌드하자
 
Sencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-windowSencha touch2-sdk-tools-window
Sencha touch2-sdk-tools-window
 
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
NDC13: DVCS와 코드리뷰 그리고 자동화를 통한 쾌속 개발
 
[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱[231]나는서버를썰터이니너는개발만하여라 양지욱
[231]나는서버를썰터이니너는개발만하여라 양지욱
 
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월모바일 크로스플랫폼 비교 - 월간슬라이드 4월
모바일 크로스플랫폼 비교 - 월간슬라이드 4월
 
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
2023 GDG Sondo DevFest - Flutter/ Flavor, PlatformChannel, Environment variab...
 

리멤버 데스크톱 앱 개발기

  • 1. 리멤버 데스크톱 앱 개발기 ✕ 최소 비용으로 새로운 플랫폼 지원하기 DRAMA&COMPANY 
 Engineer 김담형
  • 2. 스마트한 비즈니스 습관, 리멤버 찍으면 입력해주는 No.1 명함관리 앱
  • 3. 100% 정확한 입력
 수정이 필요없는 편리함 리멤버 회원 간 명함 정보 변경 시
 실시간으로 자동 업데이트 명함정보 업데이트 휴대폰 및 구글 주소록에 저장,
 Excel 다운로드 및 아웃룩 연계 주소록 저장 지원 리멤버 소개 비서의 수기입력
  • 4. 리멤버 데스크톱 버전 개발기 - 작년 11월에 리멤버 데스크톱 버전 배포! - Electron을 이용해서 데스크톱 버전을 개발하기로 고민 한 시점부터 배포 후 결과까지의 경험한 내용들을 정리 - 리멤버 데스크톱 버전은 SSB(Site-specific brower)
  • 5. - 기존의 Android, iOS 외에 Web 버전을 새롭게 런칭 - Slack과 같이 업무에 사용되는 유틸리티 성격의 웹앱 인데 브라우저로 매번 접속하기가 번거로움 - Slack이 WebView(SSB)로 만들어진 것 같으니 조사 해보자 시작하게 된 계기
  • 6. - 내가 제일 많이 사용하고 있는
 Atom, Slack, VS Code가 Electron으로 만들어졌 었다니! - → Electron을 도입할 수 있을지 조사 시작하게 된 계기
  • 7. - 멀티 플랫폼(Windows, Mac, Linux)을 지원할 수 있다 - 예전에 node-webkit(지금은 NW.js)를 공부하면서 매우 편했던 기억이 있음 - Squirrel Installer를 이용한 자연스러운 인스톨, 업데 이트 과정 - HTML, CSS, JS를 그대로 사용할 수 있다 마음에 들었던 점
  • 8. 0.3X 버전인데 production에 사용해도 괜찮을까? - Electron만으로 앱을 만드는게 아니라 WebView의 역할만 만드는 것이니 괜찮을 듯 - 우리가 필요한 기능들은 모두 지원 - Slack, Atom, VS Code과 같은 믿음직한 레퍼런스 걱정되었던 점
  • 9. - 개발할 당시 Stack Overflow에 ‘Electron’으로 tag 된 질문들 300개 이하.. (AngularJS는 당시에 13만 +) - 주위에 사용하는.. 아니 들어본 사람도 없음
 - → Github 코드, 이슈 등 보면서 혼자 삽질.. 어떻게 공부하지?
  • 10. - 지금은 모르겠으나, 그 당시의 Slack Windows 버전을 설치하고, Asar로 합쳐진 파일들을 언팩하면 HTML, CSS, JS 파일들을 주석까지 다 볼 수 있었음 - Electron 관련 오픈 소스에 많은 commitment를 보여 주시는 폴벳츠님의 주석까지 보면서 많은 공부를 함 - 딱 필요했던 SSB를 구현하는 코드라 좋은 참고 코드였 음 - 지금은 Automattic/wp-desktop도 추천 Slack을 참고하자!
  • 11. 개발 환경 - 당시에는 Node 4.x를 사용하여 Main Process 쪽은
 평소에 하던 Node 개발하듯 진행 - Renderer쪽도 평소에 하던 웹 front-end 개발 하듯 진 행 - Grunt를 이용하여 빌드 등 잡다한 업무 처리 - 테스트 코드는 작성을 못했음 (지금은 Spectron이 생김!)
  • 12. SSB를 만들면서 추가로 고려할 점 파일 다운로드
 - will-download event가 발생하면 임시 폴더로 다운로 드 - 사용자에게 저장 위치 지정 창 띄움 - 파일 이동 - 완료 notification
  • 13. SSB를 만들면서 추가로 고려할 점 OAuth 로그인
 - 리멤버에서는 Facebook, Google, Naver 세 가지 의 OAuth 로그인 기능 제공 - 세 서비스 모두 전체 페이지를 redirect하는 방식을 사용하여 기존의 팝업창을 띄우던 웹앱 수정
  • 14. SSB를 만들면서 추가로 고려할 점 새 창
 - Renderer Process에서 new-window event가 
 발생할 때 external 창을 띄움
  • 15. SSB를 만들면서 추가로 고려할 점 네트워크 연결 상태
 - online, offline event, navigator.onLine를 이용하 여 renderer 쪽의 HTML에서 webview와 network status 화면을 교체
  • 16. SSB를 만들면서 추가로 고려할 점 기존 웹앱와의 연동
 - 결국은 웹 브라우저이기 때문에 기존의 웹앱에서 원하 지 않는 페이지로 가는 링크들을 모두 막아야 함 - 방법 1. Electron에서 HTML selector로 특정 링크들 숨겨주기
 → 작업이 간단하나, 웹사이트에서 selector 수정이 일어나면 데스 크톱도 바로 같이 수정되야 함 - 방법 2. 웹앱을 수정해서 Electron으로 접속할 경우 UserAgent에 따라 분기 처리를 하는 방법
 → 작업량은 비교적 많으나, 데스크톱에서는 더 이상 고려할 사항 없음
  • 17. SSB를 만들면서 추가로 고려할 점 업데이트
 - 앱을 실행하면 update할 버전이 존재하는지 확인 - 존재할 경우 자동으로 업데이트를 할 수 있게 설치 파일 다운로드, 업데이트 - 업데이트를 완료하기 위해서 재시작을 하라는 풍선 을 띄워줌 - 재시작 시 업데이트 완료
  • 18. 코드 보호
 - 앞에서 Slack을 예로 얘기한 것과 같이 맘만 먹으면 코드를 다 볼 수 있음 - JS를 모두 minify함 (ES6 -> babel -> minify) - 지금은 EncloseJS(컴파일) 등 코드 보호할 수 있는
 툴 있다고 들음 SSB를 만들면서 추가로 고려할 점
  • 19. 기타 삽질.. .exe 파일 배포
 - 처음 exe 파일을 배포해보는거라 SmartScreen 등 IE, Windows, Chrome의 보안 필터링에 걸림 - 분명 얘기해준대로 디지털 서명까지 다 했는데? - SmartScreen에 일정 다운로드 이상, 일정 시간이 지나야 함.. (보통은 첫 릴리즈 이전에 사내 직원, 지 인들한테 먼저 다운받아달라고 부탁을 해야 함)
  • 20. - 매우 낮은 진입장벽, 개발 속도, 편안함
 (마치 크롬 브라우저만 지원해도 되고, 파일 시스템에 접근할 수 있 는 웹 개발하는 기분!) - 손쉬운 cross-platform 지원 - 가벼운 설치와 업데이트 - 웹앱만 업데이트하면 두 개 플랫폼을 업데이트한 효 과 - 다른 앱과 다르게 거의 반 강제 업데이트 개발 후 느낀 장점들
  • 21. 지금은 1.x가 나왔지만 개발한 당시를 기준으로..
 - 이상하네? 싶어서 검색을 해보면 issue가 open, 실 시간 처리중 - 버그, 기능, 문서화 모두 부실 - 참고 자료가 거의 없었다.. - 사실 제품 개발은 크게 어렵지 않았는데, Squirrel Installer가 문서화가 되어있는게 별로 없어서 가장 힘들었음 개발 후 느낀 단점들
  • 22. - 플랫폼 하나를 더 지원하는데 들어간 시간 약 3주
 (여기서 추가로 다른 플랫폼 지원은 훨씬 적을 듯) - 처음 개발 이후 들어간 개발 비용 거의 없음 - 웹앱만 업데이트해도 데스크톱 사용자들에게도 업데이 트 결과 - 개발 기간
  • 23. Daily Active User 성장!! (물론 위 그래프에서는 다른 비즈니스 요인들도 있음) 결과 - 서비스
  • 24. - 설치 등의 과정에서 간혹 error CS가 접수됨 - 하지만 대부분 재현이 되지 않고 직접 볼 수 없어서 처리하기가 힘듦 - 로그 파일을 기록하도록 해두었지만 조금 더 체계적 으로 로깅할 수 있는 Error reporting framework 이 있으면 좋을듯 결과 - 아쉬운 점
  • 25. Mac? Linux? 지원하고 싶은데.. Windows Macintosh Linux 98.39% 1.59% 0.1%
  • 26. 드라마 주연배우 캐스팅 중! Android - Java / Android - Reactive Programming - Sqlite / Realm iOS - Swift / Objective-C - CoreData Web - Ruby on Rails / AngularJS - Bootstrap / SASS - Electron - Grunt API - Ruby on Rails - AWS - MySQL 데이터 관리 - MySQL - NoSQL - Java - Python http://dramancompany.com/joinus
  • 27. 명함 교환방 -> 코드로 교환방 찾기 명함 교환해요! ELTRN 0629