앞으로 할 프로젝트나 스터디에 CI/CD를 중점적으로 도입하고 싶었고
혼자 긁적대며 적용중이지만
과연 CI/CD 가 현업에서 어디까지 적용되는지에 대한 의문이 있었다.
좋은기회로 당근마켓 백엔드 개발자이신 분의 말씀을 듣고
해당 글을 작성해본다.
(어찌보면 추후 면접 준비를 위해 다시 공부해야할..)
CI란 무엇인가
CI 란 뭐라고 생각하시나요? 라고 물었을 때
“지속적 통합” 이요..
“빌드하는 과정” 이아닐까요?
라고 밖에 대답하지 못하는 사람이 있다면 (바로 나) 한번쯤 다시 생각해보면 좋다.
그래, 사전적 의미. 좋지, 통합? 통합 맞지.
근데 코드를 통합한다면 통합시에 여러 문제가 생기지 않을까?
라는 생각도 해봐야한다.
즉, CI라 함은 그저 코드를 합친다 의 의미를 지니고만 있는 통합이 아닌
통합 전 후의 과정 ==>
소스코드를 폴링하여 컴파일, 단위 테스트, 코드 인스펙션 등
코드의 결함과 컨벤션 적합성 등을 체크하며 여러 검증을 거쳐 빌드하고 통합하는 일련의 과정을 이야기한다.
그렇다면 이 모든 과정을 한번에 진행하느냐?
당연히 아니다.
CI 절차에도 여러 방법들이 있다고 한다.
(찾아보시길 - 비교적 불친절한 나의 글..)
그중 기억에 남는, 처음 들어보는 방법이자 절차는
“정적 코드 분석” 이라는 것이 있다고 한다.
(추후 다시 다뤄야 할 듯)
어!쨌!든!
정적 코드 어쩌고,,저쩌고 다 알겠는데
이러한 일련의 CI 과정을 학생 개발자 측면에서 경험할 수 있는 방법은 무엇일까?
바로 Github Actions 이다.
(물론 Jenkins .. 등 CI 툴은 많겠지만 직접 입력하며 옵션을 줄 수 있는 학습에 최적화된 툴..이라고 하심)
평소 build 명령어를 일일이 치기 귀찮아서 build 의 과정을 담은 workflows는 한두번 작성해보았는데,
앞서 말한 컨벤션 적합 등 특정 조건에 부합하는지의 여부를 어떻게 Actions 로 체크하느냐에 대한 의문점이 생겼다.
그 방법은 바로 “Lint” 라는 것이다.
Lint Action - GitHub Marketplace
java 정적 코드 분석 lint tool 에는 checkstyle 이라는것도 있다고 한다.
언어 별로 Lint tool 이 있는것 같고
이러한 툴들을 사용하여 자동화된 CI 절차를 거치게 된다면, 코드 품질 개선에 도움이 될 수 있다는 것은 명확하다.
CD란 무엇인가
역시 CI 하면 CD얘기도 나와야한다.
배포라 함은 무엇이며
운영이라는 것은 무엇일까?
특히 개발자 측면에서 운영이라 함은, 무엇일까?
개발자측면에서의 운영은 전체적인 서비스 오류 해결 및 안정적 작동이 아닐까 싶다.
Ops 팀은 안정적 작동을 위한 전체적인 인프라 환경을 구성해주는 것이고,
개발자는 이 구성된 환경안에서의 서비스 동작을 파악하고 개선하는 방향이라고 본다.
말이 굉장히 헷갈릴 수 있는데
aws 로 예시를 들면,
vpc 나 az ,이중화 구성, HA, 오토스케일링, tgw .. 등 서비스가 돌아가기에 적합한 설계와 기본 환경을 구성해주는게 Ops 라면,
Dev는 이 모든 환경에 서비스를 띄우고, 예기치 못하게 발생하는 오류 등을 처리하며 트러블 슈팅을 진행하는 느낌..이라고 볼 수 있을 것이다.
어쨌든 개발자가 운영적인 측면까지 넘어가며 운영팀에 번거로이 업무를 전달하고 해달라고 요청하지 않아도 알아서 할 수 있게끔 환경과 문화 그리고 체계가 짜여져 있는 것을 DevOps라고 일컫는다.
사실 이야기 하다보니 DevOps == 개발자가 운영쪽까지 다한다.
이렇게 생각이 들기도 하는데,
음…운영팀이 필요없는 회사는
맞는말이기도 하다.
어쨌든 본론으로 돌아와서 CD를 얘기하자면
단순히 클라우드 서버에 올리는것을 넘어서
많은 툴이 있지만,
쿠버네티스와 argoCD를 이용하는것이 대표적이라고 한다.
이에 관한건 나중에 더 공부해서 다루어야 겠다.
어쨌든 이 모든 CI/CD 라는 과정은 백엔드 개발(그리고 개발이후의 운영)자에게
필요한 덕목이자 필수 요소라는 점은 명확하며
앞으로 백엔드 개발자가 무시할 수 없다고 본다.
난 백엔드 개발을 하고싶지는 않지만,
CI/CD에 관심이있는 한 작자로서.. 많은 친구들과 재밌게 공부하기를 소망한다,,,
'✍️2023 > Cloud' 카테고리의 다른 글
CI/CD - 프로젝트에 적용하기 - github Actions&NCP&GHCR 사용 (0) | 2023.09.15 |
---|---|
Cloud 서버에 Mysql 설치 (0) | 2023.09.09 |
Github Actions CI (gradle) (0) | 2023.09.09 |
2023 INFCON 후기(를 빙자한 필기 및 공부) - EKS 비용 절감 관련 세션 편 [k8s] 中 Karpenter 에 대하여 (3) | 2023.09.06 |