Motivation !

코드와 서버의 코드를 동기화하는 작업의 두 번째 글이다.

이전 단계에서는 원하는 기능은 이루었지만, 3개의 문제를 발견했다.

이번 에는 1번 문제를 해결해 보려고 한다.

 

  1. 필요 없는 데이터
    패키지와 git 정보 같은 데이터들도 같이 넘어가는 문제가 있다.

  2. 효율성
    파일이 변경되어 있던 되어있지 않던 무조건 덮어쓰기를 하고 있는 문제가 있다.

  3. 속도
    하나의 파일마다 연결을 열고 파일을 전송하다 보니 너무 느리다.

 


 

todo !

우선 특정 경로의 파일들을 제외하고 파일을 옮기기 위해 2가지 방법을 사용해 보았다.

 

  1. bash script
    스크립트에서 해당 경로를 if 문으로 제외하는 방법이다.

  2. find 명령어 filter
    파일들의 목록을 불러오는 find명령어에서 걸러내는 방법이다.

우선 첫 번째 방법으로 시도해 보았다.

if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    # ubuntu
    sourceIp=$(hostname -i | awk '{print $1}')
    targetIp=192.168.0.0
    user=serverUser
    targetPath='ubuntuPath'
elif [[ "$OSTYPE" == "darwin"* ]]; then
    # mac
    sourceIp=$(ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d\  -f2)
    targetIp=192.168.0.0
    user=macUser
    targetPath='macPath'
fi

targetFileArray=()
sourceFileArray=()

for filePath in $(find $PWD -maxdepth 60 -type f)
do
    if [[ "$filePath" == "$PWD/node_modules/"* ]]; then
        continue
    elif [[ "$filePath" == "$PWD/python_env/"* ]]; then
        continue
    elif [[ "$filePath" == "$PWD/dist/"* ]]; then
        continue
    elif [[ "$filePath" == "$PWD/.git"* ]]; then
        continue
    fi
    fileName=$(basename ${filePath})
    rPath="${filePath#$PWD}"
    targetFilePath="$targetPath$rPath"
    targetFileArray[${#targetFileArray[@]}]="$targetFilePath"
    sourceFileArray[${#sourceFileArray[@]}]="$filePath"
done

targetFileArrayLength="${#targetFileArray[@]}"

cnt=0
for value in "${targetFileArray[@]}"
do
    scp ${sourceFileArray[$cnt]} ${user}@${targetIp}:${targetFileArray[$cnt]}
    echo $(($cnt + 1)), $value
    cnt=$(( $cnt + 1 ))
done

 

 

 

두 번째 방법으로 테스트를 시도해 보았다.

 

if [[ "$OSTYPE" == "linux-gnu"* ]]; then
    # ubuntu
    sourceIp=$(hostname -i | awk '{print $1}')
    targetIp=192.168.0.0
    user=serverUser
    targetPath='ubuntuPath'
elif [[ "$OSTYPE" == "darwin"* ]]; then
    # mac
    sourceIp=$(ifconfig | grep "inet " | grep -v 127.0.0.1 | cut -d\  -f2)
    targetIp=192.168.0.0
    user=macUser
    targetPath='macPath'
fi

targetFileArray=()
sourceFileArray=()

for filePath in $(find $PWD -maxdepth 60 -type d \( -path $PWD/node_modules -o -path $PWD/dist -o -path $PWD/python_env -o -path $PWD/logs -o -path $PWD/.git \) -prune -o -name '*' -a -type f)
do
    fileName=$(basename ${filePath})
    rPath="${filePath#$PWD}"
    targetFilePath="$targetPath$rPath"
    targetFileArray[${#targetFileArray[@]}]="$targetFilePath"
    sourceFileArray[${#sourceFileArray[@]}]="$filePath"
done

targetFileArrayLength="${#targetFileArray[@]}"

cnt=0
for value in "${targetFileArray[@]}"
do
    scp ${sourceFileArray[$cnt]} ${user}@${targetIp}:${targetFileArray[$cnt]}
    echo $(($cnt + 1)), $value
    cnt=$(( $cnt + 1 ))
done

 


conclusion !

두 방법에서 불필요한 폴더들을 제외하고 전송하는 데 성공하였다.

여기서 두 방식의 차이점을 발견하였는데 바로 속도이다.

 

첫 번째 방법의 경우 find 명령어로 현재 디렉토리의 전체 하위 파일들을 순회하면서, if 문으로 예외를 처리하므로 속도가 조금 느렸다.

두 번째 방법의 경우 find 명령어로 불필요한 디렉토리들을 미리 제외하고 순회하기 때문에 초기 실행속도가 더 빠른 것을 확인했다.

 

두 번째 방법을 사용하도록 하고 다음 문제들을 해결하도록 하려고 한다.

 

Issue !

  1. 효율성
    파일이 변경되어 있던 되어있지 않던 무조건 덮어쓰기를 하고 있는 문제가 있다.

  2. 속도
    하나의 파일마다 연결을 열고 파일을 전송하다 보니 너무 느리다.