Develog
코드스테이츠 72-73일차 본문
학습목표
- 배포 자동화에 정의와 이점에 대해 설명할 수 있다.
- 배포 파이프라인이 무엇인지 정의할 수 있다.
- 파이프라인을 구성하는 단계(Stages)와 작업(Actions)에 대해 설명할 수 있다.
- AWS 개발자 도구를 활용하여 파이프라인을 구축할 수 있다.
- 배포 자동화 파이프라인 구축 과정에서 문제가 발생할 경우, log 파일과 공식 문서를 통해 해결할 수 있다.
- AWS에서 제공하는 IAM 서비스를 이해하고 사용할 수 있다.
Automated Deployment
배포 자동화
배포 자동화란 한번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것을 뜻한다.
배포 자동화가 왜 필요한데?
- 먼저 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약된다.
- 휴먼 에러(Human Error)를 방지할 수 있다.
- 여기서 휴먼 에러란 사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수들을 뜻한다. 배포 자동화를 통해 전체 배포 과정을 매번 일관되게 진행하는 구조를 설계하여 휴먼 에러 발생 가능성을 낮출 수 있다.
배포 자동화 파이프라인
배포에서 파이프라인(Pipeline)이란 용어는 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻한다.
파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리하는데, 각 단계는 파이프라인 안에서 순차적으로 실행되며, 각 단계마다 주어진 작업(Actions)들을 수행한다.
대표적으로 쓰이는 세 가지 단계는
1. Source 단계: Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행한다.
2. Build 단계: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공한다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행한다.
3. Deploy 단계: Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.
파이프라인의 단계는 상황과 필요에 따라 더 세분화되거나 간소화될 수 있으니 참고하자
AWS 개발자 도구
AWS 에는 개발자 도구 섹션이 존재한다. 개발자 도구 섹션에서 제공하는 서비스를 활용하여 배포 자동화 파이프라인을 구축할 수 있다.
AWS 개발자 도구에서 지원하는 서비스들
CodeCommit
Source 단계를 구성할 때 CodeCommit 서비스를 이용한다.
CodeCommit은 GitHub과 유사한 서비스를 제공하는 버전 관리 도구이다.
GitHub과 비교했을 때 CodeCommit 서비스는 보안과 관련된 기능에 강점을 가진다.
소스 코드의 유출이 크게 작용하는 기업에서는 매우 중요한 요소이다.
다만 CodeCommit을 사용할 때는 과금 가능성을 고려해야 한다.
프리티어 한계 이상으로 사용할 시 사용 요금이 부과될수도 있어 사이드 프로젝트나 가볍게 작성한 소스 코드를 저장해야 할 경우에는 GitHub을 이용하는 것이 효과적이라고 볼 수 있다.
CodeBuild
Build 단계에서는 CodeBuild 서비스를 이용한다.
CodeBuild 서비스를 통해 유닛 테스트, 컴파일, 빌드와 같은 빌드 단계에서 필수적으로 실행되어야 할 작업들을 명령어를 통해 실행할 수 있다.
CodeDeploy
Deploy 단계를 구성할 때는 기본적으로 다양한 서비스를 이용할 수 있다.
CodeDeploy 서비스를 이용하면 실행되고 있는 서버 애플리케이션에 실시간으로 변경 사항을 전달할 수 있다.
또한 S3 서비스를 통해 S3 버킷을 통해 업로드된 정적 웹 사이트에 변경 사항을 실시간으로 전달하고 반영할 수 있다.
CodePipeline
각 단계를 연결하는 파이프라인을 구축할 때 CodePipeline 서비스를 이용한다.
[주의] AWS 프리티어 계정 사용 시 한 계정에 두 개 이상의 파이프라인을 생성하면 추가 요금이 부여될 수 있습니다. 실습할 때에 주의하자
Github Actions를 통한 배포 Flow
Github Actions이란?
GitHub Actions는 Github가 공식적으로 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼이다.
레포지토리에서 Pull Request 나 push 같은 이벤트를 트리거로 GitHub 작업 워크플로(Workflow)를 구성할 수 있다.
워크플로는 하나 이상의 작업이 실행되는 자동화 프로세스로, 각 작업은 자체 가상 머신 또는 컨테이너 내부에서 실행된다.
워크플로는 .yml (혹은 .yaml ) 파일에 의해 구성되며, 테스트, 배포 등 기능에 따라 여러개의 워크플로도 만들 수 있습니다. 생성된 워크플로는 .github/workflows 디렉토리 이하에 위치한다.
비공개 레포지토리의 경우 Github Actions가 작동할 때의 용량과 시간이 제한되어있으며 공개 레포지토리는 무료로 사용 가능하다.
생성된 워크플로는 .github/workflows 디렉토리 이하에 위치한다.
Github Actions
Github Actions는 설정 파일(.yml)에 따라 Github Repository에 특정 변동사항을 트리거로 작동된다.
지난 일반 배포 실습에선 S3를 정적 웹 페이지 배포하는데에 사용했습니다. 하지만 이번 Github Actions를 통한 배포 자동화에서는 저장소로써 사용한다.
Github Actions에서 빌드한 결과물이 압축되어 S3으로 전송되고, 버킷에 저장된다.
Code Deploy
Github Actions에서 배포 명령을 받은 Code Deploy는 S3에 저장되어있는 빌드 결과물을 EC2 인스턴스로 이동한다.
프로젝트 최상단에 위치한 appepec.yml 설정 파일에 의해 쉘 스크립트 등 단계에 따라 특정 동작을 한다.
EC2
Code Deploy에 의해 빌드 과정을 거친 프로젝트가 EC2 인스턴스로 전달되고, .yml (설정 파일)과 .sh (쉘 스크립트)에 의해 각 배포 결과를 로그로 저장하며 빌드 파일(.jar)을 실행한다.
AWS IAM Service
IAM 서비스는 AWS 내에서 자격 증명(Authentication)에 대해 지원하고 제어한다.
대표적으로 User와 User Group 설정을 통해 AWS 계정에 대한 리소스 접근과 관리 권한을 다른 사람에게 부여하고, Role 설정을 통해 AWS 서비스 간 접근 권한을 부여할 수 있다.
'코드스테이츠' 카테고리의 다른 글
코드스테이츠 75일차 (0) | 2022.08.10 |
---|---|
코드스테이츠 74일차 (0) | 2022.08.10 |
코드스테이츠 71일차 (0) | 2022.08.04 |
코드스테이츠 69-70일차 (0) | 2022.08.02 |
코드스테이츠 67-68일차 (0) | 2022.07.29 |