Motivation !
작업 중 상당히 귀찮은 부분은 작성한 코드를 서버에 옮겨서 실행시키는 부분이다.
그 전에는
- 복붙
아무 생각 없이 시도했던 방식으로, 머리보다 손이 먼저 움직여서 실행했던 방법이다.
말 그대로 코드를 복사해서 서버에 텍스트 에디터로 열고 붙여 넣기를 하는 방법이었다. - github(git)
파일 한 두 개 정도를 넘어서 많아지니 1번 방법으로는 도저히 엄두가 나지 않아서 사용했던 방법이다.
사실 가장 좋은 방법 같긴 한데 자잘한 테스트에 늘어나는 커밋 로그를 보니 다른 방법을 찾기 시작했다.
todo !
scp 명령어를 순차적으로 실행시키는 스크립트를 작성하여서 프로젝트 디렉토리의 파일들을 한꺼번에 옮겨 보려고 한다.
우선 scp 명령을 위해 필요한 값들을 리스트를 적어 보았다.
- os type
실행 시 로컬(mac)과 서버(ubuntu) 어디서 실행됐는지 파악하기 위해 필요 - sourceIp, targetIp
scp에 필요한 서버의 ip와 로컬의 ip - user
서버의 user와 로컬의 user - 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 !
우선 예상대로 잘 작동되었는데 몇 가지 문제를 발견했다.
- 필요 없는 데이터
패키지와 git 정보 같은 데이터들도 같이 넘어가는 문제가 있다.
지정한 폴더들을 무시하는 방법을 넣는 게 좋을 것 같다. - 효율성
파일이 변경되어 있던 되어있지 않던 무조건 덮어쓰기를 하고 있는 문제가 있다.
나중에 Hash검증을 넣어서 해결해 보면 좋을 것 같다. - 속도
느리다. 너무 느리다. 아마도 하나의 파일마다 연결을 열고 파일을 전송하다 보니 너무 느리다.
이 부분은 아직은 잘 방법을 못 찾겠다.
'프로젝트 > 로컬서버코드동기화' 카테고리의 다른 글
[bash] 로컬의 코드와 서버의 코드를 동기화 해보자. <3> (0) | 2022.08.31 |
---|---|
[bash] 로컬의 코드와 서버의 코드를 동기화 해보자. <2> (0) | 2022.08.26 |