개발자 노트

ver 1.0문제 본문

토이프로젝트/클라이언트-서버 폴더 동기화

ver 1.0문제

jurogrammer 2020. 4. 29. 15:10

ver1.0문제점.

(소스코드는 아래에 있습니다.)

https://github.com/jurogrammer/PROJECT/tree/master/ftp%EB%8F%99%EA%B8%B0%ED%99%94

1.수정한 파일이 삭제된다.

원인

기존에 ftp에 있는 파일 목록이 있는 db가 있다. 그리고 클라이언트의 동기화 폴더를 탐색하며 이전 db목록들을 pop한다. 그리고 남은 것들에 대해서 삭제하는 방식.

그런데 수정한 파일은 hash값이 달라서 해당 파일이 기존 db에서 pop되지 않는다.

따라서 수정한 파일을 전송하고, 해당 데이터가 db에서 없어지지 않아서 삭제메소드 작동시 수정한 파일이 삭제된다.

해결방안
  1. 아예 자료구조를 새로 생각해보는 건??

    • 일단은 잘 작동되는게 목적이므로.. 나중에 리팩토링하자.
  2. db에 수정여부를 기록해두는 건?

    • db는 파일속성 그 자체로 남기고 싶다.
    • 작동시 file,path를 따로 기록해두는 건 의미 있을 듯 하다.
  3. file,path완전탐색.

    • 삭제할 파일이 이전에 기록한 file,path가 일치한다면 삭제하지 않는다. 그런데 hash값을 모르므로 완전탐색해야 한다. (기존에 HashMap을 이용하여 받아놓음)

      이 방법이 간결하여 이를 적용함. (O(n^2)이므로 오래 걸리긴 한다.)

2.삭제 알고리즘이 fit?하지 못하다.

JSONArray로 저장된 삭제할 파일 목록을 하나씩 꺼내어 지우는데 이게 디렉토리일 수 있고 파일일 수 있다. 디렉토리이면 해당 디렉토리 내 파일이나 디렉토리를 찾아 삭제해주고 삭제할 목록들도 최신화 시켜줘야 한다.

그런데 리스트형태로 저장되어 있다보니 디렉토리내 파일 찾기가 어렵다.

그래서 결국 FtpClient 라이브러리에 파일삭제, 디렉토리 삭제가 따로 있어서

파일이면 파일 삭제 수행 후에

디렉토리가 있으면 디렉토리 삭제로 바꾸었다.(디렉토리 내 파일이 있으면 삭제가 안되므로 파일먼저 수행한다.)

별로 좋아보이진 않는다.

정말 트리구조로 저장하는 방식을 생각해둬야겠다.

3.동기화할 파일경로 및 server에 대해 일반적이지 못하다.

properties를 이용해서 저장했는데 propeorties를 받을 코드를 작성하지 못했다. UI 클래스를 선언해서 properties를 수정해주어야겠다.

4.client -> server 내 작업환경만 고려한 문제

client에 있는 파일들이 모두 server로 전송되고 전송한 파일만 기록한다.

즉, server에 이미 있는 파일들은 기록하지 않는다는 점이다.

옵션 선택을 통해

  1. server내 파일들도 모두 기록할 것인지
  2. server내 파일들을 client에 불러와 기록할 것인지
  3. 중복된 파일은 어디에 있는 파일로 덮어씌울 것인지

같은 것들을 선택할 수 있도록 해야겠다.

5.중간중간 수정하다보니 코드가 깔끔하지 못하다.

어떤 객체가 특정 작업을 하도록 할 것인지, 그리고 기능적 구분이 잘 안되서 하드코딩도 발생했다. (SynController 중 업로드 및 삭제부분.)

반응형

'토이프로젝트 > 클라이언트-서버 폴더 동기화' 카테고리의 다른 글

메모리 문제.  (0) 2020.05.01
배포시 문제  (0) 2020.04.30
mavenProjectBuild문제  (0) 2020.04.29
프로젝트를 진행하며 알게 된 것들.  (0) 2020.04.29
UML  (0) 2020.04.29
Comments