라이브 서비스 중 새로운 게임정보 테이블을 추가하는 상황

고객님의 문의에 답변하는 직원은 고객 여러분의 가족 중 한 사람일 수 있습니다.
고객의 언어폭력(비하, 조롱, 욕설, 협박, 성희롱 등)으로부터 직원을 보호하기 위해
관련 법에 따라 수사기관에 필요한 조치를 요구할 수 있으며, 형법에 의해 처벌 대상이 될 수 있습니다.

커뮤니티 이용 정책에 위배되는 게시물을 작성할 경우, 별도 안내 없이 게시물 삭제 또는 커뮤니티 이용이 제한될 수 있습니다.

문의 응대 : 평일 오전 10시 ~ 오후 6시
문의를 남기실 경우 다음 항목을 작성해 주세요.
정보가 부족하거나 응대시간 외 문의하는 경우 확인 및 답변이 지연될 수 있습니다.

  • 뒤끝 SDK 버전 :
  • 프로젝트명 :
  • 스테이터스 코드 :
  • 에러 코드 :
  • 에러 메시지 :

제가 프로젝트에서 사용하고 있는 방식의 로직은
신규 유저인 경우 대표로 UserSystemData라는 테이블을 로드 시도하여 count가 0일 경우
테이블들을 아직 insert 하지 않은 신규 유저로 간주합니다.
그리고 그 신규유저는 테이블이 요구 되는 모든 게임 컨텐츠를 한번 insert하는데 있어서
트랜잭션을 사용하여 저장하게 됩니다. 여기서 신규 유저의 UserSystemData에서 이 유저가
한번 컨텐츠를 전부 insert했는가에 대한 bool값 변수(IsWriteData)를 true로 하여 신규유저와 기존유저를 구분합니다.
그래서 기존유저의 경우 처음 게임을 로드할때 똑같이 UserSystemData를 처음에 한번 가져오고 Count가 0이 아닌경우에 나머지 필요한 테이블들을 트랜잭션으로 전부 로드하는 과정을 거칩니다.
그런데 여기서 고민인 점은
추후에 추가 되는 새로운 게임컨텐츠가 생기는 경우 이에 필요한 저장테이블이 생길수도 있는데
새로 추가되는 테이블(1개 또는 여러개)을 어떤식으로 같이 insert하여 기존 테이블들과 함께 트랜잭션으로 로드할수
있을지 모르겠습니다.
개별적으로 불러오는 경우에는 Count가 0인지 아닌지에 따라 insert를 했는지 여부를 판단할수 있었으나
트랜잭션으로 로드시에는 이를 확인이 불가능하더라구요. 조언이 필요합니다.

안녕하세요 개발자님,
UserSystemData 테이블에 기존의 IsWriteData 외에 DataVersion 과 같은 컬럼을 추가하여 단계를 구분하는 것을 권장드립니다.
처리 방식은 다음과 같습니다.

  1. UserSystemData의 count가 0이거나, IsWriteData가 false이면서 DataVersion 값이 없는 경우에는 신규 유저러 판단
    이 경우 기존처럼 모든 테이블 데이터를 insert하고, insert가 완료된 후 UserSystemData의 IsWriteData를 true로 설정하며, DataVersion 값을 1로 업데이트합니다.
  2. IsWriteData가 true이면서 DataVersion 값이 없는 경우에는 기존 유저로 판단
    이 경우 새로 추가된 테이블 데이터만 insert하도록 구성하고, 작업이 완료된 후 DataVersion 값을 1로 업데이트합니다.

이후 테이블이 추가되면서 게임 컨텐츠가 확장되는 상황에서는,
신규 유저의 경우 기존 방식대로 모든 테이블 데이터를 insert하고 DataVersion 값을 최신 버전으로 설정합니다.
기존 유저는 현재 보유한 DataVersion 값을 기준으로, 필요한 추가 데이터만 insert한 뒤 해당 유저의 DataVersion을 최신 버전으로 업데이트하면 됩니다.

좋아요 1