둘중 어떤걸 설치하는지 망설여지는 사람이 있을텐데 LTS 는 Long Term Support 의 약자로 해당버전으로 오랫동안 지원하도록 고안된 안정된 버전이다. Current는 현재 최신 버전을 의미하는데 필자는 그냥 최신이 좋아서 Current 버전으로 설치하도록 하겠다. 뭐 개인용 프로젝트인데 큰 의미가 없다. 개발하면서 그동안 개선된거 누리면서 개발하다가 큰문제가 생겨서 막히는 순간이 오면 LTS 버전으로 돌아가면 된다. 하지만 큰 규모의 프로젝트에서 사용한다면 LTS를 설치하여 개발하는게 당연히 맞다.
Rust 라는 언어에 대한 학습곡선도 있긴하지만 다른 부분도 학습해야 할 부분이 많아서 고민하던 중에 Go-lang 진영에서 개발된 Cross Platform 이 있다는걸 알게되었다. 일단은 뛰어난 성능이 최우선이 아니라 빨리 만드는게 더 중요한 포인트여서 Rust-Tauri-Svelte 개발건은 잠시 보류하기로 한다. 게다가 더 큰 문제는 회사에서 방화벽 때문에 Rust 관련 module이 다운로드가 안된다는 점이다.
Electron이 가장 오래되었고 각종 유명한 프로그램들이 Electron을 기반으로 만들어졌다.
가장 대표적인건 VS Code 이다.
하지만 Chrominum 자체 배포에 용량이 크다는 문제점이 제기되는데 대안으로 Rust 언어로 만들어진 Tauri가 차츰 조명을 받으며 부상하고 있다.
그리고 Tauri와 WAILS 의 비교를 보면 Tauri가 현재 좀더 핫하긴한데 특이한건 Wails의 성장속도가 꽤 가파르다는 사실이다. 아무래도 Rust 언어의 학습곡선보다 훨씬 낮은 Go 언어의 장점이 개발자들에거 더 어필하고 있는것 같다. Wails의 특장점은 아직 자세하게 파악되지 않았다. 그래서 다음 링크를 대체하려고 한다.
설치 후 Tauri + yew 샘플페이지가 정상적으로 실행되는걸 확인했으니 앞으로 개발할 App에서 사용할 기술이 어떤것이 있는지 확인해볼 차례다. 이제 겨우 개발환경 기초만 만들었기 때문에 앞으로 가야할 길이 멀긴하다.
자 그럼 어떤기술이 필요할 것인지 전체적인 App의 기능에 대해서 기획해볼 차례다.
업비트, 바이낸스 (혹은 기타 거래서 API) Websocket, Restful API 를 통해서 필요한 거래정보를 가져온다. (API 신청이 완료되었다고 가정한다. : 댓글이나 메일로 API 신청에 대해서 자세히 알고 싶다는 요청글이 많아지면 별도로 작성하겠지만 API 신청에 대해서는 이미 많은 정보들이 있으므로 검색해서 찾아보도록 하자)
코인리스트를 우측에 보여주고 체크된 코인에 대해서 오른쪽 화면에 Grid 형태로 필요정보를 지속적으로 갱신해준다.
개인이 설정한 전략에 따라서 자동, 반자동, 수동 매매를 할 수 있도록 버튼을 배치한다.
간략한 차트를 볼수 있게 버튼을 구성하거나 차트를 기본적으로 보여주도록 한다.
매매 전략에 부합되는 코인들에 대해서 알림을 해준다.
현재는 현물 거래만 지원하고 추후 비트코인 및 원하는 알트코인에 대한 선물 매매기능도 지원한다.
특정 알고리즘에 부합되면 Telegram Bot으로 채널에 알림을 전송한다.
오류가 발생하거나 이상이 발생하면 Telegram 이나 email, sms 메세지로 알림을 전송한다.
코인 마켓메이커의 성향을 반영한 매매전략을 수립할 수 있도록 한다.
대략적인 기능을 나열해봤는데 구현하려면 꽤 많은 학습이 필요할 것 같다. 왜냐하면 처음 해보는 언어이기 때문에 어떤 crate 들이 필요한지 체크해야 하고 적합성도 확인을 해야 하는데 그렇게 간단한 일이 아니다. 그렇지만 일단 Just Do It 프로젝트이기 때문에 과감하게 진행하면서 문제점들을 해결해나가야 한다.
너무 고민을 오래 하지말자. 시간만 가고 머리속 지식으로 끝나버리는 경우가 너무 많다. 최근에 [클루지(Kluge)] 라는 책을 읽었는데 내가 가진 문제를 콕 찝어서 해결책을 알려주는것 같은 책이었다.
클루지 : 어떤 문제에 대한 서툴거나 세련되지 않은 (그러나 놀라울 만큼 효과적인) 해결책
너무 깊은 고민에 어떤일을 진행하지 못하는 나쁜 습관을 가지고 있다면 꼭 한번 읽어보도록 하자. 의외의 해결책을 깨달을지도 모른다.
자 책소개는 이정도만 하고 본론으로 돌아가 보자.
위의 기능을 구현하기 위해 필요한 개발 기술들을 나열해보도록 하자
Winform : Tauri
Webform : Yew (WASM)
Websocket : Tokio, Actix
GUI : Tarui - EGUI
위의 기술들은 비교적 신규 기술들이므로 지속적으로 발전하고 급격한 변화를 맞아서 소스코드를 뒤엎을 수도 있을지도 모른다. 하지만 현재 구상한 프로젝트를 만들기 위한 최적의 기술들을 나열해봤다.
일단 진행해본다. 진행하다보면 기술적난제나 난이도 때문에 교체가 필요할지 모르겠지만 선택한것을 믿고 가도록 하자.
보통 Rust 패키지 관리자인 Cargo 를 사용할때 다음과 같은 문법으로 패키지를 추가한다.
cargo install create-tauri-app
관련 패키지들을 다운받아서 로컬에서 빌드를 하게 되는데 최초 관련 패키지들의 소스를 다운받아서 컴파일 한 후 빌드하면 사용할 패키지가 완성된다. 그런데 다운받아서 빌드하는데 5분넘게 시간이 걸린다. 아무래도 너무 오랜 시간이 걸리는 문제점을 개선하기위해 이미 빌드된 패키지를 다운 받는 기능을 만들어서 배포하는것 같다.
그럼 binstall 을 설치해보자.
cargo install cargo-binstall
이것도 꽤 많은 패키지들의 소스를 다운받아서 컴파일한 다음 cargo-binstall 패키지를 완성한다.
설치가 완료되면 다음 두가지 방법으로 호출해서 사용할 수 있다.
cargo binstall <다운받을 패키지명>
or
cargo-binstall <다운받을 패키지명>
Unreal Engine에 Rust를 사용할 수 있는냐 라는 글에 대한 내용인데 할 수는 있는데 좀 회의적인 반응의 글이다.
글 내용중에 곧 Unreal Engine 에서Unreal Verse 라는 Future Scripting Language 를 발표할꺼라는 내용이 좀 흥미를 끌었다. Python과 Lua의 혼합을 생각나게 하는 완전히 새로운 언어라고 하는데 많은 개발자들이 어려운 C++을 사용하지 않고 접근할 수 있는 일종의 쪽문 같은걸 만들어줄 생각인가보다.
현재 설치된 Windows OS가 32bit이면 왼쪽, 64bit 면 오른쪽 버튼을 클릭해서 Rust를 설치한다.
설치 후 cmd (Command 창)을 실행해 다음을 입력해본다.
rustc --version
버전이 표시되면 설치가 정상적으로 된것이다.
2. create-tauri-app 설치
RUST 를 설치하면 Cargo가 설치된다. Cargo 는 RUST 의 패키지의 의존성을 관리해주는 패키지 관리자 이다.
요즘 각 언어들의 패키지를 관리해주는 패키지 관리자들이 너무 많은데 여러 언어들을 조합해서 사용하다 보면 각각의 패키지 매니저들의 명령어들을 알아야 하는데 조금씩 틀려서 너무 헷갈린다.
시간내서 주로 사용하는 패키지 매니저들을 수집해보고 많이 사용하는 명령어들을 한곳에 모아두는 글을 작성해볼까 한다. 내가 너무 힘들다. 명령어 각각 외우려니깐 뒤죽박죽이 되어서 계속 헤맨다.
자 일단 Tauri app 프로젝트를 만들기위해 create-tauri-app 을 설치해보자
cargo install create-tauri-app
설치가 완료되면 설치된 패키지 확인을 해본다.
tauri-cli도 설치를 해야 하는데 create-tauri-app을 설치하면 패키지 리스트에는 나타나지 않지만 같이 설치가 되는것 같다.(좀 더 확인이 필요함)
cargo install --list
정상 설치가 확인이 되면 개발할 프로젝트를 생성해보자.
일단 프로젝트 명칭을 정해야 한다. 프로젝트명이 폴더명이 되므로 원하는 명칭을 미리 생각해둔다. 현재 프로젝트는 graduateapp-yew 로 정했다.
프로젝트 생성을 할때 다음의 절차를 가진다.
1. 프로젝트 명 등록 : 폴더명 2. 패키지관리자를 선택한다 (cargo, pnpm, yarn, npm) 3. 사용할 프론트엔드 프레임워크 > 어떤 패키지 관리자를 선택하느냐에 따라 선택할 프론트엔드 프레임워크가 다르다. > 현재는 yew를 사용할 것이므로 cargo를 선택한다.
이렇게 3가지를 등록 선택하고 나면 프로젝트가 생성된다.
기본적인 템플릿형태로 프로젝트가 생성되기 때문에 한번 실행해 볼 수 있다.
하지만 yew의 경우는 별도의 추가적인 설치가 더 추가되어야 한다.
WASM 을 빌드/배포 하고 localhost 서버를 구동해주는 모듈이 필요한데 2가지 중 선택해서 사용하면 된다.
trunk는 빌드/배포와 local서버를 같이 사용할수 있고 wasm-pack은 빌드만 가능하고 local서버를 별도의 외부 모듈을 사용하는 형태로 사용되는데 자신에게 맞는 형태의 것들 사용하면 되겠다. 두가지의 장단점은 아직 잘 모르겠다. 그런데 특이하게 wasm-pack 의 인기도가 더 높은것 같아보여서 혹시 나중에 정리할 수 있다면 정리해보도록 하겠다.
그리고 현재 wasm-pack 을 cargo로 설치하면 openssl 관련 오류 떄문에 설치가 정상적으로 되지 않는데 wasm-pack 홈페이지에서 제공하는 exe 파일을 다운받아서 실행하면 사용가능하다.
일단 이번 프로젝트에서는 trunk 를 사용하기로 하고 trunk 관련 모듈을 설치한다.
# WebAssembly 대상 설치
rustup target add wasm32-unknown-unknown
# Trunk 설치
cargo install --locked trunk
# need to install wasm-bindgen manually.
cargo install --locked wasm-bindgen-cli
trunk 와 wasm-bindgen-cli 이 모두 설치되었고 안보이던 tauri-cli v1.1.1 도 리스트에 나타났다.
자 이제 설치는 모두 끝났으니 graduateapp-yew 폴더로 이동 후 앱을 개발모드로 실행해보도록 하자
-- 프로젝트 폴더로 경로를 이동한다.
cd graduateapp-yew
-- Tauri 실행
cargo tauri dev
정상적으로 실행되었다.
기존에 실행하던 svelte 와 react 연동보다 실행속도가 확실히 빠르다는걸 느낄수 있다.
내친김에 release 배포 build도 진행해보자
cargo tauri build
release 빌드를 실행하면 다음과 같은 오류가 발생한다.
tauri.conf.json 에 identifier 항목의 'com.tauri.dev' 가 앱 사이에서 유니크한 명칭이어야 한다는것 같은데 관련 글들을 읽어봐도 정확한 의미를 모르겠다. 일단 release 빌드 가능하도록 수정해주자