서비스의 규모가 복잡해지고 커질수록, 서비스를 배포하는 과정이 복잡해지고 소요되는 시간이 늘어날 것이다. 서비스의 변경 사항이 생길 때마다 배포 과정을 매번 수동으로 진행한다면, 배포 과정에 많은 시간을 허비해야 할 것이다. 이 때 필요한 것이 배포 자동화라고 한다.
그래서 이번에 배포 자동화에 대해 배우고, Github Actions를 사용하여 S3 버킷에 빌드한 파일을 업로드를 해보았는데 생각보다 쉽지 않았으며 많은 연습이 필요할 것 같다는 생각이 들었다.
→ 로컬 환경에서 개발한 코드를 실제 서비스로 만들기 위해서는 빌드 과정과 이를 웹에 노출시키는 배포 과정이 필요하다. 빌드를 통해 만든 정적 피일이 웹을 통해 제공되려면 이러한 정적 파일을 제공하는 웹 서버가 필요한다.
일반적으로 웹 서버라고 하면 웹 서비스를 제공하는 모든 종류의 서버가 웹 서버일 수 있으나, 특별히 정적 파일을 제공할 수 있도록 서버의 공간을 대여해주는 서비스를 호스팅 서비스라고 부른다.
호스팅 서비스는 단순 파일을 웹에서 접근 가능하게 만들어주며, 동적 웹사이트나 API 서버를 제공하려면 별도의 클라우드 컴퓨팅 서비스가 필요하다.
Amazon Web Service (AWS) S3
Google Cloud Storage
Vercel
GitHub Pages
Netlify
Heroku
→
CI/CD는 자동화 기능을 사용하여 코드 개발 및 제공을 획기적으로 간소화할 수 있는 2단계의 프로세스이다.
→CI(Continuous Integration)는 지속적 통합
으로 개발자를 위한 자동화 프로세스라고 볼 수 있으며, Code - Build - Test 단계에서 꾀할 수 있다. 지속적인 통합이 적용된 팀은 코드를 머지하기 전, 빌드 오류나 테스트 오류를 확인하여 더욱 효율적인 개발을 할 수 있다.
CD(Continuous Delivery/Deployment)는 지속적인 서비스 제공 및 지속적인 배포를 의미하며, 이 부분은 Release - Deploy - Operate 단계에서 꾀할 수 있다. 이 프로세스를 완료하면 팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있다.
Code
: 개발자가 코드를 원격 코드 저장소 (Ex. github repository)에 push하는 단계Build
: 원격 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드하는 단계Test
: 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인하는 과정Release
: 배포 가능한 소프트웨어 패키지를 작성Deploy
: 프로비저닝을 실행하고 서비스를 사용자에게 노출. 실질적인 배포 부분Operate
: 서비스 현황을 파악하고 생길 수 있는 문제를 감지
1)
코드 품질 보장
: CI/CD 파이프라인은 테스트 자동화를 제공하기 때문에 개발자들은 거의 실시간으로 코드 문제를 파악할 수 있다.개발자는 다른 프로젝트를 구동할 때 수정 요청에 시달리지 않아도 되므로 시간과 비용을 절약할 수 있으며 코딩에 더욱 집중할 수 있다.
2)릴리스 속도를 단축하여 신속한 제공
: 코드를 더 빨리 릴리스하고 더 많은 새로운 코드를 개발할 수 있게 됨에 따라 끝없이 릴리스가 가능하여 개발자 리소를 최대한 활용할 수 있다.
3)비용 절감
: 소프트웨어 개발 프로세스에 사람의 개입이 필요 없게 되어 시간과 비용이 절감된다.
4)오류 격리
: 코드 오류를 쉽게 식별한 다음, 이를 격리함으로 생산성을 크게 향상 시킬 수 있다.
5)최적의 투명성과 책임성
: 프로세스 상태를 한 눈에 확인할 수 있고 필요에 따라 책임 소재를 추적 할 수 있다.
→ github action으로 클라이언트 CI/CD를 구축한 배포를 해보았는데 현재 하나는 통과되었고, 다른 하나는 실패한 상태이다. 간단할 것이라 생각했는데 생각보다 많은 오류를 마주하였다.
무엇이 문제인지 확인하고 다시 시도해보아야겠다.