CI/CD (+github action

fejigu·2022년 10월 12일
1

GIT / GitHub

목록 보기
5/8


서비스의 규모가 복잡해지고 커질수록, 서비스를 배포하는 과정이 복잡해지고 소요되는 시간이 늘어날 것이다. 서비스의 변경 사항이 생길 때마다 배포 과정을 매번 수동으로 진행한다면, 배포 과정에 많은 시간을 허비해야 할 것이다. 이 때 필요한 것이 배포 자동화라고 한다.

그래서 이번에 배포 자동화에 대해 배우고, Github Actions를 사용하여 S3 버킷에 빌드한 파일을 업로드를 해보았는데 생각보다 쉽지 않았으며 많은 연습이 필요할 것 같다는 생각이 들었다.


🔎 클라이언트 배포

→ 로컬 환경에서 개발한 코드를 실제 서비스로 만들기 위해서는 빌드 과정과 이를 웹에 노출시키는 배포 과정이 필요하다. 빌드를 통해 만든 정적 피일이 웹을 통해 제공되려면 이러한 정적 파일을 제공하는 웹 서버가 필요한다.

일반적으로 웹 서버라고 하면 웹 서비스를 제공하는 모든 종류의 서버가 웹 서버일 수 있으나, 특별히 정적 파일을 제공할 수 있도록 서버의 공간을 대여해주는 서비스를 호스팅 서비스라고 부른다.

호스팅 서비스는 단순 파일을 웹에서 접근 가능하게 만들어주며, 동적 웹사이트나 API 서버를 제공하려면 별도의 클라우드 컴퓨팅 서비스가 필요하다.


🔎 다양한 웹 호스팅 서비스

Amazon Web Service (AWS) S3
Google Cloud Storage
Vercel
GitHub Pages
Netlify
Heroku


🔎 CI/CD

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 : 서비스 현황을 파악하고 생길 수 있는 문제를 감지

🔎 내가 생각하는 CI/CD의 이점

1) 코드 품질 보장 : CI/CD 파이프라인은 테스트 자동화를 제공하기 때문에 개발자들은 거의 실시간으로 코드 문제를 파악할 수 있다.개발자는 다른 프로젝트를 구동할 때 수정 요청에 시달리지 않아도 되므로 시간과 비용을 절약할 수 있으며 코딩에 더욱 집중할 수 있다.

2) 릴리스 속도를 단축하여 신속한 제공 : 코드를 더 빨리 릴리스하고 더 많은 새로운 코드를 개발할 수 있게 됨에 따라 끝없이 릴리스가 가능하여 개발자 리소를 최대한 활용할 수 있다.

3) 비용 절감 : 소프트웨어 개발 프로세스에 사람의 개입이 필요 없게 되어 시간과 비용이 절감된다.

4) 오류 격리 : 코드 오류를 쉽게 식별한 다음, 이를 격리함으로 생산성을 크게 향상 시킬 수 있다.

5) 최적의 투명성과 책임성 : 프로세스 상태를 한 눈에 확인할 수 있고 필요에 따라 책임 소재를 추적 할 수 있다.


🔎 github action으로 클라이언트 CI/CD를 구축한 배포


→ github action으로 클라이언트 CI/CD를 구축한 배포를 해보았는데 현재 하나는 통과되었고, 다른 하나는 실패한 상태이다. 간단할 것이라 생각했는데 생각보다 많은 오류를 마주하였다.
무엇이 문제인지 확인하고 다시 시도해보아야겠다.

profile
console.log(frontendjigu( ☕️, 📱); // true

0개의 댓글