CI/CD의 이해
CI/CD의 목표
- 반복 작업의 자동화 및 피드백 루프 단축 등을 통해 소프트웨어 릴리스 프로세스의 속도를 개선하는 것이다.
- 이는 짧은주기의 개발단위를 반복하며, 많은 협력과 피드백을 필요로 하는 애자일의 원칙을 실현하는 데 핵심적인 역할을 한다.
CI(Continuous Integration, 지속적 통합)란
- Continuous Integration이란 자동화된 빌드 및 테스트를 수행하고, 코드 변경사항을 중안 리포지토리에 정기적으로 병합하는 것
→ 자동화된 구성(CI & 빌드 서비스) + 문화적 구성(빈번하게 통합하도록 하는 것)
- 커밋된 변경사항이 자동으로 빌드 & 테스트되어 공유 리포지토리에 병합(빌드)됨으로써 MSA 환경에서 작업 시 기능 충돌 발생 방지 등을 할 수 있음
CD(Cotinuous Delivery & Deployment, 지속적 전달 & 배포)란
- Continous Delivery란 프로덕션에 릴리스하기 위한 코드 변경이 자동으로 준비되는 소프트웨어 개발 방식을 의미
- 단순한 유닛 테스트 외에도 다양한 테스트를 자동화함
- 테스트 : UI 테스트, 로드 테스트, 통합 테스트, API 안정성 테스트 등 (클라우드에서는 테스트 환경 구성이 용이함)
- Continous Deployment는 명시적 승인 없이 자동으로 배포까지 진행된는 것
- Continous Delivery에서 실제 배포는 선택적이나, Continous Deployment에서는 그렇지 않음
- 따라서 높은 수준의 테스트에 대한 확신이 필요하며, 추가적으로 모니터링 도구가 필요할 수 있음
AWS에서 제공하는 CI/CD도구들
AWS Code Series를 사용하여 AWS에서 CI/CD를 자동화할 수 있다.
- AWS Code Series : AWS의 CodeCommit, CodeBuild, CodeDeploy, CodePipeline을 통칭하는 단어
AWS Code Series를 사용하여 마이크로서비스용 CI/CD 파이프라인 및 Amazon ECS 클러스터 자동 구축 예시
- 개발자는 CodeCommit 리포지토리에 코드를 커밋
- code pipeline이 trigger됨
- Code Build는 컨테이너 이미지 빌드 & 간단한 유닛 테스트 & ECR에 이미지 저장
- CodePipeline은 비프로덕션 ECS 클러스터의 기존 Fargate 서비스에 새 이미지를 배포함 // CI 끝 & CD 시작
- ECS는 ECR 리포지토리에서 비프로덕션 Fargate 서비스로 이미지를 가져옴
- dev환경에 배포 → 각종 QA & Testing 진행 (비프로덕션 URL을 사용하여 수행)
- 테스트가 완료되었으면, 관리자의 릴리스 승인을 기다리게 됨
- 승인이 되면, CodePipeline은 프로덕션 ECS 클러스터의 기존 Fargate 서비스에 새 이미지를 배포
- ECS는 ECR 리포지토리에서 프로덕션 Fargate 서비스로 이미지를 가져옴
- 프로덕션 사용자는 프로덕션 URL을 사용하여 기능에 엑세스함
VPC(Virtual Private Cloud)란?
- 가상 사설망
- VPC를 적용하면 VPC별로 네트워크를 구성할 수 있고, 각 VPC별로 다르게 네트워크 설정을 줄 수 있음. 또한 각 VPC는 완전히 독립된 네트워크처럼 동작함.
DevSecOps
배경
- 전통적으로, 소프트웨어 보안 운영은 소프트웨어를 만드는 데 필요한 다른 프로세스와는 별개로 수행되었다.
- 개발자는 코드를 작성하고나서 보안에 대해 별로 생각하지 않고 코드를 배포하였고, 소프트웨어를 만들고 프로덕션 환경에 배치한 후에야 보안 엔지니어가 코드 안에서 또는 코드를 호스팅하는 환경 안에서 잠재적 취약점을 확인하였음.
- 이러한 환경은 보안과 DevOps의 효율을 떨어뜨렸고, 이에 소프트웨어 전달 프로세스의 모든 단계에 보안을 통합함으로써 이러한 문제를 해결하고자 한 것이 바로 DevSecOps인 것이다.
DevSecOps란
- DevOps의 핵심 개념을 보안까지 포함하도록 확장하는 것이다.
- 효과적인 DevSecOps는 DevOps를 수용하고 전체 CI/CD 개발 파이프라인에 보안을 통합하는 것을 의미한다.
- 즉, DevSecOps는 소프트웨어 보안을 전체 소프트웨어 전달 프로세스의 핵심 부분으로 만드는 개념을 말한다. (DevOps + Security)
Reference