본격적인 개발을 하다보면 CI, CD라는 용어를 많이 접합니다. 대충 자동 통합, 자동 빌드라는 것만 알고있었지 명확히 설명할 수는 없었던 것 같습니다. 이번 기회에 한번 정리해보고자 합니다.
CI가 뭘까?
CI는 Continuous Integration, 즉 지속적인 통합을 의미합니다. CI는 빌드/테스트 과정을 자동화 해주는데요, 여러명의 개발자가 동시에 개발을 할 때 merge 시 발생할 수 있는 오류 등을 알려주는 기능을 합니다. "머지마다 빌드와 자동 테스트가 일어나고, 문제가 발생하지 않았는지 자동으로 알려주는 과정"이라고 보면 될 것 같습니다.
CD는 뭘까?
CD는 지속적인 배포를 의미합니다. 코드 변경 사항이 위의 CI단계를 통과하여 main에 머지가 되면, 따로 배포할 필요없이 프로덕션으로 바로 배포해주는 역할을 합니다. CD를 이용하면 사용자가 좀 더 빠르게 변경사항을 경험할 수 있게 되는 것이죠.
굳이 왜??
사실 제가 여태까지 했던 프로젝트들(학생관리 웹사이트, 에브리타임 클론코딩 등등)은 이런 CI, CD를 적극적으로 사용하지 않았습니다. 코드 구조가 크지 않아 conflict나 코드수정으로 인한 오류도 적었고, 사용자가 한정되어있었기 때문에 CD의 필요성도 크게 느끼지 못했기 때문입니다.
CI/CD를 사용하지 않고 진행한 작업 방식입니다.
- 각자 컴포넌트를 맡아서 개발
- 각자 알아서 커밋하고 PR올리고 리뷰받고 머지
- 오류가 안나면 땡큐. 갑자기 오류가 나면 또 어떤 사람이 오류 파악해서 코드 수정
- fix: ~~~ error 식으로 또 PR올리고 머지
- 위의 과정 반복...
- 에러 다 수정하고 배포(build ~~~로 aws에 올림)
- 오류 안나면 땡큐. 나면 또 수정해서 머지하고 다시 배포
하지만, 현재 개발 중인 지도 커뮤니티 앱 같은 경우 많은 사람들에게 배포될 것이기 때문에 CD의 중요성을 느끼게 되었습니다. 또, 앱의 크기가 커지는 경우 에러를 파악하기도 매우매우 힘들어지기 때문에 위의 방식은 한계가 있을 것입니다. CI/CD를 적용한다면 다음과 같이 될 것입니다.
- 각자 컴포넌트 맡아서 개발
- 각자 커밋하고 PR올리고 리뷰받고 머지
- CI 툴이 알아서 빌드&테스트 해주고 에러 캐치해서 알려줌
- 에러 다 수정해서 검증되면 알아서 main으로 머지
- 머지된 코드는 CD 툴에 의해 알아서 배포됨
위의 리스트만 보면 굳이 싶지만, 놓치는 에러가 줄고 빌드와 테스트 과정이 줄어든다는 점에서 크기가 큰 프로젝트에서는 매우 중요해지는 개념이라는 것을 알 수 있습니다.
어떤 툴을 써야할까?
사실 이 도구 선정에 있어서 현재 제일 고민이 많습니다. CI / CD 툴로는
- Jenkins
- Travis
- GitHub Actions
등이 있습니다.
Jenkins는 사용자가 저 셋 중 가장 많으며, 그만큼 플러그인도 다양합니다. 에러 발생 시 디버깅이 쉽다는 장점도 있겠지요.
Travis는 웹 서비스라 설치가 필요없고 GitHub에서 바로 설정이 가능합니다.
GitHub Action은 툴 설치가 필요없고 GitHub에서 바로 yml 파일로 적용이 가능합니다. 설정이 매우매우 쉬운편이죠.
다만, 아래의 2개는 private repo의 경우 유료로 사용해야합니다.
개발중인 앱의 크기와 기능을 고려했을 때 'CI/CD의 성능이나 플러그인 적용'보다는 CI / CD의 툴 사용을 경험해보는 목적이 더 맞다고 생각하여 설정이 쉬운 GitHub Action을 이용해보려고합니다만, 팀원의 의견을 일단 들어보고 최종 결정을 하려고 합니다.
'Me > FrontEnd' 카테고리의 다른 글
[material-ui] ~~~ was not found in '@mui/material' 오류와 import level (0) | 2022.06.04 |
---|---|
[React] useRef로 Infinite Scroll 구현하기 (0) | 2022.05.23 |
프로세스와 스레드의 차이 (0) | 2022.05.20 |
[JavaScript] JS가 싱글스레드임에도 비동기 처리가 가능한 이유 (0) | 2022.05.19 |
[JavaScript] Promise와 async/await (0) | 2022.05.16 |
댓글