본문으로 건너뛰기

로그인 / 회원가입 정책

1. 목적

사용자의 원활한 앱 사용을 위해 간편한 소셜 로그인 방식을 제공합니다. 가입과 로그인은 동일 화면 내에서 진행되며, 최초 가입 시 최소한의 정보만 수집해서 높은 전환율을 확보합니다.


2. 로그인 방식

방식지원 여부비고
Google지원전 국가 공통 기본 옵션
Apple지원iOS에서만 노출 (GetPlatform.isIOS 체크)
카카오톡지원한국에서 우선 노출
LINE지원일본/태국/대만에서 우선 노출 (LineRegion: ja, th, zh-TW)
  • 사용자의 국가 및 디바이스 설정 기준으로 적절한 소셜 로그인 버튼만 노출됩니다.
  • 모든 소셜 로그인은 최초 1회 로그인 시 계정 연동을 위해 가능한 경우 이메일 및 이름(닉네임)을 수집합니다.

3. 지역별 소셜 로그인 버튼 순서

국가 / 지역버튼 순서
한국 (ko)카카오 → Apple → Google → LINE
일본/태국/대만 (ja, th, zh-TW)LINE → Apple → Google → 카카오
그 외 지역Apple → Google → LINE → 카카오
  • Apple 로그인 버튼은 iOS 기기에서만 표시되며, Android에서는 자동으로 목록에서 제외됩니다.

4. 14세 연령인증 (Age Gate)

  • 신규 사용자가 소셜 로그인 버튼 클릭 시, 로그인 이전에 연령인증 화면으로 이동합니다.
  • 사용자는 4자리 출생연도를 커스텀 숫자 키패드로 입력합니다.
  • 현재연도 - 출생연도 >= 14 인 경우 인증 통과, 약관 동의 후 로그인이 진행됩니다.
  • 14세 미만인 경우 인증 실패 처리되며, 에러 토스트(info_unavailable)가 표시됩니다.
  • 기존 사용자(마지막 로그인 기록이 있는 경우)는 연령인증을 건너뜁니다.
  • 입력된 출생연도는 birth_year 필드로 서버에 저장됩니다.

5. 게스트 모드

  • 로그인 화면 하단에 "둘러보기" 버튼이 제공됩니다.
  • 게스트 모드로 진입하면 로그인 없이 지역 선택 화면(SelectMap)으로 이동합니다.
  • 게스트 상태에서는 콘텐츠 탐색은 가능하지만, 구독/북마크/스티커 획득/녹음 등 계정 기반 기능은 사용할 수 없습니다.
  • 기능 사용 시도 시 로그인 유도 팝업이 표시됩니다.

6. 로그인/회원가입 플로우

  1. 온보딩 이후 또는 '시작하기' 클릭 시 로그인 화면 진입
  2. 로그인 화면에서 아래 옵션 제공:
    • 소셜 계정 버튼 클릭 → (신규 시) 연령인증 → 약관 동의 → 계정 연동 및 자동 가입 처리
    • 게스트 모드 버튼 → 로그인 없이 탐색
  3. 최초 가입 시 약관 동의 절차 진행
    • 필수 약관: 이용약관, 개인정보 수집 및 처리, 제3자 정보제공 및 14세이상 동의
    • 선택 약관: 마케팅 수신 동의

7. 인증 및 보안

JWT 토큰 정책

항목
Access Token 유효기간1일 (JWT_ACCESS_TOKEN_LIFETIME=1)
Refresh Token 유효기간7일 (JWT_REFRESH_TOKEN_LIFETIME=7)
알고리즘HS256

Rate Limiting

엔드포인트제한
로그인 (login)15회/분
회원가입 (register)9회/시간
일반 인증 사용자 (user)3000회/시간
비인증 사용자 (anon)300회/시간

소셜 로그인 보안

  • 플랫폼 인증을 통해 계정 식별
  • 중복 가입 방지를 위해 동일 social_provider + social_id 기반 유니크 제약 (unique_social_account)
  • 동일 이메일 기반 계정 병합 처리

Placeholder Email

  • 소셜 로그인 시 이메일을 제공하지 않는 경우, {provider}_{social_id}@noemail.penta 형식의 placeholder 이메일이 자동 생성됩니다.

8. 다중 기기 로그인 및 세션 관리

  • 1계정당 최대 2기기까지 동시 사용 가능 (MAX_ACTIVE_DEVICES=2)
  • 다른 기기에서 로그인 시, 기존 기기의 is_activeFalse로 변경됩니다.
  • 비활성화된 기기에서 API 요청 시 logged_in_elsewhere 에러가 반환되어 자동 로그아웃 처리됩니다.
  • 기기 초과 시 기기 관리 팝업에서 기존 기기를 선택하여 로그아웃 후 진행할 수 있습니다.

9. 로그인 이력 추적

  • LoginHistory 모델을 통해 모든 로그인 이벤트가 기록됩니다.
  • 기록 항목: 사용자 ID, 로그인 유형(google, apple, kakao, line, facebook), IP 주소, User-Agent, 연결 기기, 생성 일시
  • 토큰 갱신(token_refresh)도 세션 활동으로 기록되며, 1시간 이내 중복 기록은 방지됩니다.

10. 로그인 화면 UI 정책

신규 사용자

  • 환영 메시지 표시: "반가워요! / 신규 회원 누구나 / 3일 무제한" (welcome_3days_free)
  • 선물 상자 일러스트 노출
  • 3일 무료 체험 혜택 강조

기존 사용자 (재방문)

  • 펜타 로고 + 태그라인 표시
  • 마지막 로그인 방식에 "최근 로그인" 툴팁 표시 (한국어/일본어에서만 활성화)

11. 기타 정책

  • 로그인 유지: 사용자는 앱 삭제, 다른 디바이스 접속, 수동 로그아웃 전까지 자동 로그인 상태 유지
  • 최근 로그인 방식 기억: SharedPreferenceslast_login_method 저장
  • 동일 소셜 계정으로 중복 가입 방지
  • 탈퇴 후 7일간 재가입 불가 (ACCOUNT_REJOIN_BLOCK_DAYS=7), DioException 403 응답 시 재가입 제한 안내 표시
  • 30일간 데이터 보관 후 완전 삭제