구글 계정으로 로그인하는 OAuth 2.0 의 로직을 정리하였다.
1. SignUp & SignIn
회원가입과 로그인은 서비스 DB에 존재여부로 분기된다.
DB에 없으면 신규회원이므로 가입 후 자동로그인
DB에 있으면 바로 로그인

2. Withdraw
회원탈퇴는 DB에서 플래그 처리 후 Google OAuth 에서 Revoke 한다.
Revoke 하는 목적은 "구글 계정 관리" 에서 "서드 파티 앱 및 서비스" 에서 완전히 제거하기 위해서 이다.
DB 에서 제거하지 않고 Google 계정에서 Revoke 만 하는 이유는 탈퇴철회 대응과 다양하 보안 사항에 대응하기 위해 유예기간 동안 보관하는 전략이다.

3. Delete(Purge)
회원탈퇴 유예기간 동안 보관하다가 서비스 관리자 혹은 Batch 처리로 정보를 완전히 삭제한다.
OAuth 은 연결이 끊어진 상태(Revoke) 이므로 처리할 필요없이 DB에 보관 중인 데이터만 삭제하면 된다.

4. Restoration / Cancel Withdraw
철회/복구를 시도하면 Google Resource Server 에서 회원 정보를 가져와 보관 중인 회원 정보와 비교하여 찾아준다.
유예기간 내 탈퇴철회인 경우
Google OAuth Server 에게 AccessToken을 받는 순간 이미 Google 입장에서 "이 사용자가 이 서비스에 로그인하는 것을 허용함" 이라고 간주한다.
그러므로, DB에서 철회 플래그를 바꾸고 Google Resource Server 에서 회원 정보와 비교하여 이전의 사용했던 데이터들과 연결하여 복원한다.
유예기간 이 지난 경우
해당 상황은 사실상 SignUp/SignIn 과정에서 진행되어야하지만, 설명을 위해 상황을 분리하였다.
Google Resource Server 에서 가져온 회원 정보로 DB에서 확인하면 없다.
유예기간이 지났다고 Client 가 알려주는 방식도 있고,
바로 신규 회원으로써 가입을 진행할 수도 있다.
아래의 예제는 Client 가 사용자에게 정보가 없다고 알려주는 상황이므로, 신규 회원가입을 진행하면된다.

'개발' 카테고리의 다른 글
| H2 설정 충돌 AUTO_SERVER vs DB_CLOSE_ON_EXIT (0) | 2026.02.19 |
|---|---|
| BaseEntity 구현 전략 (0) | 2026.02.13 |
| Geo Location In Java 3. MaxMind GeoLite2 + SpringBoot (0) | 2026.02.11 |
| Geo Location In Java 2. MaxMind GeoLite2 (0) | 2026.02.11 |
| Geo Location In Java 1. 기술 조사 (0) | 2026.02.11 |