Motivation !

작업 중 상당히 귀찮은 부분은 작성한 코드를 서버에 옮겨서 실행시키는 부분이다.

그 전에는

  1. 복붙
    아무 생각 없이 시도했던 방식으로, 머리보다 손이 먼저 움직여서 실행했던 방법이다.
    말 그대로 코드를 복사해서 서버에 텍스트 에디터로 열고 붙여 넣기를 하는 방법이었다.


  2. github(git)
    파일 한 두 개 정도를 넘어서 많아지니 1번 방법으로는 도저히 엄두가 나지 않아서 사용했던 방법이다.
    사실 가장 좋은 방법 같긴 한데 자잘한 테스트에 늘어나는 커밋 로그를 보니 다른 방법을 찾기 시작했다.

 


 

todo !

scp 명령어를 순차적으로 실행시키는 스크립트를 작성하여서 프로젝트 디렉토리의 파일들을 한꺼번에 옮겨 보려고 한다.

 

우선 scp 명령을 위해 필요한 값들을 리스트를 적어 보았다.

 

  1. os type
    실행 시 로컬(mac)과 서버(ubuntu) 어디서 실행됐는지 파악하기 위해 필요

  2. sourceIp, targetIp
    scp에 필요한 서버의 ip와 로컬의 ip

  3. user
    서버의 user와 로컬의 user
  4. workDirPath
    서버의 프로젝트 경로와 로컬의 프로젝트 경로

위 4가지를 설정하고 스크립트를 작성해 보았다.
일단 작동이 잘 되었다.

 

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
    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

 

 


Issue !

우선 예상대로 잘 작동되었는데 몇 가지 문제를 발견했다.

 

  1. 필요 없는 데이터
    패키지와 git 정보 같은 데이터들도 같이 넘어가는 문제가 있다.
    지정한 폴더들을 무시하는 방법을 넣는 게 좋을 것 같다.

  2. 효율성
    파일이 변경되어 있던 되어있지 않던 무조건 덮어쓰기를 하고 있는 문제가 있다.
    나중에 Hash검증을 넣어서 해결해 보면 좋을 것 같다.
  3. 속도
    느리다. 너무 느리다. 아마도 하나의 파일마다 연결을 열고 파일을 전송하다 보니 너무 느리다.
    이 부분은 아직은 잘 방법을 못 찾겠다.