Web

sequenceDiagram
    participant Browser
    participant Client as Client (헤어샵 서버)
    participant AuthorizationServer as Authorization Server
    participant DB

    Browser->>Client: 로그인 요청 (/oauth2/authorization/{provider})
    Client->>AuthorizationServer: OAuth2 인증 요청
    AuthorizationServer->>Browser: 로그인 페이지 표시
    Browser->>AuthorizationServer: SNS 로그인 진행
    AuthorizationServer->>Client: 로그인 성공 (OAuth2 인증 정보 제공)
    
    Client->>DB: 사용자 존재 여부 확인 (SNS ID, 이메일, Provider ...)
    alt 이미 가입한 회원
        Client->>Client: JWT 생성, OAuth2 세션 제거
        Client->>Browser: JWT 포함하여 /홈 페이지로 이동
    else 가입하지 않은 회원
        Client->>Browser: /회원가입 페이지로 이동
        Browser->>Client: 추가 정보 입력 후 POST /회원가입 호출
        Client->>Client: OAuth2 세션에서 SNS ID, Provider 추출
        Client->>DB: 회원 정보 저장
        Client->>Client: JWT 생성, OAuth2 세션 제거
        Client->>Browser: JWT 포함하여 /홈 페이지로 이동
    end
    

App

sequenceDiagram
    participant App as App (iOS/Android)
    participant Client as Client (헤어샵 서버)
    participant OAuth2Provider as Authorization Server
    participant DB

    App->>OAuth2Provider: SDK를 통한 OAuth2 로그인 요청
    OAuth2Provider->>App: Access Token or ID Token 반환

    App->>Client: OAuth2 토큰을 가지고 GET /회원가입-여부 호출
    Client->>OAuth2Provider: 토큰 검증 요청
    OAuth2Provider->>Client: 사용자 정보 반환 (SNS ID, 이메일)

    Client->>DB: 사용자 존재 여부 확인 (SNS ID, 이메일, Provider ...)
    alt 이미 가입한 회원
        Client->>Client: JWT 생성
        Client->>App: JWT 반환 (쿠키 또는 Authorization 헤더)
    else 가입하지 않은 회원
        Client->>App: 회원 가입 필요 응답
        App->>Client: 추가 정보 입력 후 POST /회원가입 호출
        Client->>DB: 회원 정보 저장
        Client->>Client: JWT 생성
        Client->>App: JWT 반환
    end

iOS App 애플 로그인

1. OpenID Configuration 정보

2. 애플 로그인 프로세스

1. 클라이언트 → 서버 요청

2. 애플 Public Key 요청 및 검증

3. client_secret 생성

4. 애플 서버에 Token 요청