뒤끝 데이터베이스 문의 2

안녕하세요.

현재 뒤끝 데이터베이스를 이용하여 신규 컨텐츠(제한시간이 있는 던전)를 개발 및 테스트 중입니다.

동시성 이슈를 확인하기 위해
동일 계정(또는 동일 조건)으로 PC 2대를 사용하여 거의 동시에 던전을 플레이하는 테스트를 진행하였습니다.

그 결과,
특정 상황에서 데이터베이스에 저장되어야 할 일부 값이 정상적으로 반영되지 않고 누락되는 현상이 발생한 것으로 보입니다.

다만,
두 플레이 사이에 시간차를 두고 진행할 경우에는 해당 문제가 발생하지 않습니다.

테스트 환경

  • PC 2대에서 동시 접속
  • 제한시간이 있는 던전 클리어 후 결과 데이터 저장 로직 실행
  • 거의 동시에 결과 저장 요청 발생 시 누락 발생
  • 시간차를 두면 정상 저장

문의 사항

  1. 동일 계정에서 거의 동시에 Update/Save 요청이 들어올 경우
    뒤끝 DB에서 충돌 처리 방식이 어떻게 되는지 궁금합니다.
  2. 동시 요청 시 일부 필드가 반영되지 않는 경우가 발생할 수 있는지 확인 부탁드립니다.
  3. 해당 상황을 방지하기 위한 권장 처리 방식(트랜잭션, 동시성 제어 방법 등)이 있는지 안내 부탁드립니다.

안녕하세요 개발자님,
문의하신 내용 관련하여 상세 확인 후 안내드리겠습니다.
보다 정확한 확인을 위해 동시에 요청이 이루어지는 컬럼에 대한 정보 요청드립니다. (숫자형 컬럼 여부 및 업데이트 조건 등)

AddWorldBossProgressToDatabase(totalScore) =>

_backEndDatabaseService.AddWorldBossDamageAndParticipant =>

image

사용한 스크립트 기능들과 데이터 베이스 모델 클래스 첨부해드립니다.

숫자 컬럼의 경우 연산을 통해 처리되어 동시성에 관계없이 처리가 이루어지지만,
Participants 컬럼의 경우 string 타입으로 확인됩니다.
숫자형 컬럼 외의 데이터는 모두 마지막 요청기준 덮어씌우는 형태로 처리가 이루어지기에 동시성에 대한 처리가 보장되지 않습니다.

정확한 컨턴츠 기획을 알지 못하기에 원하시는 방향으로 정확한 안내를 드리기 어려움이 있으나
만약 유저의 참여 정보를 누적하여 저장하시고자 하는 것이라면,
별도의 테이블에 inDate 컬럼(인덱스처리)을 구성하여 insert 하도록 구성하시는 것을 추천드립니다.

월드 보스에 제한 시간내에 누적 데미지를 넣어 TotalDamage에 더하는 시스템으로 구현하고 있습니다. 그 과정 중에서 동시성 테스트를 하던 도중 숫자 컬럼인 TotalDamage에 누락된 값을 확인하여 문의 드린 것이고 추가적으로 현재 Mr.Hero_Test의 데이터베이스는 FREE 요금제를 사용하고 있고 Read Bandwidth가 Write Bandwidth보다 비교적으로 크게 나오고 있어서 그 이유가 무엇인지 궁금합니다. 현재 해당 프로젝트에서 300mb을 넘어가는 사용량을 확인하여 질문드립니다.

좋아요 1

추가로 아직 뒤끝 데이터베이스 컬럼을 사용하지 않는 프로젝트들에게도 Read Bandwidth 사용량이 발견되었는데 어떤 부분에 사용되었는지도 궁금합니다!

Update() 로 값을 직접 덮어쓰는 방식은 보통 조회 → 값 계산 → 저장 흐름이 필요합니다.
반면 Inc() /Dec() 는 서버에서 증감 연산을 바로 적용 합니다.

개발자 문서 내 Inc/Dec 사용 예제를 확인하여 주시면 감사하겠습니다.

추가로 문의주신 내용 확인 결과, 이전 콘솔 페이지 내 오류 문의와 연관되어 일시적으로 사용량이 실제와 다르게 집계된 이력이 확인되었습니다.
해당 과정에서 무료 사용량을 초과한 것으로 표시되는 상황이 발생하였으며, 답변 안내 당시 사용량 초기화와 함께 오집계와 관련한 픽스 조치가 완료된 상태입니다.

다만 무료 사용량은 초기화되었으나, 누적 사용량 정보는 내부 기준에 따라 유지되기 때문에 콘솔 화면에는 기존 수치가 반영되어 표시되고 있습니다.
누적 사용량 정보까지 초기화하려면 데이터베이스 서버 전체 재시작이 필요하여, 서비스 안정성을 고려해 별도 조치는 진행하지 않은 점 양해 부탁드립니다. (3월 1일이 되어 월 사용량이 초기화된 시점부터는 설정 메뉴 내에서 온전한 사용량 정보로 확인하실 수 있습니다.)

보다 정확한 일자별 사용량은
[콘솔 → 프로필 → 결제 관리 → 현재 요금 → 데이터베이스] 항목에서
일자별로 하여 픽스 이후인 13일 이후 데이터를 기준으로 확인해주시면 감사하겠습니다.
이용에 혼선을 드린 점 사과드립니다.

(스크린샷은 정보 보호를 위해 삭제하였습니다.)