inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

비전공자도 이해할 수 있는 CI/CD 입문·실전

[실습] 일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법

tobe 디렉토리를 사용하는이유

해결된 질문

200

djqwkfj43u

작성한 질문수 7

0

안녕하세요 강사님!

강의 너무 잘듣고 있습니다.

강의를 보다가 궁금한 점이 생겨서 질문드립니다.

 

      - 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로 전송하지 않고 굳이 임시 디렉토리를 두는 이유가 궁금합니다.

aws docker ci/cd github-actions aws-code-deploy infrastructure aws-ec2

답변 2

1

JSCODE 박재성

안녕하세요 djqwkfj43u님!

아래 인프런 AI 인턴이 잘 답변해준 것 같네요:)

 

‘tobe’ 디렉토리를 사용하는 것은 롤백(rollback) 및 빌드 파일 전송 도중 발생할 수 있는 문제를 방지하기 위한 안전한 배포 방법입니다. 배포 시 빌드 파일을 바로 현재 실행 중인 디렉토리(current)로 전송하면, 기존에 실행 중인 애플리케이션이 중단되거나 파일이 손상될 우려가 있습니다.

이러한 과정을 통해 현재 실행 중인 애플리케이션을 최대한 안정적으로 중단시키지 않고 새 버전의 애플리케이션을 배포할 수 있습니다.

이 부분을 참고하시면 될 것 같습니다!!

이 외로 궁금하신 점 있으시면 또 질문 남겨주세요~~

 

1

djqwkfj43u

이해됐습니다 감사합니다!

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.

djqwkfj43u님, 강의를 시청해 주셔서 감사합니다! 질문주신 ‘tobe’ 디렉토리를 사용하는 이유에 대해 설명드리겠습니다.

‘tobe’ 디렉토리를 사용하는 것은 롤백(rollback) 및 빌드 파일 전송 도중 발생할 수 있는 문제를 방지하기 위한 안전한 배포 방법입니다. 배포 시 빌드 파일을 바로 현재 실행 중인 디렉토리(current)로 전송하면, 기존에 실행 중인 애플리케이션이 중단되거나 파일이 손상될 우려가 있습니다.

따라서, 다음과 같은 과정을 통해 안정성을 높일 수 있습니다:

  1. 임시 디렉토리로 전송: 빌드된 파일을 ‘tobe’라는 임시 디렉토리로 먼저 전송합니다.
  2. 서버 종료 및 기존 디렉토리 삭제: 실행 중인 서버를 종료하고 현재 실행 중인 파일들이 있는 디렉토리(current)를 삭제합니다.
  3. 파일 이동 및 재실행: 임시 디렉토리(‘tobe’)에 있는 파일을 ‘current’ 디렉토리로 이동시킨 후, 서버를 재실행합니다.

이러한 과정을 통해 현재 실행 중인 애플리케이션을 최대한 안정적으로 중단시키지 않고 새 버전의 애플리케이션을 배포할 수 있습니다.

아래는 비슷한 질문과 답변들을 참고하실 수 있는 링크들입니다:

  1. 일반 프로젝트에서 많이 쓰는 CI/CD 구축 방법의 스크립트 질문
  2. codedeploy 배포 관련 질문
  3. scp로 EC2에 jar 전송 중 scp timeout로 인한 실패 문제입니다
  4. 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