Q. 실시간 텍스트 기반 웹게임 DB 커밋

벙새1 2019. 04. 16.


안녕하세요, 평소에 텍스트 기반 웹게임(Ogame 등)을 즐겨하는 유저로서 궁금한게 생겼습니다. 이러한 실시간 웹게임들의 특징은 플레이어의 자원이 로그아웃 상태에서도 시간에 따라 증가하게 되어있는데요, 두 가지 방법이 생각납니다:

  1. DB를 매초마다 업데이트

  2. Interaction (로그인, 다른 플레이어가 탐색, 전투 발생) 발생 시에 준비된 공식으로 그 전 interaction 부터 흐른 시간을 대입해 계산되어 업데이트 될까요?(예: 1초마다 자원 A가 10씩 증가한다면, 10초 후에 플레이어가 refresh를 했을 때 100이 증가한 상태가 업데이트)

직접 개발을 할 때 전자는 스케일이 커지면 서버 처리량이 너무 커질 것 같아 후자를 택하게 되었는데 변수가 증가함에 따라 공식이 복잡해져서 [예: A, B 자원이 있고, B가 0이 될 때 A가 감소하는 구조 - interaction간의 시간이 t이고 이 기간동안 B가 0이 되었다면 A의 감소량은 감소율 x (t-t(b=0)) 가 됨. 여기선 쉽지만, linear함수가 아니고 변수가 증가할수록 프로그래밍하기 까다로워짐] 어려움을 겪고 있습니다.

1번 방법이 가능한가요, 아니면 2번식으로 하면서 복잡도가 많이 증가하는게 맞을까요?

공유하고 보상받기 ♥︎
댓글 0

2개의 답변이 있습니다.

질문자 & 큐레이터 채택
JS2 답변자인증
IT 2019. 04. 16 76%의 채택

2번으로 작업합니다. 1초마다 모든 유저의 자원 업데이트를 DB에서 처리하면 과부하 걸려서 서버 죽습니다.

또한 2번의 경우 무중지로 DB가 전환되거나 하면 모를까 그런 시스템이 기반되어있지 않은경우에는 그럼 서버점검등이 일어나면

해당하는 시간동안 자연스럽게 쌓였어야할 자원등이 누락되는 사태등이 생깁니다.

유저 입장에서는 서버점검이라 게임도 못했는데 그동안 자동으로 쌓였어야할 자원까지 획득못하는 경우가 생기게 되는것이죠.

코딩이 복잡하고 어려운것과, 시스템의 과부하 정도 중에 골라야하면 반드시 전자를 고르셔야합니다.

지금은 별 차이없는 경우라도 이렇게 하는 버릇이 누적되어 대용량 서비스를 구현, 운영하실수있는 밑거름이 됩니다.

댓글 1
벙새1 2019.04.16 13:31

친절한 답변 감사합니다!

김성주보험설계사 답변자인증
한국보험금융(주) 파파라이프 지사 2019. 04. 16 24%의 채택

음..이건 사용자별 디비접속 내용이 어느정도이냐에 따라서 답변이 틀려지는데요

예를 들어 한명의 유저가 말씀하신데로

접속을 하여 어떤 행위를 했을때

자료 변경해야 하는 영역이 어디까지이냐에

따라서 틀려집니다

예를 들어 어떤 유저가 접속을 하든

어떤 행위를 했을때 전체크기가 가로세로 1000*1000 환경일때 이걸 모두 바꿔야 한다면?

디비 부하가 많이 생길수도 있겠지만?

1000 x 1000 환경에서 5x5환경만 변경을 한다면?

디비 부하가 많이 줄어들수 있으니

질문하신 1번 내용처럼 실시간으로 개발하시면 됩니다

다만, 유저와 유저가 동접을 했을때 유저간 동기화 부분이 있는데, 그런 유저간 동기화를 어떤 기준으로 또 맞추느냐에 따라서 내용이 틀려집니다

그러므로 위 질문에 대한 답변은

전체 맵 스케일과 유저당 변화가 필요한 크기등 여러가지 요소를 알려주시면, 더 상세한 답변을 드릴수 있을것 같네요

댓글 0