Add OAuth multi-provider JSONB structure proposal
- 현재 단일 OAuth 구조의 한계점 분석 - JSONB 기반 다중 프로바이더 지원 방안 제시 - 김종태 사용자 사례 기반 실제 문제 해결책 - 마이그레이션 전략 및 구현 고려사항 포함 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
811f9a9edb
commit
c531ed00a8
83
ideas/250924_happybell80_oauth_jsonb_multi_provider.md
Normal file
83
ideas/250924_happybell80_oauth_jsonb_multi_provider.md
Normal file
@ -0,0 +1,83 @@
|
||||
# OAuth 다중 프로바이더 지원을 위한 JSONB 구조 개선안
|
||||
|
||||
## 작성일: 2025-09-24
|
||||
## 작성자: happybell80
|
||||
|
||||
---
|
||||
|
||||
## 현재 문제점
|
||||
|
||||
### 1. 단일 OAuth 구조의 한계
|
||||
- `oauth_id` VARCHAR: 하나의 프로바이더만 지원
|
||||
- `oauth_provider` VARCHAR: 단일 값만 저장 가능
|
||||
- 사용자가 여러 플랫폼(Slack + Google + 네이버웍스) 동시 사용 불가
|
||||
|
||||
### 2. 실제 발생한 문제 사례
|
||||
- 김종태: Google(100176844464607664427) + Slack(U0925SXQFDK) 분리된 계정
|
||||
- JWT에는 Slack ID 포함되지만 DB에서 변환 실패
|
||||
- 테스트 시 실제 사용자 ID 찾기 어려움
|
||||
|
||||
## 해결책: JSONB 다중 프로바이더 구조
|
||||
|
||||
### 제안 스키마
|
||||
```sql
|
||||
ALTER TABLE "user"
|
||||
DROP COLUMN oauth_id,
|
||||
DROP COLUMN oauth_provider,
|
||||
ADD COLUMN oauth_providers JSONB DEFAULT '{}';
|
||||
```
|
||||
|
||||
### 데이터 구조 예시
|
||||
```json
|
||||
{
|
||||
"slack": "U0925SXQFDK",
|
||||
"google": "100176844464607664427",
|
||||
"works": "네이버웍스_사용자ID"
|
||||
}
|
||||
```
|
||||
|
||||
## 장점
|
||||
|
||||
### 1. 확장성
|
||||
- 새 OAuth 프로바이더 추가 용이
|
||||
- 기존 데이터 마이그레이션 가능
|
||||
- 향후 Microsoft, Apple 등 추가 지원
|
||||
|
||||
### 2. 사용자 편의성
|
||||
- 하나의 계정으로 다중 플랫폼 접근
|
||||
- 플랫폼별 기능 제한 없음
|
||||
- 통합된 사용자 경험
|
||||
|
||||
### 3. 시스템 안정성
|
||||
- UUID 중심 아키텍처 유지
|
||||
- 프로바이더 장애 시 다른 방법으로 접근 가능
|
||||
|
||||
## 구현 고려사항
|
||||
|
||||
### 1. 마이그레이션 스크립트
|
||||
```sql
|
||||
UPDATE "user" SET oauth_providers =
|
||||
json_build_object(oauth_provider, oauth_id)::jsonb
|
||||
WHERE oauth_id IS NOT NULL;
|
||||
```
|
||||
|
||||
### 2. 코드 수정 영역
|
||||
- `slack_user_to_uuid()`: JSONB 쿼리로 변경
|
||||
- JWT 생성: 다중 프로바이더 정보 포함
|
||||
- 인증 로직: 프로바이더별 처리
|
||||
|
||||
### 3. 인덱스 최적화
|
||||
```sql
|
||||
CREATE INDEX idx_user_oauth_slack ON "user"
|
||||
USING GIN ((oauth_providers->'slack'));
|
||||
```
|
||||
|
||||
## 마이그레이션 전략
|
||||
1. 기존 데이터 백업
|
||||
2. JSONB 컬럼 추가
|
||||
3. 데이터 변환 스크립트 실행
|
||||
4. 애플리케이션 코드 수정
|
||||
5. 테스트 및 검증
|
||||
6. 기존 컬럼 제거
|
||||
|
||||
이 구조로 변경하면 사용자 경험 향상과 시스템 확장성을 동시에 확보할 수 있습니다.
|
||||
Loading…
x
Reference in New Issue
Block a user