1. 배포자동화(Automated Deployment)
- 한번의 클릭 혹은 명령어 입력으로 전체 배포 과정을 자동으로 진행한다
- 수동적이고 반복적인 배포 과정을 자동화하여 시간을 절약한다
- 휴먼 에러(Human Error)를 방지할 수 있다
- 휴먼 에러란 사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수이다
- 기존의 배포 과정과 비교하여 특정 과정을 생략하거나 다르게 진행하여 오류가 발생하는 것이 휴먼 에러이다
- 전체 배포 과정을 매번 일관되게 진행하는 구조를 설계하여 휴먼 에러 발생 가능성을 낮출 수 있다
2. 배포 자동화 파이프라인(Pipeline)

- 배포에서 파이프라인(Pipeline)이란 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 말한다
- 파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리한다
- 각 단계는 파이프라인 안에서 순차적으로 실행된다
- 각 단계마다 주어진 작업(Actions)들을 수행한다 - 파이프라인에서 대표적으로 쓰이는 세 가지 단계의 이름 및 수행하는 작업이다
- Source 단계
: 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달한다
- Build 단계
: Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공한다
: Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달한다
- Deploy 단계
: Build 단계로부터 전달받은 결과물을 실제 서비스에 반영한다 - 파이프라인의 단계는 상황과 필요에 따라 더 세분화되거나 간소화될 수 있다
3. AWS 개발자 도구
- AWS 에는 개발자 도구 섹션이 존재한다
- 개발자 도구 섹션에서 제공하는 서비스를 활용하여 배포 자동화 파이프라인을 구축할 수 있다
1) CodeCommit
- Source 단계를 구성할 때 CodeCommit 서비스를 이용한다
- CodeCommit은 GitHub과 유사한 서비스를 제공하는 버전 관리 도구이다
- GitHub과 비교했을 때 CodeCommit 서비스는 보안과 관련된 기능이 강하다
- 소스 코드의 유출이 크게 작용하는 기업에서는 매우 중요한 요소이다 - CodeCommit을 사용할 때는 과금 가능성을 고려해야 한다
- 프리티어 한계 이상으로 사용할 시 사용 요금이 부과될 수도 있다
- 사이드 프로젝트나 가볍게 작성한 소스 코드를 저장해야 할 경우에는 GitHub을 이용하는 것이 효과적이다
2) CodeBuild
- Build 단계에서는 CodeBuild 서비스를 이용한다
- 유닛 테스트, 컴파일, 빌드와 같은 빌드 단계에서 필수적으로 실행되어야 할 작업들을 명령어를 통해 실행할 수 있다
- CodeBuild 서비스는 사용자가 작성한 buildspec.yml 파일을 참조하여 작업을 수행한다
3) CodeDeploy
- Deploy 단계를 구성할 때는 기본적으로 다양한 서비스를 이용할 수 있다
- CodeDeploy와 S3 서비스를 이용할 수 있다
- CodeDeploy 서비스를 이용하면 실행되고 있는 서버 애플리케이션에 실시간으로 변경 사항을 전달할 수 있다
- S3 서비스를 통해 S3 버킷을 통해 업로드된 정적 웹 사이트에 변경 사항을 실시간으로 전달하고 반영할 수 있다
- CodeDeploy 서비스는 사용자가 작성한 appspec.yml 파일을 참조하여 작업을 수행한다
4) CodePipeline
- 각 단계를 연결하는 파이프라인을 구축할 때 CodePipeline 서비스를 이용한다
- AWS 프리티어 계정 사용 시 한 계정에 두 개 이상의 파이프라인을 생성하면 추가 요금이 부여될 수 있다
※ 참조
▶ CodeBuild의 빌드 사양 참조 : https://docs.aws.amazon.com/ko_kr/codebuild/latest/userguide/build-spec-ref.html
CodeBuild의 빌드 사양 참조 - AWS CodeBuild
를 지정하는 경우runtime-versions: Ubuntu 표준 이미지 2.0 이상 또는 Amazon Linux 2 (AL2) 표준 이미지 1.0 이상 외의 이미지를 사용하는 경우, 빌드에서 경고가 발생합니다.Skipping install of runtimes. Runtime versio
docs.aws.amazon.com
▶ CodeDeploy AppSpec 파일 참조 : https://docs.aws.amazon.com/ko_kr/codedeploy/latest/userguide/reference-appspec-file.html
CodeDeploy AppSpec 파일 참조 - AWS CodeDeploy
tar 및 압축된 tar 아카이브 파일 형식(.tar 및 .tar.gz)은 Windows Server 인스턴스에서 지원되지 않습니다.
docs.aws.amazon.com
4. AWS Pipeline을 통한 배포 자동화
- AWS 개발자 도구 서비스를 이용해서 배포 자동화 파이프라인을 구축한다
- CodePipeline을 이용해서 각 단계를 연결하는 파이프라인을 구축한다
- Source 단계에서 소스 코드가 저장된 GitHub 리포지토리를 연결한다
- Build 단계에서 CodeBuild 서비스를 이용하여 EC2 인스턴스로 빌드된 파일을 전달한다
- Deploy 단계에서 CodeDeploy 서비스를 이용하여 EC2 인스턴스에 변경 사항을 실시간으로 반영한다 - 변경 사항을 GitHub 리포지토리에 반영했을 경우, 배포 과정이 자동으로 진행된다
- 배포 과정에서 오류가 생길 경우, log 파일을 참조하여 문제점을 확인한다
- 배포한 프로젝트를 Postman을 통해 확인할 수 있다
5. 배포자동화 실습
- 링크 주소를 main 브랜치로 이용한다
- https://github.com/codestates-seb/be-sprint-deployment
- 링크에 접속하여 해당 리포지토리를 자신의 리포지토리로 fork 한다
- git clone 명령어를 사용하여 자신의 로컬 환경에 소스 코드를 저장한다
- EC2 인스턴스에 소스 코드를 clone 하지 않는다 - EC2 인스턴스를 준비한다
- 터미널을 통해 EC2 인스턴스에 접속하여 java, ruby, aws-cli 를 설치하여 개발 환경을 구축한다
- EC2 인스턴스에 어떤 소스 코드도 clone하지 않는다
- EC2 인스턴스를 생성하고 개발 환경 구축하는 작업외에 다른 추가 작업은 하지 않는다
1) EC2 인스턴스 개발 환경을 구축 방법 - 추가 사항
- 우분투 터미널을 실행한다
- 패키지 매니저가 관리하는 패키지의 정보를 최신 상태로 업데이트하기 위해서 아래 명령어를 터미널에 입력합니다.
sudo apt update

