안녕하세요, 개발자님
두 가지 기능 모두 뒤끝에서 별도로 제공하는 전용 기능은 없지만, 리더보드 및 데이터베이스 등 기존 기능들을 조합하여 구현하실 수 있을 것으로 보입니다.
다만 저희는 개별 기능을 제공해드리는 역할을 하고 있어, 기획에 맞는 세부 구성은 고객님께서 직접 설계하셔야 하는 점 참고 부탁드립니다.
각 케이스별로 활용 가능한 방향을 간략히 안내드리겠습니다.
질문 1. 티어 PVP 시스템 (주간 그룹 리그)
아래 예시는 100명의 그룹이라는 제한을 고려하지 않고 가이드를 드린 내용입니다.
그룹 기능의 경우 최대 500개 그룹을 한정적으로 생성할 수 있고, 그룹이 다른 유저들과는 분리되는 형태이기에 그룹기능을 사용할 수는 없습니다.
또한 자체적으로 나누어 구분한다 할지라도 리더보드의 생성 제한으로 인해 제약이 따르기에
이를 고려하여 기획 및 구성하셔야 하며, 아래 가이드는 그룹 제한 없이 티어 단위로 운영하는 방향을 기준으로 안내드립니다.
- 티어별 리더보드 및 랜덤 조회 구성
- 리더보드에 사용되는 테이블에 티어를 구분하는 별도 컬럼 추가
→ 최초 삽입 시 최하 티어 혹은 기획에 맞는 티어로 생성
- 일주일간 PVP 결과에 따른 정산 처리
- 정산 이후 리더보드 순위 조회
→ 순위 보상을 수령해야만 순위 확인이 가능한 구조이므로, 최하위 유저에게도 순위 보상이 구성되어야 합니다. 또는 순위권 밖 유저의 티어를 강등 처리하는 방식도 고려해 보세요.
4-1. 현재 주차 순위가 없는 경우, 이전 주차 순위 조회
4-2. 자신의 순위가 1~30위이면 티어 승급, 71~100위이면 티어 강등 처리
- 자신의 티어 정보를 기반으로 해당 티어 리더보드에만 점수가 갱신되도록 처리
질문 2. 길드 랜덤 매치 (일일 비동기 길드전)
-
데이터베이스 자유 테이블 기능을 통해 아래 컬럼으로 테이블 구성
- guild_indate + battle_date : PK컬럼으로 구성 (날짜별 신규 row 생성을 위해 2026-04-27T05:39:53.136Z_20260429 와 같은 형태로)
- opponent_guild_indate : 상대 길드 식별자 → 반드시 인덱스 컬럼으로 지정
- battle_date : 길드전 날짜 → 반드시 인덱스 컬럼으로 지정
- score : 길드전 누적 스코어 컬럼
- reward : 보상 수령 대상 여부 정보 컬럼
- reward_list : 보상 수령 유저 정보 저장 컬럼
-
각 길드의 정산 시점 이후 최초 접속자가 아래 흐름으로 처리
→ 오늘 날짜의 내 길드 데이터가 없는 경우 랜덤 조회 기능 등을 통해 무작위로 매칭할 상대 길드 리스트를 확인하고, 해당 길드 indate와 현재 날짜를 조합하여 데이터 존재 여부를 조회
→ 상대 길드의 오늘 날짜 데이터도 없는 경우, 상대 길드 row 생성 및 내 길드 row 생성 시도
(동시 요청 등으로 생성 에러 발생 시, 생성된 데이터에 opponent_guild_indate 로 내 길드 정보가 있다면 이후 과정을 진행, 내 길드가 아닌 타 길드 정보라면 다른 길드 정보로 다시 진행)
-
저장된 상대 길드 정보를 바탕으로 상대 길드원과 1:1 매칭 구성
-
보상 관련 조회 시 (과거 날짜 데이터는 이력 조회 및 보상 정보 확인용으로 유지)
→ 전날 데이터의 보상 컬럼이 미처리 상태인 경우, 스코어를 비교하여 내 길드 보상 컬럼 업데이트 (승리 결과라면 true, 패배 결과라면 false, 상대 길드의 정산은 상대 측 최초 접속자가 동일하게 처리하도록 분리)
→ 이후 보상 수령 유저 정보 컬럼에 내 inDate가 없다면 보상 수령 ui를 구성, 수령시 inDate를 추가하여 저장
위에 안내드린 내용은 구현 방향에 대한 대략적인 가이드이며, 실제 구현 시에는 보완하거나 세부적으로 고려해야 할 사항들이 많습니다. 특히 길드전의 경우 정산 및 매칭 로직이 복잡하고 동시 처리 등 다양한 충돌 케이스가 발생할 수 있어 충분한 사전 설계가 필요합니다.
안내를 참고하시되, 실제 구성 시 발생할 수 있는 예외 케이스나 데이터 무결성 이슈 등은 고객님께서 직접 검토하시고 대응하실 필요가 있는점 꼭 확인 바랍니다.