Tauri: 가벼운 데스크탑 애플리케이션 프레임워크

1. Tauri란 무엇인가?

Tauri는 데스크탑 애플리케이션을 개발할 수 있는 가볍고 안전한 오픈 소스 프레임워크입니다. Tauri를 사용하면 웹 기술을 이용해 Windows, macOS, Linux에서 실행 가능한 네이티브 애플리케이션을 만들 수 있습니다. 주로 Rust와 **웹 기술(HTML, CSS, JavaScript)**을 결합하여 제작되며, 성능과 보안 측면에서 매우 강력한 특징을 갖고 있습니다.

2. 왜 Tauri인가?

Tauri는 Electron이나 다른 데스크탑 앱 프레임워크에 비해 매우 경량입니다. 기존의 Electron 앱은 크롬과 같은 브라우저 엔진을 내장하여 용량이 큰 경우가 많습니다. 하지만 Tauri는 시스템의 네이티브 웹뷰를 사용하기 때문에 앱의 크기가 훨씬 작습니다.

주요 장점:

  • 가벼움: 앱 크기가 매우 작고, 시스템 리소스를 적게 사용합니다.
  • 보안성: Tauri는 보안을 최우선으로 하며, 웹 기술을 기반으로 하면서도 로컬 파일 시스템 접근을 최소화합니다.
  • 다중 플랫폼 지원: Windows, macOS, Linux 모두에서 동일한 코드베이스로 빌드가 가능합니다.
  • Rust의 성능: Tauri는 백엔드에서 고성능 언어인 Rust를 활용하여 더 빠른 실행 속도를 제공합니다.

3. Tauri와 Electron 비교

TauriElectron
기술 스택Rust + 웹 기술Node.js + Chromium
애플리케이션 크기1~10MB (작음)50~100MB (큼)
리소스 사용량적음많음
보안높은 보안성상대적으로 낮음
성능Rust 기반으로 매우 빠름비교적 무거움

4. Tauri의 특징

  1. 작은 크기: Tauri로 만든 애플리케이션은 1MB에서 10MB 정도의 크기를 가집니다. 작은 애플리케이션 크기는 다운로드 시간과 설치 시간을 크게 줄여줍니다.
  2. Rust로 백엔드 작성: Rust의 고성능과 안전성을 활용할 수 있습니다. Rust는 메모리 안전성을 보장하며, 시스템 리소스를 효율적으로 사용합니다.
  3. 웹 개발자의 쉬운 접근성: 이미 HTML, CSS, JavaScript를 알고 있는 웹 개발자라면 Tauri를 이용해 데스크탑 애플리케이션을 빠르게 개발할 수 있습니다.
  4. 보안성 강화: Tauri는 애플리케이션과 로컬 시스템 간의 상호작용을 엄격히 제한합니다. 보안에 민감한 앱 개발 시 매우 유용합니다.

5. Tauri로 개발을 시작하려면?

Tauri를 시작하려면 아래의 개발 환경이 필요합니다:

  • Rust 설치: Tauri는 Rust를 백엔드로 사용하므로, 먼저 Rust를 설치해야 합니다.
  • Node.js 및 패키지 관리자 설치: JavaScript 및 패키지 관리를 위해 Node.js와 npm/yarn을 설치합니다.
  • Tauri CLI 설치: 프로젝트를 생성하고 빌드하는 데 필요한 CLI 도구입니다.
bash코드 복사# Rust 설치
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Node.js 및 패키지 관리자 설치 (Node.js 웹사이트에서 다운로드)
npm install -g tauri-cli

6. 결론

Tauri는 기존의 데스크탑 애플리케이션 개발 프레임워크보다 경량화된 솔루션을 제공합니다. Rust의 성능을 바탕으로 웹 기술과 결합하여 데스크탑 앱을 쉽게 개발할 수 있고, 작은 앱 크기와 높은 보안성 덕분에 사용자 경험도 우수합니다. Electron이 제공하는 풍부한 기능이 필요하지 않거나, 더 가벼운 대안을 찾고 있다면 Tauri가 훌륭한 선택이 될 수 있습니다.

데이터 엔지니어와 데이터 사이언티스트의 차이

데이터 엔지니어(Data Engineer)와 데이터 사이언티스트(Data scientist, 데이터 과학자)에 대한 차이에 대한 포스트입니다.

GPT나 Claude에게 물어보면 잘 대답해 주겠지만 그냥 설명하기 쉽게 표로 만들어 봤습니다.

