tobe 디렉토리를 사용하는이유
안녕하세요 강사님!
강의 너무 잘듣고 있습니다.
강의를 보다가 궁금한 점이 생겨서 질문드립니다.
- name: SCP로 EC2에 빌드된 파일 전송하기
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
source: project.jar
target: /home/ubuntu/instagram-server/tobe
- name: SSH로 EC2에 접속하기
uses: appleboy/ssh-action@v1.0.3
with:
host: ${{ secrets.EC2_HOST }}
username: ${{ secrets.EC2_USERNAME }}
key: ${{ secrets.EC2_PRIVATE_KEY }}
script_stop: true
script: |
rm -rf /home/ubuntu/instagram-server/current
mkdir /home/ubuntu/instagram-server/current
mv /home/ubuntu/instagram-server/tobe/project.jar /home/ubuntu/instagram-server/current/project.jar
cd /home/ubuntu/instagram-server/current
sudo fuser -k -n tcp 8080 || true
nohup java -jar project.jar > ./output.log 2>&1 &
rm -rf /home/ubuntu/instagram-server/tobe해당 부분을 보면 tobe폴더로 빌드파일을 전송하고 current라는 별도의 디렉토리를 두어서 그 디렉토리로 빌드파일을 옮겨서 실행하고 있는데 혹시 이렇게 하는 이유가 있을까요??
바로 current로 전송하지 않고 굳이 임시 디렉토리를 두는 이유가 궁금합니다.
답변 2
1
안녕하세요 djqwkfj43u님!
아래 인프런 AI 인턴이 잘 답변해준 것 같네요:)
‘tobe’ 디렉토리를 사용하는 것은 롤백(rollback) 및 빌드 파일 전송 도중 발생할 수 있는 문제를 방지하기 위한 안전한 배포 방법입니다. 배포 시 빌드 파일을 바로 현재 실행 중인 디렉토리(current)로 전송하면, 기존에 실행 중인 애플리케이션이 중단되거나 파일이 손상될 우려가 있습니다.
이러한 과정을 통해 현재 실행 중인 애플리케이션을 최대한 안정적으로 중단시키지 않고 새 버전의 애플리케이션을 배포할 수 있습니다.
이 부분을 참고하시면 될 것 같습니다!!
이 외로 궁금하신 점 있으시면 또 질문 남겨주세요~~
1
안녕하세요, 인프런 AI 인턴입니다.
djqwkfj43u님, 강의를 시청해 주셔서 감사합니다! 질문주신 ‘tobe’ 디렉토리를 사용하는 이유에 대해 설명드리겠습니다.
‘tobe’ 디렉토리를 사용하는 것은 롤백(rollback) 및 빌드 파일 전송 도중 발생할 수 있는 문제를 방지하기 위한 안전한 배포 방법입니다. 배포 시 빌드 파일을 바로 현재 실행 중인 디렉토리(current)로 전송하면, 기존에 실행 중인 애플리케이션이 중단되거나 파일이 손상될 우려가 있습니다.
따라서, 다음과 같은 과정을 통해 안정성을 높일 수 있습니다:
- 임시 디렉토리로 전송: 빌드된 파일을 ‘tobe’라는 임시 디렉토리로 먼저 전송합니다.
- 서버 종료 및 기존 디렉토리 삭제: 실행 중인 서버를 종료하고 현재 실행 중인 파일들이 있는 디렉토리(current)를 삭제합니다.
- 파일 이동 및 재실행: 임시 디렉토리(‘tobe’)에 있는 파일을 ‘current’ 디렉토리로 이동시킨 후, 서버를 재실행합니다.
이러한 과정을 통해 현재 실행 중인 애플리케이션을 최대한 안정적으로 중단시키지 않고 새 버전의 애플리케이션을 배포할 수 있습니다.
아래는 비슷한 질문과 답변들을 참고하실 수 있는 링크들입니다:
- 일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법의 스크립트 질문
- codedeploy 배포 관련 질문
- scp로 EC2에 jar 전송 중 scp timeout로 인한 실패 문제입니다
- rsync 비교질문입니다
위 링크들을 통해 더 자세한 정보를 확인하실 수 있을 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
무중단 배포
0
57
2
workflows/deploy.yml 궁금증
0
52
2
.git-credentials 파일이 없이 배포가 성공한 이유가 궁금
0
57
1
(해결 - 정보공유) /home/runner/work/_temp/6be6e~0.sh: line 1: ./gradlew: Permission denied 오류
1
63
2
(확인 완료) git config --global creadential.helper store 후에도 비밀번호 물어보는 현상
1
71
2
질문_ 강의 순서 및 그외
0
70
2
섹션 4 - Docker + 백엔드(Spring Boot)
0
63
2
deploy.yml작성후 원격에 push불가
0
63
2
CodeDeploy 사용시 registration 요구
0
106
3
스프링 종료 명령어
0
68
2
RAM & 스왑메모리 폭증하는 문제
0
102
2
섹션 4, 5와 6, 7은 유사한가요?
0
66
1
code deploy 배포입니다.
0
98
3
사용자 삭제가 안되는 이유
0
88
2
이미지 pull중 no basic auth credentials 문제입니다.
0
113
2
Docker Compose파일을 작성했을때 CI CD와의 연동
0
96
2
보안그룹 생성 오류
0
84
3
AWS 5월에 탈퇴해서 그러는데....
0
81
1
배포 오류
0
80
2
node.js 설치시 에러
0
149
2
appspec.yml, 스크립트 파일 수정요청
0
82
2
appleboy/ssh-action stop_script 대체
1
181
2
Vue.js 파일 배포
0
61
2
aws를완강하고 ci/cd로 넘어왔습니다.
0
85
1





