Unity : 같은 PC에서 클라이언트 여러개 실행시 멈추는 현상 (Firestore)

2026. 2. 8. 15:54·Unity

현상

Unity 프로젝트에서 Firebase Cloud Firestore를 사용할 때, 한 컴퓨터에서 클라이언트를 여러개 동시에 실행하면 완전히 멈춰버리거나 크래시가 발생하는 문제가 있었다.

 


 

원인 분석

사실 크게 기술적인 원인 분석을 한 부분은 없었다.

그런데도 왜 Firestore 라고 확신했냐면, Firebase Auth 도입 직후까지는 정상적으로 멀티 클라이언트 실행이 가능했던 프로젝트가 Firestore 도입 시점부터 바로 이런 현상이 발생했기 때문이다...

물리적으로 다른 원인이 있을 수 없었다.

 

하지만 Firestore가 원인이라고 해도 이해가 가질 않았다.

웹 에서 Firestore를 사용했던 경험으로는 하나의 컴퓨터에서 여러개의 브라우저, 여러개의 계정을 통해 Firestore에 아무리 접근해도 그 어떤 문제가 되지 않았기 때문이다.

 


 

해결 과정

1) 재현 조건

동일 PC에서 클라이언트를 2개 이상 동시에 실행

Firestore 사용 지점, 즉 로그인 지점 (해당 프로젝트에서는 로그인 직후 DB에서 회원 정보를 조회) 에서 문제가 발생하는 것으로 보임

 

2) 조사

Firestore는 성능 오프라인 동작을 위해 로컬에 캐시/DB를 유지(오프라인 지속성) 하는 구조를 가진다.

그리고 이 로컬 DB는 일반적으로 동일한 저장 경로에 대해 하나의 프로세스만 배타적으로 접근할 수 있다.

 

즉, 동일 PC에서 동일한 앱을 여러개 띄우게 되면

 

1번 인스턴스가 로컬 캐시 DB를 열고 "LOCK"을 잡는다.

2번 인스턴스도 동일한 경로의 DB를 열려고 시도한다.

LOCK을 얻지 못해 초기화에 실패하고 프리즈/크래시로 이어진다.

 

3) 그런데 왜 웹에서는 멀쩡했나?

이게 가장 의문점이었는데... 검색을 해보니 이미 안드로이드 앱에서도 비슷한 현상이 있었다는 리포트를 발견했다.

 

웹 SDK는 브라우저 저장소 기반이고, 탬 / 프로필 / 브라우저 단위로 저장소 분리 또는 조정이 되어있다.

반면 Unity나 일반적인 어플리케이션의 경우 동일한 실행 파일을 공유하는 형태로 동작한다.

이때 Firestore 로컬 캐시가 단일 경로를 점유해버리면 다중 프로세스에서 충돌이 발생한다.

 

즉, Firestore가 의도적으로 멀티 접근을 막은 게 아니라, 동일 PC 동일 앱의 로컬 캐시 저장소가 멀티 프로세스에 취약한 구조였다고 보는 편이 정답에 가깝다.

 

 


 

해결

 

해결법은 매우 간단했다.

 

Firestore 초기화 단계에서

FirestoreSettings.PersistenceEnabled = false;

 

한 줄만 초기화 해주면 된다.

이렇게 되면 로컬 DB를 사용하지 않게 되어, 동일 PC 다중 클라이언트 실행시 충돌이 발생하지 않게된다.

물론 일반적으로 다중 클라이언트 실행을 허가하는 게임은 많지 않기 때문에 개발 테스트 단계가 아니라면 굳이 필요 없어 보이긴 한다.

 

 

부작용

오프라인 캐시 기반 동작이 약해지기 때문에 네트워크 호출 효율성이 떨어질 수 있다.

즉, 네트워크 상황이 안 좋을 때 체감 성능이 떨어질 수 있기 때문에 사용 여부 및, 실제 배포 빌드에서 어떻게 할지에 대해 고민해볼 필요가 있다.

'Unity' 카테고리의 다른 글

Unity : 마샬링(Marshalling) 과 메모리 풀링(Memory Pooling)  (0) 2026.03.02
Unity : C#과 Unity에서의 암묵적 Boolean 값 변환 => if (gameObject) 가능??  (0) 2026.03.02
Unity : 관리자 콘솔 구현 및 프리징 현상 개선  (0) 2026.02.08
Unity : Firebase 등록 및 Auth로 (이메일/소셜) 로그인 구현  (0) 2026.01.11
Unity Network : Photon Pun2 - PhotonView, IPunObservable, RPC  (0) 2026.01.07
'Unity' 카테고리의 다른 글
  • Unity : 마샬링(Marshalling) 과 메모리 풀링(Memory Pooling)
  • Unity : C#과 Unity에서의 암묵적 Boolean 값 변환 => if (gameObject) 가능??
  • Unity : 관리자 콘솔 구현 및 프리징 현상 개선
  • Unity : Firebase 등록 및 Auth로 (이메일/소셜) 로그인 구현
ellug
ellug
Web / App / Game Dev
  • ellug
    dev.ellug
    ellug
  • 전체
    오늘
    어제
    • 분류 전체보기 (95)
      • Javascript (React, Next) (1)
      • C# (66)
      • Graphics (1)
      • Unity (25)
      • 프로그래머스 (0)
        • Lv.0 (0)
        • Lv.1 (0)
        • Lv.2 (0)
        • Lv.3 (0)
      • AI Agent (0)
      • StableDiffusion (0)
      • ETC (1)
      • 잡담 (0)
      • 유머 (0)
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Queue
    Photon
    추상 클래스
    unity
    useState
    터미널
    스택
    자료구조
    struct
    interface
    function
    Design Pattern
    list
    콘솔
    Network
    알고리즘
    게임
    C#
    firebase
    네트워크
    Abstract
    최적화
    class
    유니티
    stack
    클래스
    큐
    inputsystem
    console
    delegate
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
ellug
Unity : 같은 PC에서 클라이언트 여러개 실행시 멈추는 현상 (Firestore)
상단으로

티스토리툴바