Soonlife DOCS

Soonlife 개발 문서

Soonlife 앱 — 구글 OAuth 인증 백엔드 API 명세 및 개발 가이드

프로젝트 소개

Soonlife는 Expo(React Native) 앱이며, 이 문서는 그중 구글 OAuth 로그인 백엔드 API를 다룹니다.

Expo 앱이 구글 로그인으로 획득한 ID 토큰을 백엔드로 전달하면, 백엔드가 구글 서버에 토큰을 검증하고 자체 JWT(access/refresh) 를 발급하는 방식입니다. 회원가입은 별도 절차 없이 최초 로그인 시 자동으로 처리됩니다.

Expo 앱 자체(프론트엔드)는 이 백엔드 저장소에서 다루지 않습니다. 이 문서는 app_api 백엔드 프로젝트 기준입니다.

기술 스택

레이어기술
백엔드Django 6.0, Django REST Framework, djangorestframework-simplejwt, google-auth, django-cors-headers, MariaDB (PyMySQL)
프론트엔드Expo (React Native), expo-router

인증 흐름

1. Expo 앱: 구글 로그인 → id_token 획득
2. Expo 앱 → 백엔드: POST /api/auth/google/ { id_token }
3. 백엔드: 구글 서버에 id_token 검증 → 사용자 조회/생성 → JWT(access, refresh) 발급
4. Expo 앱: 이후 모든 요청에 Authorization: Bearer <access> 헤더 포함
5. access 만료 시: POST /api/auth/token/refresh/ 로 재발급
6. 로그아웃 시: POST /api/auth/logout/ { refresh }

계정 식별은 이메일이 아니라 구글 ID 토큰의 sub 클레임(구글 계정 고유 식별자)을 기준으로 합니다.

빠른 시작

구현된 기능

카테고리기능
인증구글 ID 토큰 검증 / 로그인·회원가입 자동 처리 / JWT 발급·재발급 / 로그아웃(블랙리스트)

보안 설계

항목구현 방식
사용자 식별이메일이 아닌 구글 sub(고유 ID) 기준
이메일 검증구글 ID 토큰의 email_verified 클레임 확인, 미인증 시 로그인 거부
토큰 발급 대상 검증aud 클레임이 GOOGLE_OAUTH_CLIENT_IDS 허용 목록에 있는지 확인
발급자 검증iss 클레임이 구글(accounts.google.com)인지 확인
비밀번호저장하지 않음 (set_unusable_password()) — 구글 로그인 전용
토큰 방식JWT (access 30분 / refresh 14일, rotate + blacklist)
Django admin비활성화 (django.contrib.admin 미설치)

구글 서버에서 가져오는 정보

별도 API 호출 없이, 검증된 ID 토큰(JWT)의 클레임을 그대로 사용합니다.

클레임용도
sub구글 계정 고유 식별자 → 사용자 조회/생성 키
email이메일
email_verified이메일 인증 여부 검증용 (저장하지 않음)
name이름
aud / iss토큰 발급 대상/발급자 검증용 (저장하지 않음)

On this page