<aside> 📌
BScene 서버는 하이브리드 인증 방식을 채택하고 있으며, PermitAllUri에 나열된 엔드포인트를 제외한 모든 요청은 stateless이며 JWT로 보호됩니다.
단일 사용자가 두 가지 운영 모드를 전환할 수 있습니다. 핵심 User 엔티티는 공유 아이덴티티 데이터(name, phone, birthdate)를 포함하며, currentMode 필드가 현재 활성화된 프로필 모드를 결정합니다.
| 모드 | 목적 | 프로필 타입 |
|---|---|---|
| FAN | 밴드 팔로우 및 공연 관람입니다. 팔로우한 밴드, 관심 공연, 참여 이력을 추적합니다. | FanProfile |
| BAND | 밴드 관리 및 멤버 운영입니다. 밴드 통계, 팔로워 수, 지원자 데이터, 공연 분석을 표시합니다. | BandMemberProfile |
사용자는 여러 개의 밴드 프로필을 보유할 수 있지만 동시에 활성화되는 프로필은 하나뿐입니다.
인증 도메인은 BandPort(밴드 멤버십 검증), SessionPort(모집 결정 워크플로우), PerformancePort(공연 이력 집계)를 통해 다른 시스템과 인터페이스합니다.
| 토큰 타입 | 설명 |
|---|---|
| Access Token | 단기 토큰으로 유효기간은 약 1시간입니다. |
| Refresh Token | 장기 토큰으로 Redis에 해시된 형태로 저장됩니다. |
| Signup Token | OAuth 브리지용 임시 토큰으로 유효기간은 5~10분입니다. |
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"
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 |