인프런 커뮤니티 질문&답변

djqwkfj43u님의 프로필 이미지

작성한 질문수

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

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

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

해결된 질문

작성

·

35

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

답변 2

1

JSCODE 박재성님의 프로필 이미지
JSCODE 박재성
지식공유자

안녕하세요 djqwkfj43u님!

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

 

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

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

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

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

 

djqwkfj43u님의 프로필 이미지
djqwkfj43u
질문자

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

1

안녕하세요, 인프런 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 비교질문입니다

위 링크들을 통해 더 자세한 정보를 확인하실 수 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.