개발자 노트

프로젝트 개요 본문

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

프로젝트 개요

jurogrammer 2020. 4. 29. 13:15

프로젝트 주제

win client와 ubuntu server 폴더를 동기화 하자!

목적

  • win client에서 작업한 결과물을 ubuntuserver에 동기화해서 웹 서버 동작을 ubuntu에 분담하기 위해서.
    • 장점
      • iptime의 DDNS기능 이용 가능
      • 서버가 위치가 고정된다
      • 노트북의 cpu,memory 등 자원을 확보할 수 있다.

특징

  • win client -> ubuntu server로만 데이터를 보낸다. ftp 통신이다.
    • win에서 변경하면 이 변경사항을 ubuntu server에 적용시키는 것. ubuntu의 변화는 win에 영향을 미치지 않는다. (win에서만 작업 수행.)

준비 작업

1. 두 컴퓨터간 동일한 환경으로 설정

  • mysql - 8.0.19 (utf-8 설정)
  • openjdk 14.0.1
  • tomcat 8.5.xx
  • eclipse 2020-03
    • hook 설정
      • eclipse를 통하지 않고 폴더를 수정하더라도 eclipse에 해당 내용을 반영 시킬 수 있다.

2. 통신 설정

  • ubuntu server

    • vsftpd 설치
      • ftp통신 app
    • tomcat, vsftpd 방화벽 포트 개방
  • win client

    • ftp 프로그램 코드 작성
  • iptime

    • ubuntu server ip로 ddns 설정
    • ubuntu server ip,포트 에 대해 tomcat, ftp 포트포워딩
  • vmware (ubuntu server)

    • 통신 방법을 브릿지로 설정

필요 기능

  1. client에서 server로 파일 전송.
    • client에서 새로 만든 파일 전송
    • client에서 수정한 파일 전송(덮어쓰기)
  2. client에서 삭제된 파일 server에서 삭제

기능 구현을 위한 자료구조와 알고리즘

자료구조

JSON이용.

{"path" : path, "fileName" : fileName, "hashValue" : hasValue}

가 하나의 파일을 의미한다. 이때 hashValue는 파일 내용을 해싱한 값.

path와 fileName이 운영체제 내 존재하는 파일을 유일하게 식별 가능토록 한다.

hashValue는 곧 파일 내용을 의미하므로 수정여부를 판단할 수 있다.

알고리즘

client -> server 파일 전송

  1. 파일을 새로 만들 경우

    • server가 가지고 있는 파일을 기록한 DB에서 새로운 파일이 없으면 전송
  2. 수정한 파일 전송

    • server에 기록된 파일 중에 파일 내용이 다르면 전송.

      • 이때, 수정한 파일을 확인하는 방법에 대해 생각좀 해봤다.

        디스크 직접 수정시 수정기록이 안변할 수 있다하여 파일 내용을 읽은 뒤 hashFunction을 통해 대조할 것이다.

    • 파일을 기록하는 이유는 통신비용때문(시간). 따라서 기록하여 보관해둔다.

client 삭제된 파일 server에서 파일 삭제

client기준 DB에 기록된 내용을 모두 확인할 때마다 기록된 파일을 삭제해준다.

그 뒤에 남은 파일목록들이 client에서 삭제된 파일을 의미하므로 그 파일들을 server에서 삭제해준다.

목표기간

하루

선택언어

JAVA

  • 백엔드에서 spring때문에 java를 많이 사용하므로 java에 익숙해지기 위해.

토이프로젝트라고 하기 민망할 정도로 간단해보이는 것이나,

JERD, 의존성, 코드 재사용성 등을 잘해서 실력을 키워보자.

동기화 프로그램은 널렸지만 직접 만들어보고 싶었다.

반응형

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

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