마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이런 동기화 시스템 구축이 가능할까요?

0 추천
준비하고 있는건 목표 관리 앱이구요. 목표 데이터가 핸드폰(혹은 타블렛) 간에 동기화 되도록 하는 기능을 고민하고 있습니다.

제가 고민해본 구조는 다음과 같습니다.

서버를 각 사용자들의 구글 드라이브로 설정하고, 서버는 파일을 단순히 각 기기로 업로드/다운로드 하는 용도로만 사용합니다. (각 기기들이 Drive Api로 요청을 하면 파일을 받거나 주거나 하는거죠.)

파일은 sqlite 파일로, 서버에 저장된 db파일을 받으면(서버에 db가 없으면 단순히 클라이언트의 파일을 서버로 업로드) 클라이언트가 변경 사항을 확인하고 파일을 동기화 시켜줍니다. 그리고 동기화 된 파일을 다시 서버에 전송합니다.

여기서 문제가 두개의 클라이언트가 있다고 할 때, 서버(드라이브)에서 파일을 동시에 받아서 동시에 수정된 사항을 적용시키고 업로드 해버리면 0.1초라도 나중에 전송되는 파일이 다른 파일을 덮어 씌우게 되죠.

제대로 작동 되게 하려면 한번에 하나의 클라이언트만 접근 가능하게 설정 해서 순차적으로 서버의 데이터와 동기화 시키도록 만들어야 할텐데 드라이브에는 파일에 접근할 때, 한번에 하나의 클라이언트만 접근 가능하도록 하는 기능이 없다더군요.(https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&sqi=2&ved=0ahUKEwjF48zpoLXTAhWGjZQKHdCzC4EQFgguMAE&url=https%3A%2F%2Fproductforums.google.com%2Fd%2Fmsg%2Fdrive%2FBTuKcnQvd8M%2FG8B20kxt51AJ&usg=AFQjCNGZoqGZ-qgVU_Vku2uvdgSTlQpLjQ&sig2=nKHcMlpXqrfHKNn4wj4cJw)

어떤 해외 포럼에서 제안된 방법은 클라이언트가 접근했을때 서버의 db파일을 바꿔서 다른 클라이언트가 접근중이라는걸 알리는 방법이었는데 (거의 있을 수 없는 일이긴 하지만) 두 클라이언트가 완전히 같은 시간에 접근하게 되면 무용지물이 되는 방법이죠.

관련 api들을 뒤져보니 firebase realtime database는 모든 클라이언트가 하나의 서버에 접속하는 채팅앱 등에 사용되는 서비스인거 같고, 딱히 나와있는 레퍼런스도 없더군요..(무더기의 일반적인(?) 서버 상에서 동기화 작업을 해주는 레퍼런스들을 제외하고 말이죠.)
zent (1,360 포인트) 님이 2017년 4월 21일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...