회원관리프로그램 수정했습니다.

lalupo20의 이미지

클라이언트에서 정보를 수정하면

서버에 메시지를 보냄

서버는 다시 모든 클라이언트에게 메시지를 주고

메시지를 받은 클라이언트들은

db에서 데이터를 다시 받아옴

데이터를 갱신할 필요가 있는 클라에게만 메시지를 쏘아야겠지만

어려워질거 같아서 이정도로 마무리 하렵니다.

세벌의 이미지

그래서 kldp에서 뭘 어떻게 했으면 좋겠습니까?
개인 메모장에 쓸 글을 여러 사람 보는 게시판에 쓰신 것 같아서요.

lalupo20의 이미지

결과를 알려드려야 될거 같아서 적었는데 일기 같았다면 죄송합니다.

Anti-Lock의 이미지

누군가가 열심히 1초에 한번씩 '정보 수정'을 하면,
다른 사람들은 실질적으로 데이터 수정이 어렵겠군요.
1초마다 다시 받아와서 입력하던 데이터를 잃어버리니...
암튼, 결론은... 적당선으로 결정해야죠.

lalupo20의 이미지

어떻게 개선해야 될지
정보 수정은 실시간으로 업데이트 되야 하는건 맞는거 같고.

수정은 첫번째로 들어온 사람만 가능하게 하는게 맞을까요?

사람 나갈때마다 수정권한 다음사람에게 넘기는 식?

그러고 보니 연속 수정 시간에 대해도 제한을 두어야 겠네요.

Anti-Lock의 이미지

생각해볼수록 어려운거 같네요.
경험 많으신 분들께서 조언을 해주시면 감사하겠네요.

라스코니의 이미지

정보를 수정하거나 추가/삭제하는 것이 모든 레코드에 대한 것이 아니지 않나요?
클라이언트로 부터 받는 정보 수정 요청은 임시(temporary) 레코드로 저장해 놓고 차근 차근 원래 레코드에 통합(merge)한다고 생각해 보세요.

유저 정보 수정 시작
____create temporary record block
____save user request to the created temporary record block
____sanity check of the saved record block
____wait mutex on the main record
____merge (add/modify/delete) the user action to main record
____release mutex
유저 정보 수정 끝

그리고 항상 서버와 변경 사항을 실시간으로 동기화할 필요가 없죠. 서버로부터 정보를 가져올 때 그때 업데이트가 된게 있으면 가져오면 됩니다. 상용급 프로그램에서는 변경 사항만 가져오겠지만 지금 그렇게 하기는 어렵겠죠. 대역폭을 좀 차지하고 서버에 부담이 되어도 일단은 전체 레코드를 가져오게 하고 차차 업데이트 해 나가면 될 것으로 보입니다.

jick의 이미지

일반적으로 한번에 한 명의 회원 정보를 수정하지 않나요? 그러면

(1) A 회원의 회원 정보 요청: A 회원의 정보 + 현재 버전을 가져온다
(2) 클라이언트에서 수정
(3) 서버에 업데이트: 서버에서 DB에 update 명령을 내리면서 현재 버전을 1 증가. 만약 버전이 아까 알던 버전과 다르면 누군가 이미 업데이트를 했다는 뜻이므로 업데이트 실패.

...뭐 보통 이런 식으로 하는 게 정석(?)이죠.