파이어베이스(Firebase)로 서비스를 개발해 본 사람이라면 공식 로컬 에뮬레이터의 불편함을 한 번쯤 겪었을 것이다. 파이어스토어(Firestore), 인증, 스토리지, 함수 등 여러 서비스를 로컬에서 흉내 내려면 자바(Java) 런타임이 필요하고, 메모리를 상당히 점유하며, 에뮬레이터를 끄는 순간 쌓아 둔 테스트 데이터가 사라지는 경우가 잦았다. 이번에 Show HN을 통해 공개된 Firenook은 바로 이 지점을 겨냥한 프로젝트다. 기존 파이어베이스 에뮬레이터 묶음을 러스트(Rust)로 다시 구현해, 쓰기 성능을 40배 끌어올리고 메모리 사용량을 10분의 1로 줄였으며 자바 의존성을 없앴다고 밝히고 있다.
핵심 설계 의도는 '그대로 갈아끼우기'에 가깝다. Firenook은 사용자가 이미 가지고 있는 firebase.json 설정, 각종 SDK, 포트 구성을 그대로 읽어 들여 동작하도록 만들어졌다. 즉 프로젝트 구조나 클라이언트 코드를 바꾸지 않고도 기존 공식 에뮬레이터 자리에 대체해 쓸 수 있다는 뜻이다. 네이티브 SDK와 웹 SDK를 모두 지원하고, 실시간 리스너, 보안 규칙(Security Rules), 네임드 데이터베이스, 그리고 공식 포맷의 import·export까지 다룬다. 여기에 더해 에뮬레이터를 재시작해도 데이터가 살아남는다는 점은, 반복적으로 환경을 띄웠다 내리는 테스트 흐름에서 체감 차이가 큰 부분이다.
어디까지 재현하는가
범위 면에서 Firenook은 단순한 파이어스토어 흉내 수준을 넘어선다. 인증(Auth) 쪽은 공식 Auth 에뮬레이터의 모든 동작을 지원한다고 설명한다. 비밀번호 로그인, 이메일 링크, 전화 인증, 다중 인증(MFA), 패스키(passkey), 테넌트(tenant), 그리고 블로킹 함수까지 포함된다. 파이어스토어와 클라우드 스토리지 API는 보안 규칙을 네이티브로 평가하며, 규칙 안에서 다른 문서를 조회하는 firestore.get() 호출도 처리한다. 보안 규칙 평가는 실제 운영 환경 동작과 로컬 테스트의 일치 여부를 좌우하는 핵심이기 때문에, 이를 네이티브로 처리한다는 점은 신뢰도 측면에서 의미가 있다.
함수(Functions) 지원도 넓게 잡혀 있다. HTTP 함수, 콜러블(callable) 함수, 스트리밍 함수를 다루고, 파이어스토어·스토리지·인증·Pub/Sub·Eventarc·스케줄·태스크 큐 등 모든 트리거 유형을 처리한다. 코드를 저장하면 자동으로 리로드되는 기능도 들어 있어, 함수 로직을 고치며 테스트하는 개발 루프를 끊지 않는다. Pub/Sub은 gRPC와 HTTP/JSON 양쪽에서 모든 RPC를 구현해, 푸시와 순서 보장, 필터, 데드레터 토픽, seek, 스냅샷, 스키마까지 커버한다고 한다. 태스크 큐는 onTaskDispatched를 위한 큐를 공식 재시도·속도 제한 동작과 함께 제공하며, onCustomEventPublished로 전달되는 커스텀 이벤트와 파이어베이스 서비스 자체 이벤트도 지원한다. 확장 기능(Extensions)은 로컬, 벤더링(vendored), 레지스트리 소스에서 불러올 수 있고 일단 벤더링하면 오프라인에서도 동작한다.
실무적 의미와 남는 질문
실무 관점에서 보면 Firenook이 해결하려는 문제는 분명하다. 자바 제거는 개발 머신과 CI 환경의 의존성을 가볍게 만들고, 메모리 10분의 1과 쓰기 40배라는 수치가 사실이라면 로컬에서 대규모 시드 데이터를 넣거나 통합 테스트를 반복 실행하는 작업의 대기 시간이 줄어든다. 데이터가 재시작 후에도 유지된다는 점은 공식 에뮬레이터에서 export·import를 수동으로 끼워 넣어 상태를 보존하던 번거로움을 덜어 준다. 공식 설정 파일과 SDK를 그대로 쓴다는 호환성 전제 덕분에 도입 장벽도 상대적으로 낮은 편이다.
다만 공개된 정보만으로는 신중하게 판단할 부분이 남는다. 40배·10배라는 수치가 어떤 작업 부하와 측정 조건에서 나온 것인지, 비교 대상이 어느 버전의 공식 에뮬레이터인지는 제시되지 않았다. 또한 '모든 동작을 지원한다'는 서술이 실제 엣지 케이스와 최신 파이어베이스 기능 변경까지 공식 구현과 완전히 일치하는지는 별개의 문제다. 에뮬레이터는 미묘한 동작 차이가 운영 배포 후에야 드러나는 경우가 있어, 재구현 프로젝트일수록 실제 프로젝트의 규칙과 트리거로 직접 검증해 보는 과정이 필요하다.
결론적으로 Firenook은 파이어베이스 로컬 개발의 오래된 불편인 무거운 자바 의존성, 느린 쓰기, 휘발성 데이터를 러스트 재구현으로 정면 돌파하려는 시도다. 기존 설정을 그대로 재사용하는 호환 지향 설계 덕에 시험 삼아 얹어 보기 쉽다는 점이 가장 큰 장점이다. 성능 수치의 재현 조건과 공식 동작과의 정합성은 각 팀이 자신의 환경에서 확인해야 할 몫으로 남지만, 공식 도구의 무게에 지쳐 있던 개발자라면 한 번 검토해 볼 만한 대안이다.