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를 지속적으로 실행하여 서버 용도로 안정적으로 사용할 수 있게 되었습니다.