<aside> 📌

목차

인증 · 사용자 관리 🔐

개요

BScene 서버는 하이브리드 인증 방식을 채택하고 있으며, PermitAllUri에 나열된 엔드포인트를 제외한 모든 요청은 stateless이며 JWT로 보호됩니다.

듀얼 모드 사용자 아키텍처

단일 사용자가 두 가지 운영 모드를 전환할 수 있습니다. 핵심 User 엔티티는 공유 아이덴티티 데이터(name, phone, birthdate)를 포함하며, currentMode 필드가 현재 활성화된 프로필 모드를 결정합니다.

모드 목적 프로필 타입
FAN 밴드 팔로우 및 공연 관람입니다. 팔로우한 밴드, 관심 공연, 참여 이력을 추적합니다. FanProfile
BAND 밴드 관리 및 멤버 운영입니다. 밴드 통계, 팔로워 수, 지원자 데이터, 공연 분석을 표시합니다. BandMemberProfile

사용자는 여러 개의 밴드 프로필을 보유할 수 있지만 동시에 활성화되는 프로필은 하나뿐입니다.

인증 도메인은 BandPort(밴드 멤버십 검증), SessionPort(모집 결정 워크플로우), PerformancePort(공연 이력 집계)를 통해 다른 시스템과 인터페이스합니다.

OAuth · JWT 인증 흐름

JWT 토큰 종류

토큰 타입 설명
Access Token 단기 토큰으로 유효기간은 약 1시간입니다.
Refresh Token 장기 토큰으로 Redis에 해시된 형태로 저장됩니다.
Signup Token OAuth 브리지용 임시 토큰으로 유효기간은 5~10분입니다.

OAuth2 흐름 아키텍처

sequenceDiagram
    participant Client
    participant Provider as "Kakao / Google"
    participant OAuth as "CustomOAuthService"
    participant Handler as "OAuthSuccessHandler"
    participant Redis
    Client->>Provider: "소셜 로그인 요청"
    Provider-->>OAuth: "사용자 속성 전달"
    OAuth->>OAuth: "신규 / 기존 사용자 판별"
    OAuth->>Handler: "인증 성공"
    Handler->>Redis: "UUID 교환 코드 저장"
    Handler-->>Client: "교환 코드 리다이렉트"
    Client->>Handler: "교환 코드로 토큰 요청"
    Handler-->>Client: "access / refresh 또는 signup token"

JWT 보안 구현

JwtAuthFilter는 모든 요청을 가로채어 Authorization: Bearer <token> 헤더 또는 access token 쿠키를 검증합니다. 이 필터는 요청 단위 검증을 위해 OncePerRequestFilter를 확장합니다.

전화번호 인증 시스템

전화번호 인증은 CoolSMS(Nurigo SDK)를 사용합니다.

온보딩 워크플로우

사용자는 FAN 모드(nickname, genres, regions 필수 입력) 또는 BAND 모드(프로필 완성을 나중으로 미룰 수 있음) 중 하나를 선택합니다. 시스템은 저장소 조회를 통해 nickname 중복 여부를 검증하며, 전용 저장소를 통해 사용 가능한 모드를 관리합니다.

사용자 프로필 · 모드 · 마이페이지

핵심 사용자 엔티티 및 프로필 아키텍처

BScene은 다형적 프로필 시스템을 구현합니다. 모든 User는 단 하나의 FanProfile을 가지지만, 여러 밴드에 소속되어 있다면 여러 개의 BandMemberProfile 항목을 가질 수 있습니다.

사용자 모드 및 전환 로직

User 엔티티의 currentMode 필드가 어떤 마이페이지 화면이 렌더링되는지, 어떤 권한이 활성화되는지를 결정합니다.

마이페이지 및 개인 피드

UserController는 currentMode에 따라 로직이 분기되는 통합 엔드포인트 /users/me를 제공합니다(41~64번째 줄).

밴드 마이페이지는 현재 active 상태인 BandMemberProfile의 데이터를 조회하여 팔로워 수, 활성 세션 지원자 수, 해당 밴드의 공연 이력 등의 지표를 반환합니다(114~128번째 줄).

세션 모집 워크플로우(사용자 관점)

구현 세부사항: 포트 및 어댑터

포트 목적 구현체
BandPort 밴드 멤버십 및 프로필 활성화를 관리합니다. com.umc.bscene.domain.band.adapter.UserAdapter
FollowPort 팔로우 수 및 장르별 팔로우 통계를 조회합니다. com.umc.bscene.domain.follow.adapter.UserAdapter
PerformancePort 관심 및 참여 이력을 조회합니다. com.umc.bscene.domain.performance.adapter.UserAdapter
SessionPort 세션 지원 상태 및 건수를 관리합니다. com.umc.bscene.domain.session.adapter.UserAdapter