Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

데이터 교환 방식에 대해 논의해봅시다. #4

Open
RE-A opened this issue May 4, 2019 · 5 comments
Open

데이터 교환 방식에 대해 논의해봅시다. #4

RE-A opened this issue May 4, 2019 · 5 comments
Assignees
Labels
good first issue Good for newcomers help wanted Extra attention is needed question Further information is requested

Comments

@RE-A
Copy link
Contributor

RE-A commented May 4, 2019

프로그램 로직 상 Calendar , ScheduleManagement, Timeline 등등 모듈들 간 Task 객체 등의 데이터를 교환해야 합니다. 예를 들면, Task를 생성했을 때 Timeline , calendar 로 당연히 전달해 줘야 합니다. 이 전달 방식에 여러 가지 방법이 있을 텐데, 어떻게 처리해야 할까요? 물론 여기서 말하는 교환은 개인의 Task에 한정합니다. 타인의 데이터를 받아오는 건 당연히 firebase를 통해서 할 것입니다.

  1. 모듈 간 직접적인 인스턴스 공유
    쉽게 말해 public으로 Task[] 배열을 하나 만들어놓고 이걸로 지지고 볶고 하는 방식입니다.
    요 방식이 제일 편할 수도 있겠지만, 테스팅이나 개발이 조금 힘들 수도 있어 보입니다.

  2. json 형식을 이용한 공유
    아마 SQL을 이용한 DB는 필요하지 않을 것 같고, 가장 간단한 방식은 이건데
    json을 사용하려면 외부 라이브러리가 필요해서 어떤 걸 쓸지 논의해야 할 것 같습니다.

  3. 모든 걸 firebase를 통해 공유
    Task를 등록할 때부터 일단 firebase에 올려놓고, 모든 걸 firebase에서 가져오는 방식입니다.
    프로그램 내에는 데이터가 하나도 저장되지 않고, 무언가 데이터를 처리해야 한다면
    firebase에서 데이터 인출->처리->firebase로 다시 데이터 전송 하는 방식입니다.
    이 방식이 매우 괜찮을 것 같은데, 혹시 성능 이유나 다른 문제가 있을 지 모르겠습니다.

@RE-A RE-A added the question Further information is requested label May 4, 2019
@shieldnet shieldnet added good first issue Good for newcomers help wanted Extra attention is needed labels May 6, 2019
@shieldnet
Copy link
Collaborator

  1. 모든 Data를 Firebase로 공유하면, 프로그램의 network에 걸리는 부하가 너무 많을 것 같습니다. 그러니까 데이터의 갱신요청/삭제/추가/수정이 있는 경우에만 Firebase와 연결하도록 하고 각 Components(Schedulemanager, TaskList, Timeline, Calendar 등)은 Schedulemanager가 들고 있는 ArrayList의 Reference를 들고 와서 데이터를 한 곳에서 관리하도록 합시다. 반드시 ScheduleManage의 Task Arraylist를 참조해야합니다. 복사 하는 순간 동기화 문제가 발생합니다.

@RE-A
Copy link
Contributor Author

RE-A commented May 11, 2019

지금 보니 Task List라고 Task 객체들을 관리하는 모듈이 따로 있는데, ScheduleManager가 들고있는 것보단 아예 그쪽으로 만들자마자 보내고 삭제나 수정시 ScheduleManager 가 Task List의 Task ArrayList를 참조하는게 낫지 않을까요? ScheduleManager가 데이터는 아무것도 갖고 있지 않도록요.

@shieldnet
Copy link
Collaborator

@RE-A TaskList는 Task객체들을 관리하는 모듈이 아니라, 현재 팀이 가지고 있는 일들을 시간 순서대로 정렬해 보여주는 모듈입니다.

@RE-A
Copy link
Contributor Author

RE-A commented May 19, 2019

자신의 Task들은 SM 모듈에서 관리하고 다른 모듈들은 이 모듈에서 Task list를 받아가면 되는데, 타인의 Task를 받아오는 건 어떤 모듈이 해야 하죠? 타인의 task는 수정이나 삭제, 추가 없이 단순히 Read-Only일 거고 이걸 각각의 모듈이 DB에서 받아오는 건 확실히 비효율적입니다. 모듈 하나에서 받아서 저장하고, 다른 모듈들이 이걸 참조하는 방식으로 하면 될 것 같습니다만.

동기화 문제는 음.. . 누군가가 DB로 Task를 추가하면 DB서버 측에서 모든 사용자들에게 새로운 데이터가 추가됐다고 Broadcasting을 해야 할까요.
-> 이거 실시간 FireBase DB에서 자동으로 해준다고 문서에 나와있네요.

@shieldnet
Copy link
Collaborator

@RE-A 좋은 생각입니다. 마침 그 내용이 Design Specification에 약간 구체적으로 작성되어 있으니 참고하시면 좋을 것 같습니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
good first issue Good for newcomers help wanted Extra attention is needed question Further information is requested
Projects
None yet
Development

No branches or pull requests

4 participants