- ubuntu 업데이트 과정이 끝나면 java를 설치한다
sudo apt install openjdk-11-jre-headless
- 'Do you want to continue?' 확인창이 나올경우 "Y"를 입력한다
- 리눅스 운영체계에 맞는 jdk 파일을 추가한다
- 설치 과정 완료 후 java -version 명령어를 입력하여 java 라이브러리가 설치되었는지 확인한다
: 명령어를 입력했는데 오류가 난다면 java 라이브러리가 정상적으로 설치되지 않은 것이다
java -version
- AWS CLI를 설치한다
- 최신 버전의 AWS CLI 설치 또는 업데이트
: https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/getting-started-install.html
최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface
설치 관리자의 아무 위치에서나 Cmd+L을 눌러 설치에 대한 디버그 로그를 볼 수 있습니다. 이렇게 하면 로그를 필터링하고 저장할 수 있는 로그 창이 열립니다. 로그 파일도 /var/log/install.log에 자
docs.aws.amazon.com
홈페이지에서 설치파일을 받아온다
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
받은 파일의 패키지를 확인한다
sudo apt install unzip
패키지의 압축을 푼다
unzip awscliv2.zip
파일을 설치한다
sudo ./aws/install
aws 버젼을 확인한다
aws --version
- EC2 인스턴스에 CodeDeploy Agent를 설치한다
ubuntu 프로그램을 업데이트 한다
sudo apt update
ruby를 설치한다
sudo apt install ruby-full
아래 문구가 나오면 'Y'를 입력한다
Do you want to continue? [Y/n]
wget를 설치한다
sudo apt install wget
ubuntu 디렉토리로 이동한다
각자 컴퓨터에 따라 다를 수 있다
cd /home/ubuntu
aws 홈페이지에서 코드배포 파일을 다운받는다
sudo wget https://aws-codedeploy-ap-northeast-2.s3.ap-northeast-2.amazonaws.com/latest/install
파일, 폴더의 권한을 변경한다
sudo chmod +x ./install
sudo ./install auto > /tmp/logfile
※ Linux에서 "chmod +x" 명령이란 무엇입니까? : https://linuxtect.com/what-is-chmod-x-command-in-linux/
What Is “chmod +x” Command In Linux? – LinuxTect
Linux provides the chmod command which is used to change file and folder permission. The chmod command is provided by all major Linux distributions like Ubuntu, Debian, CentOS, Mint, Kali, RHEL, SUSE, etc. The chmod command has different options and parame
linuxtect.com
- 설치가 완료되면 다음 명령어를 이용해 서비스가 실행중인지 확인한다
sudo service codedeploy-agent status
- 실행중이라는 문구가 뜨지 않는 경우 공식문서를 참고한다
: Ubuntu Server용 CodeDeploy 에이전트 설치
Ubuntu Server용 CodeDeploy 에이전트 설치 - AWS CodeDeploy
출력을 임시 로그 파일에 쓰는 것은 Ubuntu 20.04에서 install 스크립트를 사용하여 알려진 버그를 해결하는 동안 사용해야 하는 해결 방법입니다.
docs.aws.amazon.com
- 설치가 모두 완료되면 postmam 또는 브라우저를 이용해 테스트를 진행한다
- 생성한 EC2 인스턴스의 IP 주소를 이용하여 테스트 진행한다

'클라우드' 카테고리의 다른 글
Cloud - AWS(2) - EC2 인스턴스 생성 (0) | 2022.09.27 |
---|---|
Cloud - AWS(1) - 계정 생성 (0) | 2022.09.27 |
Cloud - 배포 컨테이너 - Docker Image (0) | 2022.08.07 |
Cloud - 배포 컨테이너 - Docker CLI(Command Line Interface) (0) | 2022.08.05 |
Docker Desktop - 사전 실행 (0) | 2022.08.05 |