Hong의 모든 글

wsl2 종료되지 않게 하기 – Prevent wsl2 from exiting

wsl2를 실행해두고 간이 linux 서버로 쓰려는 목적으로 mini pc에 실행을 해두었지만 wsl2가 며칠 이내에 반드시 자동으로 종료되는 문제가 있었습니다. 그래서 여러가지 설청 방법을 찾아서 wsl2를 항상 켜두는 방법을 전에 올린 적이 있었습니다. 그런데 그 방법은 결과적으로 작동하지 않는다는 것을 알았습니다.

예전보다 실행되어 있는 시간이 길어 조금 오래 버티기는 하지만 wsl2를 실행하고 열어둔 “터미널(terminal)” 이나 “파워쉘(powershell)”까지 종료 시키면서 확실하게 종료됩니다.

아마도 윈도우에서 실향된지 오랜된 wsl을 강제로 종료하도록 확실해게 처리한 것 같습니다. 특히 “명령 프롬프트”나 “파워쉘”을 통해서 실행한 것은 wsl뿐만 아니라 “명령 프롬프트”와 “파워쉘”까지 모두 종료됩니다.

그래서 다른 방법으로 C#으로 wsl2가 죽었는지 학인해서 되살리는 애플리케이션을 간단하게 돌려서 실행했더니 3주 이상 잘 작동하고 있습니다.

간단한 것이지만 소스는 github에 있으니 필요하면 참고하세요.

https://github.com/euriion/wsl-reviver

Supabase 사용자 추가 에러 – Failed to create user: API error happened while trying to communicate with the server.

Supabase는 실시간 처리를 지원하는 데이터 저장 솔루션인데 backend api 기능과 데이터베이스를 묶어놓은 솔루션입니다.

서비스를 서비스로 제공하는 Saas를 구독해서 쓰거나 자체 설치해서 쓸 수 있습니다. 설치형은 docker를 이용해서 설치하게 됩니다.

그런데 설치할 꼼꼼하게 하지 않으면 문제가 생기는 것을 알았습니다.

문제

Supabase를 docker로 Ubuntu에 설치한 후에 대시보드에 접속해서 사용자를 새로 추가하려고 하니 다음과 같은 에러가 발생했습니다.

Failed to create user: API error happened while trying to communicate with the server.

에러 메세지기 매우 불친절해서 오류를 찾는데 시간이 꽤 오래 걸렸는데요 API와 관련된 부분이 잘못 설치된 것인지 확인하고 재설치까지 여러 번 해봤지만 해결되지 않았습니다.

원인 발견

여러가지를 해보다가 발견한 원인은 supabase를 설치할 때 .env를 잘못 세팅한 것이었습니다.

바로 아래의 화면에서 사용자를 추가할 때 추가되지 않는 것인데 사실 사용자 추가 뿐만 아니라 기능 몇가지가 모두 작동하지 않고 있었습니다. 아래 화면은 사용자 추가가 성공한 모습입니다.

supabase의 레파지토리에 docker를 이용해서 설치할 때 사용하도록 .env.local이라는 파일을 제공하고 있고 실제 사용할 때는 .env로 파일 이름을 바꾸고 내용을 수정해서 사용해야 합니다.

파일내용입니다.

############
# Secrets
# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION
############

POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password
JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long
ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE
SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q
DASHBOARD_USERNAME=supabase
DASHBOARD_PASSWORD=this_password_is_insecure_and_should_be_updated
SECRET_KEY_BASE=UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq
VAULT_ENC_KEY=your-encryption-key-32-chars-min


############
# Database - You can change these to any PostgreSQL database that has logical replication enabled.
############

이때 위의 내용을 아무렇게나 입력해서 고치면 안되고 JWT_SECRET, ANON_KEY, SERVICE_ROLE은 생성규칙이 있어 그에 맞게 생성된 것을 사용해야 합니다.

여기서 문제가 되는 것이 key를 생성하는 도구가 따로 있다는 것입니다.

생성하는 방법은 아래의 설치 가이드 페이지에 보면 생성하는 도구가 페이지 안에 붙어 있습니다. 페이지에서 버튼을 몇 번 눌러 사용할 값을 바꾼 후에 바뀌는 것들 중 한 세트를 골라서 .env에 넣으면 됩니다.

https://supabase.com/docs/guides/self-hosting/docker

위와 같은 화면입니다.

