데이터베이스 pvp 관련

안녕하세요.

현재 pvp컨텐츠를 만들때 리그제로 하기위해서
데이터베이스를 이용하고 있는데,

현재 데이터베이스에 데이터 갱신 수정은어느정도 됬습니다.
그런데 여기서 문제가 리그가 끝나고일괄적으로
리그에있는 유저가 승급,강등이되고 거기에 맞춰서 그룹데이터베이스도 거기에 맞게 갱신을 해야하는데
이거를 일괄적으로 진행을 할수가 있을까요?
그리고 이렇게 할경우 요금적으로 문제가 생길수 있을까요?

그리고 추가로 인덱스 컬럽은 어떤걸 의미하는건가요 ?

안녕하세요 개발자님,
문의해 주신 내용 순차적으로 답변드립니다.

1. 리그 종료 시 일괄 승급/강등이 가능한가요?
리그 종료 시점의 일괄 처리는 클라이언트를 통해 진행하는 것은 불가합니다.
[콘솔 > 데이터베이스 > 테이블 에디터 > 쿼리 에디터]에서 대상 데이터를 직접 조회한 후 수정하는 방식으로 진행해 주셔야 합니다.
또한 데이터베이스는 정해진 시점에 쿼리를 자동 실행하는 스케줄링 기능을 제공하지 않기에, 리그가 종료될 때마다 수동으로 진행해 주셔야 하는 점 참고 부탁드립니다.


2. 요금적으로 문제가 생길 수 있나요?
데이터베이스는 기본 요금과 함께 무료 사용량이 제공되며, 이를 초과하는 사용량에 대해 요금이 발생합니다.
요금은 주로 읽기/쓰기 사용량에 따라 발생합니다.

조회·수정 조건에 사용하는 컬럼(예: 그룹 ID, 점수)에 인덱스가 설정되어 있지 않으면 테이블 전체를 탐색하게 됩니다.
이 경우 데이터가 많을수록 처리 속도가 느려지고 요금이 크게 증가할 수 있습니다.
테이블 구성 시 인덱스를 설정해 주시면 전체가 아닌 대상 데이터 위주로 처리되어 비용 부담을 줄일 수 있습니다.

또한 row 내 특정 컬럼만 수정하더라도 사용량은 row 전체 데이터를 기준으로 산정되기에, 리그 테이블에 용량이 큰 데이터(JSON 등)가 함께 저장되어 있다면 리그에 필요한 값만 담은 별도 테이블로 분리하시는 것을 권장드립니다.
사용량은 [콘솔 > 데이터베이스 설정 > 요금제와 사용량]에서 확인하실 수 있습니다.


3. 인덱스 컬럼은 어떤 의미인가요? [인덱스 설정 가이드 및 미설정 주의사항]
인덱스는 책의 색인처럼, 특정 컬럼 값으로 데이터를 전체 탐색 없이 빠르게 찾을 수 있도록 해 주는 설정입니다.
조회·수정 조건에 반드시 사용되거나 자주 사용하는 컬럼에 설정하시면 됩니다.
여러 컬럼을 함께 조건으로 사용하신다면(예: 그룹 ID + 점수) 여러 컬럼을 묶은 복합 인덱스가 효과적입니다.

  • 인덱스는 테이블이 아닌 데이터베이스 전체 기준으로 최대 10개, 인덱스 1개당 최대 4개 컬럼까지 설정할 수 있습니다.
  • 유저 테이블의 user_uuid에는 기본 인덱스가 자동으로 설정되어 제공됩니다.
  • 인덱스는 콘솔 > 데이터베이스 > 테이블 수정 또는 데이터베이스 설정에서 추가할 수 있습니다.

생성 가능한 인덱스 수가 정해져 있으니, 조건에 꼭 필요한 컬럼에 설정해 주시기 바랍니다.

