From c531ed00a8485854bd9e97d244ee023c7883affb Mon Sep 17 00:00:00 2001 From: happybell80 Date: Wed, 24 Sep 2025 15:55:03 +0900 Subject: [PATCH] Add OAuth multi-provider JSONB structure proposal MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 현재 단일 OAuth 구조의 한계점 분석 - JSONB 기반 다중 프로바이더 지원 방안 제시 - 김종태 사용자 사례 기반 실제 문제 해결책 - 마이그레이션 전략 및 구현 고려사항 포함 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- ..._happybell80_oauth_jsonb_multi_provider.md | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 ideas/250924_happybell80_oauth_jsonb_multi_provider.md diff --git a/ideas/250924_happybell80_oauth_jsonb_multi_provider.md b/ideas/250924_happybell80_oauth_jsonb_multi_provider.md new file mode 100644 index 0000000..16665ba --- /dev/null +++ b/ideas/250924_happybell80_oauth_jsonb_multi_provider.md @@ -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. 기존 컬럼 제거 + +이 구조로 변경하면 사용자 경험 향상과 시스템 확장성을 동시에 확보할 수 있습니다. \ No newline at end of file