[Unity] 구글 소셜 로그인 연동(Firebase Auth) – 서버 검증(Token 인증), DB 저장까지 전체 흐름정리
이번 글에서는 Unity 환경에서 구글·페이스북 소셜 로그인을 구현하는 전체 흐름을 다룬다.
클라이언트 로그인 요청부터 서버 검증(Token 인증), 그리고 DB에 사용자 정보를 저장하는 단계까지 실제 프로젝트에서 사용할 수 있는 형태로 정리했다.
전체 흐름

1. 클라이언트(App ) 로그인요청 → 외부서버(Google)
- 클라이언트가 다른 서버에 (페이스북,구글) 로그인 요청
⬇️미리 Unity에서 Google 로그인 연동 적용 필요
[Unity] 구글 로그인 연동 적용(Google Sign-In, Firebase Auth)
Unity 2022.3.3 + Firebase Auth + Google Sign-In 연동 기록1. 개발 환경Unity 버전: 2022.3.3f1 (LTS)Firebase Auth Unity 패키지: FirebaseAuth_11.6.0Google Sign-In 플러그인: google-signin-plugin-1.0.4 (Parse 폴더 제외 후 임포트)빌드
debug-think.tistory.com
Unity로 빌드한 App에서 GoogleSignIn으로 구글 로그인 시도(구글은 Unity Editor에서 테스트 불가)

2. 외부서버(Google) [유저정보] → 클라이언트(App)
- 다른 서버에서 (페이스북,구글) 로그인 승인을 클라이언트로 전달
로그인 성공하면 GoogleSignInUser를 받는데 서버에서 사용하려는건 IdToken


3. 클라이언트(App) [구글 토큰] → 서버(WebServer)
- 클라이언트가 웹 서버로 승인된 정보 전달
- 클라이언트에서 2번에서 수신 받은 Google IdToken을 FirebaseAuth에서 Credential로 자격 확인

- 이상없으면 웹서버로 전달



4. 서버(WebServer) [구글토큰] → 외부서버(Google)
- 웹 서버가 외부 서버에 (페이스북,구글) 정보가 맞는지 확인 요청


구글에 token 확인 요청할 때 아래와 같이 필요.
https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123


백엔드 서버에서 인증 | Google for Developers
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 백엔드 서버에서 인증 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 백엔드와 통신하는 앱 또는 사
developers.google.com
5. 외부서버(Google) [확인정보] → 서버(WebServer)
- 외부 서버에서 (페이스북,구글) 웹서버로 확인된 정보 전달
전달받은 값을 JsonConvert.DeserializeObject으로 변환.

public class GoogleTokenData
{
public string iss { get; set; } = string.Empty; // "https://accounts.google.com", (토큰 발급자)
public string azp { get; set; } = string.Empty; // "앱의 client_id",
public string aud { get; set; } = string.Empty; // "앱의 client_id",
public string sub { get; set; } = string.Empty; // "123456789012345678901", 구글 유저 고유 ID
public string email { get; set; } = string.Empty; // "user@gmail.com"
public bool email_verified { get; set; } // true, 이메일 검증 여부
public string name { get; set; } = string.Empty; // "홍길동",
public string picture { get; set; } = string.Empty; // "https://lh3.googleusercontent.com/a-/profilepic",
public string given_name { get; set; } = string.Empty; // "길동",
public string family_name { get; set; } = string.Empty; // 홍",
public long iat { get; set; } // 1692432000, (발급/만료 시간)
public long exp { get; set; } // 1692435600 (발급/만료 시간)
}
6. 서버(WebServer) → 저장소(DB)
- 해당 유저가 처음 접속한건지, 내가 관리하는 DB에서 확인하고 없으면 데이터 생성하고 관리

7. 서버(WebServer) [유저정보] → 클라이언트(APP)
- 로그인 성공 전달. 기존 유저면 기존 데이터 전달.
이후 클라이언트에서 처리.
DB ↔ WEB ↔ APP 적용 로그

✅ 결론
웹서버와 DB까지 직접 붙여보는 과정은 결코 쉽지 않았다.
클라이언트 로그인에서도 여러 이슈를 겪었고, 서버에서 토큰 검증과 DB 저장 단계에서는 예상치 못한 오류와 시행착오가 끊임없이 이어졌다.
그러나 퇴근 후 시간을 쪼개 꾸준히 도전한 끝에 마침내 전체 흐름을 완성할 수 있었다.
이 과정에서 서버에서의 토큰 검증 구현과 사용자 정보의 DB 저장·관리를 직접 다루면서 클라이언트–서버–DB로 이어지는
전체 서비스 구조를 몸소 이해하게 되었고, “이게 진짜 서비스 구조구나”라는 깨달음을 얻을 수 있었다.
단순한 로그인 연동을 넘어서, 보안 검증과 사용자 관리까지 책임지는 구조를 직접 구현해 본 경험은 개발자로서 확실히 한 단계 성장하는 계기가 되었다.