1. 리그 종료 시 일괄 승급/강등이 가능한가요?
리그 종료 시점의 일괄 처리는 클라이언트를 통해 진행하는 것은 불가합니다.
[콘솔 > 데이터베이스 > 테이블 에디터 > 쿼리 에디터]에서 대상 데이터를 직접 조회한 후 수정하는 방식으로 진행해 주셔야 합니다.
또한 데이터베이스는 정해진 시점에 쿼리를 자동 실행하는 스케줄링 기능을 제공하지 않기에, 리그가 종료될 때마다 수동으로 진행해 주셔야 하는 점 참고 부탁드립니다.

이부분에서 혹시 쿼리 가이드가 될만한 예제가 있을까요 ?

추가로 테이블에서 컬럼추가를하거나 삭제를해도 적용이 되지않는데왜 그런건가요 ?

쿼리 에디터 활용 예시를 안내드립니다.
아래 내용은 이해를 돕기 위한 예시이므로, 실제 사용 중인 테이블 구조에 맞게 테이블명, 컬럼명, 조건 값을 수정하여 활용해 주시기 바랍니다.


1. 예시 테이블 구성 (league_user)

유저 테이블 타입으로 생성하였으며, 컬럼은 아래와 같이 구성하였습니다.

컬럼 타입 기본값 설명
user_uuid uuid - 유저 식별값 (유저 테이블 생성 시 자동 추가)
id int32 AUTO_INCREMENT 행 식별값 (Primary)
group_id int32 0 리그 그룹 ID (0 = 미배정)
tier int32 1 리그 등급 (예: 1=브론즈, 2=실버, 3=골드)
score int32 0 리그 점수

※ 조회·수정 조건으로 사용하는 group_id + score는 복합 인덱스로 설정하는 것을 권장드립니다.


2. 예시 초기 데이터

1번 그룹(실버 등급)에 4명의 유저가 있다고 가정합니다.


3. 승급 처리

먼저 1번 그룹에서 점수 상위 1명을 조회하여 승급 기준 점수를 확인합니다.

SELECT * FROM league_user WHERE group_id = 1 ORDER BY score DESC LIMIT 1;

조회된 유저의 점수(1800점)를 기준으로 등급을 변경합니다.

UPDATE league_user SET tier = 3 WHERE group_id = 1 AND score >= 1800;

4. 강등 처리

1번 그룹에서 점수 하위 1명을 조회하여 강등 기준 점수를 확인합니다.

SELECT * FROM league_user WHERE group_id = 1 ORDER BY score ASC LIMIT 1;

조회된 유저의 점수(300점)를 기준으로 등급을 변경합니다.

UPDATE league_user SET tier = 1 WHERE group_id = 1 AND score <= 300;

5. 처리 결과

점수 1800점 유저는 실버(2) → 골드(3)로 승급되고, 점수 300점 유저는 실버(2) → 브론즈(1)로 강등된 것을 확인할 수 있습니다.

위 과정을 그룹별로 반복하여 진행해 주시면 됩니다.
그룹 재배정이나 점수 초기화가 필요한 경우에도 동일하게 UPDATE ... SET ... WHERE 형식으로 대상 조건을 지정하여 처리하실 수 있습니다.


참고 사항

  • 기준 점수와 동일한 점수의 유저가 여러 명일 경우, 승급·강등 인원이 의도한 인원보다 많아질 수 있습니다.
  • 수정 쿼리는 즉시 반영되며 되돌릴 수 없으니, UPDATE 실행 전 동일한 조건의 SELECT로 대상을 먼저 확인해 주세요.
  • 쿼리 에디터는 JOIN, GROUP BY, 서브쿼리 등 고급 SQL은 지원하지 않습니다.

추가로 문의해주신 테이블 컬럼 추가 및 삭제와 관련해서는
‘변경사항 적용하기’ 버튼이 활성화 되지 않는 문제라면 컬럼추가 버튼 아래 상세 원인이 표시되고 있습니다.
해당 정보를 확인하여 주시고 과정에 확인이 필요한 내용이 있으신 경우 회신해 주시면 감사하겠습니다.