질문 항목데이터 엔지니어데이터 사이언티스트 (데이터 과학자)
무슨 일을 하는가?데이터 처리에 대한 일을 한다.데이터 분석과 활용에 대한 일을 한다.
한마디로 하는 일을 쉽게 설명하면?데이터 저정, 흐름, 이용에 대한 것을 관리한다.데이터의 분석, 재활용을 통해 부가가치 창출과 서비스 고도화를 한다.
일과 시간에 하는 일은?대부분의 시간을 데이터 플랫폼을 다루는데 쓴다.
S3, BigQuery, Hadoop/Hive/Spark
대부분의 시간을 데이터를 분석하고 모델을 만드는데 쓴다.
통계분석, ML/AI 모델링, 모델 성능 분석
주로 사용하는 도구는?개발툴 보다는 터미널, 관리툴 등을 주로 사용한다.개발툴 보다는 주피터노트북이나 모델링을 위한 스크립트 파일을 작성할 수 있는 편집기를 주로 쓴다.
데이터와 관련된 어떤 일을 하는 것인가?ETL과 같은 업무에 깊이 관여하며 데이터가 잘 전송되고 정합성 문제가 없는지 확인하는 것에 중점을 둔다.ETL 보다는 Feature Engineering이나 aggregation 더 깊이 관여하며 정합성 보다는 좋은 통계적 인사이트를 찾거나 모델을 만드는데 더 중점을 둔다.
포지션(일자리) 수요데이터 관련 인프라 유지가 필요한 회사에서만 포지션이 있다.데이터 분석, 데이터 과학을 서비스에 적용할 일이 있는 회사에만 필요
경력이 많아짐에 따라 발전 하는 것어느 정도 경력이 쌓이면 더 발전할 것은 없고 사용하는 솔루션의 종류가 운영 경험이 쌓인다.데이터로 부터 얻을 수 있는 인사이트에 통찰이 생기며 다양한 모델링의 종류와 경험이 쌓인다.
급여 수준일반적으로 개발자 보다 조금 높다일반적으로 개발자 보다 많이 높다

Nginx로 userid (쿠키 세션 ID) 자동 생성하기

세션ID, 쿠키ID

쿠키에서 넣어놓는 세션ID(사용자ID)를 속칭 쿠키ID라고 합니다.

웹사이트나 포털사이트에 비로그인 접속자들을 추적하기 위해서 사용합니다.

구글, 네이버, 온라인광고, 이커머스 등의 사이트에서 사용자의 행적을 추적할 때 가장 많이 사용합니다.

이 비식별 키를 기준으로 사람들의 행동을 쌓아놓은 로그데이터인 행적데이터(로그 데이터)가 빅데이터에서 말하는 대량 데이터의 핵심 중 하나입니다. 이 로그를 분석하면 인사이트가 나옵니다.

로그인하지 않는 경우에는 추천시스템도 이 데이터를 기본으로 만들며 세그멘테이션, 데이터 교환 같은 것도 다 이것을 기준으로 합니다.

생성 방법

예전에는 백엔드서버에서 생성을 해서 쿠키로 생성해주는 방식을 많이 썼지만 NginX에 userid라는 모듈이 있어서 이 일을 대신해주니 편리합니다. NginX 없이 바로 웹서비스를 하는 경우에는 구현이 필요합니다.

보통 랜덤값을 생성해서 16바이트 또는 32바이트 16진수값을 문자열로 바꿔서 넣습니다.

사용자의 IP나 특별한 정보를 넣기도합니다만 쓸모가 없어서 요즘은 잘 하지 않습니다.

userid on;
userid_name uid;
userid_domain example.com;
userid_path /;
userid_expires 365d;
userid_p3p 'policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"';

만료기간은 기본 1년으로 되어 있지만 넉넉하게 5년쯤으로 넣어 놓으면 됩니다.

셀리니움 “Chrome이 자동화된 테스트 소프트웨어에 의해 제어되고 있습니다” 없애기

웹사이트에서 접속하는 웹브라우저가 자동제어되는 웹브라우저인지 아닌지 알아낼 수 있습니다.

웹드라이버로 조종되고 있는지 아닌지를 웹 브라우저가 알려주도록 되어 있기 때문입니다. 그걸 이용해서 자동화해서 데이터를 가져가지 못하게 차단하는 웹사이트가 있습니다.

웹사이트에서 차단하지 못하게 웹드라이버로 조종되는지 알려주는 것들을 제거하거나 가리는 방법입니다.

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.chrome.service import Service
options = Options()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
# user-agent를 일반적인 브라우저와 비슷하게 설정
options.add_argument('--disable-blink-features=AutomationControlled')
# 크롬 드라이버 경로 설정
service = Service(executable_path="path_to_chromedriver")
driver = webdriver.Chrome(service=service, options=options)
# 필요한 작업 수행
driver.get('https://www.example.com')
# 작업 종료 후 드라이버 종료
driver.quit()