.env를 위의 페이지에서 생성한 값으로 바꾸고 나서 다음과 docker를 다운시킵니다.

docker compose down

그리고나서 컨테이너를 다시 실행하면 됩니다.

docker compose up -d

WSL2를 항상 켜두는 방법: 백그라운드 유지 문제 해결하기

문제 상황

WSL2(Windows Subsystem for Linux 2)를 PC나 Mini PC에서 리눅스 서버처럼 계속 실행해두고 싶었습니다. 하지만 시간이 지나면 자동으로 종료되어 서버로 사용할 수 없는 문제가 발생했습니다.

여러가지를 해봤지만 모두 실패했는데 성공한 방법을 공유합니다.

시도했던 해결책들

1. 백그라운드 프로세스 실행

WSL2는 기본적으로 백그라운드에서 실행 중인 프로세스가 없으면 자동으로 종료될 수 있습니다. 백그라운드 프로세스를 실행해 놓았지만 효과가 없었습니다.

2. 시스템 절전 모드 비활성화

Windows 시스템이 절전 모드나 하이버네이트로 전환되면 WSL2가 중단될 수 있습니다. 절전 모드를 사용하지 않도록 설정해 보았지만 역시 해결되지 않았습니다.

3. WSL 설정 문제 확인

특정 서비스(예: Redis) 실행 시 WSL이 중단되는 경우가 있다고 하여 확인했지만, 이런 문제는 없었습니다.

4. 리소스 과부하 체크

WSL2가 과도한 메모리나 CPU를 사용할 경우, Windows가 이를 강제로 종료할 수 있습니다. 예를 들어, vmmem 프로세스가 높은 리소스를 소모하는 경우가 있는데, 이런 경우 자동 종료될 수 있습니다. 하지만 이 문제도 아니었습니다.

5. 기본 쉘 설정 확인

기본 쉘 설정이 잘못되어 실행되지 않거나 종료되는 경우도 있습니다. 예를 들어, 삭제된 쉘(zsh 등)을 기본으로 설정한 경우 문제가 발생할 수 있지만, 이 문제도 아니었습니다.

해결 방법

여러 방법을 시도한 끝에 다음 명령어를 실행하면 WSL2가 백그라운드에서 계속 실행되는 것을 확인했습니다:

wsl --exec dbus-launch true

이 명령어는 WSL 프로세스를 활성 상태로 유지해줍니다. D-Bus 세션을 시작하고 이를 통해 WSL의 백그라운드 프로세스가 계속 실행되도록 합니다. 이렇게 해도 2주 정도 지나면 종료될 수 있습니다.

추가로 아래의 페이지에 가서 systemd 스크립트를 실행해 둡니다.

https://github.com/DamionGans/ubuntu-wsl2-systemd-script

그리고 인도우의 홈 디레토려에 .wslconfig 파일을 생성하고 아래의 내용을 넣습니다. 메모리 크기 같은 것은 적절히 원하는 값으로 변경하세요.

[wsl2]

# Limits VM memory to use no more than 4 GB, this can be set as whole numbers using GB or MB
memory=8GB
vmIdleTimeout=-1
#networkingMode=mirrored

# Sets the VM to use two virtual processors
processors=4

결론

WSL2를 리눅스 서버처럼 지속적으로 사용하려면 여러 설정이나 최적화가 필요할 수 있습니다. 그중에서도 wsl --exec dbus-launch true 명령어가 가장 효과적인 해결책이었습니다. 이 방법으로 WSL2를 지속적으로 실행하여 서버 용도로 안정적으로 사용할 수 있게 되었습니다.

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 더 깊이 관여하며 정합성 보다는 좋은 통계적 인사이트를 찾거나 모델을 만드는데 더 중점을 둔다.
포지션(일자리) 수요데이터 관련 인프라 유지가 필요한 회사에서만 포지션이 있다.데이터 분석, 데이터 과학을 서비스에 적용할 일이 있는 회사에만 필요
경력이 많아짐에 따라 발전 하는 것어느 정도 경력이 쌓이면 더 발전할 것은 없고 사용하는 솔루션의 종류가 운영 경험이 쌓인다.데이터로 부터 얻을 수 있는 인사이트에 통찰이 생기며 다양한 모델링의 종류와 경험이 쌓인다.
급여 수준일반적으로 개발자 보다 조금 높다일반적으로 개발자 보다 많이 높다