2024년 1월 24일에 AWSKRUG DevOps 소모임에 다녀왔다.
CircleCI Senior Devops Customer Engineer, Junhaeng Hur(Junho)님께서 CircleCI에 관련된 발표를 진행하였다.
CI/CD의 가치
- 하드웨어와 소프트웨어를 분리하면서 얻을 수 있는 혜택
- 동작의 변화를 유연하게 가져갈 수 있다
- 하드웨어의 범용성 확보
CD플레이어와 오르골 비교
- CD플레이어 = 다양한 음악을 재생할 수 있음
- 오르골 = 제한된 음악만 재생
어떻게 범용성을 확보했는지에 따라서 마켓(market)에서 선택이 달라진다.
스마트폰과 전화기 비교
- 둘 다 하드웨어 측면에서는 기능을 충실히 수행
- 그러나 사람들은 전화를 위해 스마트폰을 구입하지 않음
- 그리고 CD플레이어의 핵심 기능인 음악재생기능도 스마트폰에서 가능함
소프트웨어의 가치
- 가변성을 확보하는 것을 통해 더욱 많고 다양한 고객 니즈에 대응 할 수 있으며
- 이러한 가변성은 소프트웨어의 변화에 전적으로 의지하고 있음
즉, 몇번이고 변화할 수 있는 것이 소프트웨어의 가장 중요한 가치이며 이가 요구되어짐
얼마나 업데이트 되어야 하는가
- 2022년 모바일 어플리케이션의 릴리스(release) 중앙치는 월 7회, 웹은 월 3회
- 릴리스(release) 횟수가 절대적인 기준이 되는 것은 아님
- 고객 피드백을 반영하기 까지의 리드타임을 단축시켜 어플리케이션 을 지속적으로 수정/발전 시키는 것이 요구됨
- 릴리스 빈도의 저하는 브랜드가치를 저하하고 경쟁사에 고객이 유출되는 등 기회 손실로 이어질 가능 성이 매우 높음
참고: APP-STABILITY-INDEX-2022 > Mobile apps release at almost twice the frequency of web apps
DevOps의 4가지 핵심 지표
- 변경의 리드 타임
- 배포 빈도
- 변경 실패율
- 평균 복구 시간
얼마만큼 기준을 달성해야 하는가?
참고: 2023 State of DevOps Report: Culture is everything
- CI/CD는 자동화를 통해 팀이 코드 변경 사항이 도입되는 순간부터 고객에게 릴리스되는 시점까지 코드 변경 사항을 감지, 확인 및 관리하는 데 도움을 줍니다.
- 수동적이고 반복적이며 오류가 발생하기 쉬운 작업으로 인해 발생하는 병목 현상을 제거하고 협업 문화와 지속적인 개선을 통해 효과적인 소프트웨어 제공을 지원합니다.
CircleCI란
전체적은 흐름
Continuous Integration (CI: 지속적 통합)
- 코드 변경사항을 빠르고 안전하게 병합
- 빌드
- 자동화된 테스트
- 정적 분석
- 보안 취약점 스캔
- 효과
- 불필요한 반복 작업 방지
- 릴리스 품질 향상
- 장기적인 비용 절감
- 개발에 집중
The Shift-Left Approach to Software Testing
- 어느단계에서 실패를 감지해야 cost를 절약할 수 있는가!
- 최대한 초기단계에서 실패를 감지해야 하는 것이 좋다.
- CI/CD를 하는 이유 중에 문제를 최대한 빨리 감지하기 위함이다.
참고: The Shift-Left Approach to Software Testing
Continuous Delivery (CD: 지속적 전달/배포)
- 코드 변경 사항을 빠르고 안전하게 배포 및 제공
- 효과
- 일관적 배포 프로세스
- 인적 오류 방지
- 신속한 서비스 제공
CircleCI의 포지션
- 중간 포지션에 위치함
CircleCI의 설정파일
- 다음위치에 yml 파일을 만든다.
.circleci/config.yml
Jobs
- CircleCI에서 가장 중요한 단위
- Jobs만 있으면 동작할 수 있다.
- 어디서 실행 하는지
- 무엇을 실행 하는지
config.yml 기본 구조
- jobs == 개별 작업 정의
- workflows == 작업(jobs)에 관한 설정을 정의
설정파일의 레퍼런스
- CircleCI의 설정파일의 구조를 이해하는데에 있어서 중요한 페이지
- 설정파일의 요소가 기술되어 있으며, 각 요소에 필요한 파라미터도 기재되어 있음
참고: https://circleci.com/docs/configuration-reference/
CircleCI의 특징
- 사용자 지정 리소스
- 최적의 성능을 발휘하고, 속도를 높이는 리소스를 선택할 수 있습니다. (Docker, Linux, macOS, Windows 등)
- 사용자 지정 캐시
- 제어 가능한 키를 사용하여, 실행된 모든 파일을 캐시하고 빌드 속도를 높입니다.
- Docker 레이어 캐시
- 고급 레이어 캐시에서 실행 시간을 단축합니다.
- 병렬 작업
- 유연하고 자동화된 프로비저닝을 통해 팀은 병렬실행을 최대한 활용하여 워크플로우가 완료될 때까지 대기하는 다운타임을 줄일 수 있습니다.
- 테스트 분할
- 여러 컨테이너에서 테스트를 자동으로 분할하여, RSpec, Cucumber, minitest, Django, Node 등의 많은 테스트를 실행할 수 있습니다.
- 코드로 구성
- 파이프라인을 다른 소스 코드와 동일하게 관리합니다. 파이프라인에서 무슨 일이 일어나 고 있는지 쉽게 이해할 수 있습니다.
- SSH 디버깅
- 빌드 컨테이너에 SSH로 접속하여, 로그 파일, 실행 중인 프로세스, 디렉토리 경로를 표시합니다.
- 클린한 환경
- 자동으로 적시에 프로비저닝되는 클린한 이미지로 실행을 시작할 수 있습니다.
- Orbs
- CircleCI 구성 파일의 일부를 패키징, 공유 및 재사용 가능
데모
CircleCI를 활용한 EKS 디플로이 시연
Q/A 요약
- UI/UX
- 지금은 좋아지긴 했지만 옛날에는 UI/UX 들이 엉망이었고 CircleCI가 가장 좋았다.
- Orbs의 활용
- CircleCI에서 Orbs를 효과적으로 활용하는 것이 핵심이다.
- 개발 빌드 시, 특히 Front-End 부분의 빠른 버전 변경에 대응하기 위해 Orbs를 사용하면 뒷단에서 자동으로 버전 관리 및 업데이트가 이루어진다.
- 대규모 서비스에서 수백 개의 마이크로 서비스가 있는 경우, DevOps 엔지니어가 모든 변경 작업을 일일이 처리하기 어려워진다.
- Orbs를 활용하면 작업이 간소화되며, 특별한 버전 관리가 필요하지 않다.
- 보안 스캔이 보장된 컨테이너 이미지 제공
- CircleCI에서 제공하는 컨테이너 이미지는 Security Scan이 일정 수준 보장되어 있다.
- 특히 안드로이드와 같은 이미지를 사용할 때 이점이 있다.
- CLI 툴을 활용한 자동화
- CircleCI는 CLI 툴을 제공하여 다양한 기능을 구현할 수 있다.
- Secret Management를 위한 기능을 CLI 툴을 활용하여 효과적으로 수행할 수 있다.
- CI 자동화를 CLI로 구현할 수 있어 효율적인 작업이 가능하다.