Nexa BaaS
출시 예정모바일·웹 앱을 위한 오픈소스 자체 호스팅 BaaS 플랫폼
인증·데이터·파일·푸시·오프라인 동기화까지 앱 백엔드에 필요한 것을 한 번에. 서비스 12종과 클라이언트 SDK·개발자 콘솔을 갖췄고, 서버는 Docker로 직접 호스팅합니다. 서버 기능 구현은 완료됐으며 공개 배포를 준비 중입니다.
주요 기능
- 인증 · 사용자 · 권한(RBAC) 이메일 인증을 먼저 거치는 가입(승인 모드 3종), 로그인·토큰 갱신(로테이션·재사용 탐지), 비밀번호 재설정, MFA(TOTP), Google 소셜 로그인. 사용자·그룹 관리와 거부 우선(deny > allow > group) 권한 평가를 함께 제공합니다.
- 데이터 API + 선언적 접근 규칙 JSONB 레코드 컬렉션에 대한 CRUD를 제공하고, 접근 권한은 코드가 아니라 규칙(owner · authenticated · public · permission:키)으로 선언합니다. 특정 필드 조합의 중복을 막는 유니크 제약도 지정할 수 있습니다.
- 오프라인 동기화 리비전 기준 델타 내려받기와 배치 올리기로 오프라인 변경을 병합합니다. 충돌 정책 3종(마지막 쓰기 우선·필드 병합·서버 우선), 삭제 표식(툼스톤), 클라이언트 생성 UUID를 지원합니다.
- 파일 스토리지 서버를 거치지 않는 presigned 직접 업로드로 대역폭을 아끼고, 큰 파일은 멀티파트로 이어받습니다. 데이터 API와 같은 접근 규칙을 재사용하며 고아 파일은 자동 정리합니다.
- 예약 푸시(리마인더) 기기를 등록해 두면 예약 한 줄로 원하는 시각에 푸시가 나갑니다. 지연 큐(BullMQ)로 스케줄링하고 발송 원장과 복구 스윕을 갖췄습니다.
- 웹훅 · 커넥터 도메인 트랜잭션 안에서 Outbox에 원자적으로 적재해 이벤트 유실을 막고, HMAC 서명과 지수 백오프 재시도로 발송합니다. Slack · Telegram · KakaoWork 커넥터와 이력·재발송을 제공합니다.
- 개발자 콘솔 개발자가 가입해 프로젝트를 만들고, 데이터 플레이그라운드·웹훅 등록·OAuth 자격증명·로그·사용량 대시보드를 화면에서 관리합니다.
- 의존성 0 클라이언트 SDK @nexa/sdk는 외부 의존성 없이 동작합니다. 컬렉션에 sync 옵션 한 줄로 오프라인 우선이 되고, 웹은 IndexedDB·React Native는 SQLite 드라이버 주입 방식으로 로컬 저장을 처리합니다.
- PostgreSQL RLS 멀티테넌시 Row Level Security로 프로젝트(테넌트) 사이의 데이터를 DB 수준에서 격리합니다. 모든 요청이 테넌트 컨텍스트를 세팅한 트랜잭션 안에서 실행됩니다.
- 플랜 한도 · 사용량 미터링 플랜별 가입자 수·스토리지 용량 한도를 서버가 자동으로 막고, 사용량은 일 단위로 집계해 7·30·90일 추이를 콘솔에서 확인합니다.
- 프로젝트별 OAuth (BYO OAuth) 개발자가 자신의 Google 자격증명을 등록하면(AES-GCM 암호화 저장) 동의 화면에 개발자의 앱 브랜드가 표시됩니다. 미등록 시에는 서버 기본값으로 넘어갑니다.
- Docker 자체 호스팅 docker compose로 PostgreSQL · Redis · 오브젝트 스토리지를 한 번에 띄웁니다. 외부 기술은 어댑터로 감싸 두어 런타임을 교체할 수 있습니다.
소개
Nexa BaaS는 모바일·웹 앱 개발자를 위한 Backend-as-a-Service 플랫폼입니다. 앱마다 매번 다시 만들게 되는 인증·권한·데이터 저장·파일 업로드·푸시 알림을 서버 한 벌로 제공하고, 개발자는 자신의 서버에 직접 올려 운영합니다.
현재 서비스 12종이 구현되어 있습니다. 인증(이메일 인증 기반 가입·소셜 로그인·MFA), 사용자·그룹·권한(RBAC), 데이터 API, 파일 스토리지, 예약 푸시(리마인더), 오프라인 동기화, 웹훅, 개발자 콘솔, 플랜 한도, 사용량 미터링, 로그 관리, 그리고 프로젝트별 OAuth 자격증명(BYO OAuth)입니다.
특히 공을 들인 것은 오프라인 동기화입니다. 클라이언트가 네트워크 없이 쓴 변경을 나중에 올려도 서버가 리비전 기준으로 델타만 주고받고, 충돌은 세 가지 정책(마지막 쓰기 우선·필드 병합·서버 우선) 중에 골라 처리합니다. 실제 서버에 두 클라이언트를 붙여 종단 검증을 마쳤습니다.
클라이언트는 의존성이 하나도 없는 자체 SDK(@nexa/sdk)로 붙입니다. 컬렉션에 `sync: true` 한 줄이면 오프라인 우선 컬렉션이 되고, 웹은 IndexedDB·React Native는 SQLite로 로컬에 저장합니다. 개발자 콘솔(웹)에서는 프로젝트를 만들고 데이터·웹훅·OAuth·사용량을 화면으로 관리합니다.
멀티테넌시는 PostgreSQL의 Row Level Security로 처리해 프로젝트 사이의 데이터가 DB 수준에서 격리됩니다. 외부 기술은 어댑터로 감싸 교체 가능하게 두었고, 전체를 pnpm + Turborepo 모노레포에서 기능 단위 TDD로 구현합니다. 테스트는 서버 296건 + SDK 71건이 통과 상태이며, 실제 PostgreSQL·Redis 컨테이너를 띄우는 통합 스위트 16건을 별도로 운영합니다.
아직 공개 배포 전입니다. 남은 일은 실제 자격증명이 필요한 종단 검증(푸시 발송·웹훅 실발송 등)과 약관 검토이며, 준비가 끝나면 이 페이지에 설치 방법과 다운로드를 추가합니다.
릴리스 노트
개발 현황 2026-08-06 서버 전 기능 구현 완료 · SDK · 개발자 콘솔 완비 — 아직 공개 배포 전입니다.
완료
- 서비스 12종 구현 완료 — 인증 · 사용자/그룹/RBAC · 데이터 API · 파일 스토리지 · 리마인더 · 오프라인 동기화 · 웹훅 · 개발자 콘솔 · 플랜 한도 · 사용량 미터링 · 로그 관리 · BYO OAuth.
- 오프라인 동기화 종단 검증 — 실제 서버에 두 클라이언트를 붙여 델타 동기화와 충돌 처리를 확인했습니다.
- 파일 스토리지 실계정 검증 — presigned 직접 업로드와 멀티파트 재개를 실제 오브젝트 스토리지에서 확인했습니다.
- 클라이언트 SDK(@nexa/sdk) — 의존성 0, 오프라인 우선 컬렉션, 웹(IndexedDB)·React Native(SQLite) 로컬 저장.
- 개발자 콘솔 — 프로젝트 생성부터 데이터·웹훅·OAuth·로그·사용량 대시보드까지 화면으로 관리.
- 테스트 — 서버 296건 + SDK 71건 통과, 실 PostgreSQL·Redis 컨테이너를 띄우는 통합 스위트 16건 별도 운영.
진행 중
- 예제 앱 Nexa Words(오프라인 우선 단어장) — 동기화 UI와 충돌 처리 화면 작업 중입니다.
- 실제 자격증명이 필요한 종단 검증 — 푸시 발송(FCM), 웹훅 실발송, 프로젝트별 Google 동의 화면.
- 약관·개인정보처리방침 초안 및 법률 검토 — 공개 배포의 선행 조건입니다.
알림
- 아직 공개 배포 전이며 다운로드나 설치 방법을 제공하지 않습니다. 저장소도 비공개입니다. 준비가 끝나면 이 페이지에 설치 안내와 링크를 추가합니다.
약관 및 정책
등록된 약관·정책 문서가 없습니다.