
1. CI(Continuous Integration)/ CD (Continuous Delivery)

- 지속적인 통합 CI(Continuous Integration)
- 모든 개발자가 개발한 코드를 공유 리포지토리에 하루에도 여러 번 코드를 커밋하고 병합하는 것
- 지속적인 전달 CD (Continuous Delivery)
- 개발팀이 짧은 주기로 소프트웨어를 개발하고 언제든지 운영 환경으로 안정적으로 배포하는 것
2. AWS에서의 CI/CD flow
3. AWS에서의 CI/CD를 위한 서비스
1. Code Commit
1) Code Commit이란?
- 소스에 대한 형상 관리를 해 주는 서비스로 AWS에서의
깃허브와 같은 역할이라고 생각하면 된다.
- 클라우드에서 자산을 비공개로 저장하여 관리하는 데 사용한다.
- 기본적으로는 깃허브와 동일하게
push, pull, commit 등의 기능이 있고, git과 동일한 명령어를 사용한다.
2) Code Commit 특징
Code Commit은 높은 서비스 가용성과 내구성을 제공해서 하드웨어와 소프트웨어를 자체적으로 관리하는 부담을 줄여 준다.
- 클라우드 내에서 서버가 자체적으로 운영되고 있다. ->
git과의 차이
- 코드를 안전하게 저장할 수 있다.
- 코드에서 공동 작업이 가능하다.
- 이메일을 통해서 자동 알림을 하고, 버전 관리 프로그램을 쉽게 확장할 수 있다.
- AWS가 아니더라도 다른 서비스와 호환이 가능하다.
git 기반의 리포지토리여서 Code Commit으로 마이그레이션이 가능하다.
git의 도구를 모두 사용할 수 있다.
3) Code Commit 사용법

Code Commit으로 가 리포지토리를 선택해 주면 리포지토리 생성이라는 버튼이 뜬다.
- 해당 버튼을 누르고
리포지토리의 정보를 입력해 준 후 생성하면 된다.
git의 리포지토리와 기능은 동일하지만 Private하다.
2. Code Build
1) Code Build이란?
- 클라우드 상의 완전 관리형 빌드 서비스
- 소스 코드를 컴파일하고 단위 테스트를 실행한다. 또한 배포 준비가 완료된 아티팩트를 생성한다.
- 자체 빌드 서버를 프로비저닝하거나 관리 및 확장할 필요가 없다. 또한 널리 사용되는 프로그래밍 언어 및 빌드 도구에 맞게 사전 패키지된 빌드 환경을 제공한다.
- 최대 빌드 요청 수에 맞게 자동으로 확장된다.
2) Code Build 작동 방식
Code Pipeline- Code Build - CloudWatch Logs 자동화가 된다.
- 해당 목적지의 빌드 서버로 코드를 배포해 주는 역할을
Code Build가 하게 된다.
3) 빌드 프로젝트 생성
① 새 프로젝트 생성 및 프로젝트 이름 입력, 소스 선택 
- 다음과 같이
Code Build로 접속해 빌드 -> 프로젝트 빌드로 들어가 빌드 프로젝트 생성을 눌러 준다.
- 상단에 먼저 프로젝트의 이름을 입력해 준다.
- 소스에서는 소스의 공급자를 선택할 수 있는데 소스 공급자의 종류는 다음과 같다.

- 이때
GitHub를 선택해 주면 Git 계정과 연동해 주어야 한다.
- 다음과 같이
Git 계정과 연동해 주어야 Git 리포지토리를 가지고 올 수 있기 때문이다.
② 환경 설정 
- 다음과 같이
환경 이미지를 선택해 준다.
운영 체제를 선택해 주면 그 운영 체제에 따른 런타임과 이미지, 이미지 버전이 뜨게 된다.
③ 서비스 설정 
- 서비스를 설정해 준다. 만약 기존 서비스가 있다면
기존 서비스 역할을 선택해 주고, 새로운 서비스 역할을 생성해 연결해 주고 싶다면 새 서비스 역할을 선택해 주면 된다.
④ Buildsped 추가 
Build Script 추가가 필요하다.
- 소스 파일에
BuildSpec이라는 파일을 넣어 Build Script를 만드는 경우 buildspec 파일 사용을 선택하면 된다.
- 만약 직접
Build Script 입력을 할 시 빌드 명령 삽입을 선택해 준다.
- 이때
편집기로 전환을 누르면 다음과 같이 빌드 명령 예시가 뜨게 된다.
- 해당 위치에
Build Script를 넣어 주는데 만약 gradlew을 하게 되면 gradle 명령어를 해당 영역에 입력하면 된다.
⑤ 아티팩트(Artifact) 추가 
- 생성 후 추가해도 무관하다.
- 빌드가 진행된 이후에 배포(Deployment)에서 알아야 될 파라미터라고 생각하면 된다.
AWS Artifact란 자신에게 해당되는 규정 준수와 관련된 정보를 제공하는 신뢰할 수 있는 중앙 리소스이다.
⑥ 프로젝트 생성
- 이를 통해 프로젝트를 생성한다. 브런치 설정은 추후에 추가도 가능하나 빌드 프로젝트 생성 과정에서도 가능하다.
3. Code Deploy
- EC2 인스턴스, 온프레미스 인스턴스, 서버리스 lambda 함수 또는 ECS로 애플리케이션 배포를 자동화하는 AWS에서 제공하는 배포 서비스이다.
- 다양한 애플리케이션 콘텐츠(예: 코드, 서버리스 AWS Lambda 함수, 웹 및 구성 파일, 패키지, 스크립트, 멀티미디어 파일)를 무제한 배포가 가능하다.
4. Code Pipeline
1) Code Pipeline이란?

- 1, 2, 3번에서 본 서비스들은 따로 동작하지 않는다. 다음 그림과 같이
CodeCommit, CodeBuild, CodeDeploy가 모두 배포를 위한 하나의 파이프라인이 되며 이것을 AWS Code Pipeline이라고 부른다.
- 소프트웨어 릴리스 프로세스를 모델링하고 서버를 설정하거나 프로비저닝할 필요성을 줄일 수 있다.
AWS Management Console 또는 AWS command line interface(CLI)를 사용하여 소프트웨어 릴리스 프로세스 단계를 정의할 수 있다.
- 피드백을 반복하고 각 코드 변경을 테스트해 버그를 포착하는 새로운 기능을 신속하게 릴리스할 수 있다.
- 모든 단계에서 자체 플러그 또는 사전 구축된 플러그인을 사용하여 필요에 맞추어 조정할 수 있다.
- 하나의 프로그램을 위해서는 총 두 개에서 세 개의 파이프라인이 필요하다. 개발을 위한 개발, 테스트를 위한 스테이징, 그리고 최종적으로 실제 사용자가 사용하는 프로덕션 파이프라인이 필요하다. (스테이징은 생략되기도 한다.)
2) Code Pipeline 생성
Code Pipeline 생성 단계는 다음과 같다.
- 먼저
파이프라인의 이름 및 서비스, 역할을 설정하는 파이프라인 설정 단계를 거친다.
- 이후
Code Commit에서 해 주었던 소스 스테이지를 설정해 준다.
Code Build 단계에서 해 주었던 빌드 스테이지를 설정해 준다.
- 최종적으로
Code Deploy와 같이 배포 스테이지를 설정해 준다.
- 이 모든 과정을 검토한 후 하나의
파이프라인을 생성할 수 있다.