서론
면접을 가다보면은 객체지향, 함수형프로그래밍 ,SOLID, 클린코드 같은 프로그래밍 방법론적 질문들 뿐만아니라
DevOps에 일종인 도커, 쿠버네티스에 관해서도 많이 물어본다.. 아마 AWS를 이용해 백엔드개발자들이 MSA시스템을 구축으로 실시간으로 대용량 트래픽을 컨트롤하는것이 많기 때문에?? (추측일뿐.. 백수라) 이러한 질문들이 많은것 같습니다.
그 중에서도 얼마전에 CICD에 대한 질문을 받았는데 그냥 젠키스처럼 빌드 후 자동으로 배포하는 개념정도로만 대답했엇는데 한번 자세히 알아보려고합니다.
CI/CD까지 갈려면 뭔가 스토리가 필요합니다.
먼저 애플리케이션을 구동할 프로그래밍을 위해서 소스 코드를 개발자가 작성합니다. 작성했으면 이제 프로그래밍 돌아가는게 아닙니다.
각각 언어별로 맞는 컴파일러라는 녀석을 이용해서 단순 글자인 녀석을 당당한 어떠한 물건으로 만듭니다.
다른 블로그들을 참조해보니 C언어에서는 컴파일이라는 녀석을 이용해 단순 소스코드를 기계어로 번역하고 이 기계어를 모아서 하나의 실행파일을 만드는 행위를 빌드라고합니다.
그리고 이제 이 빌드된 파일을 나만 사용하는 것이 아니라 다른사람들과 함께 공유해야합니다. 이 과정을 우리는 배포라고합니다.
기계어 번역 -> 빌드 -> 배포
이러한 과정을 세분하 할 수 있지만 사실 위 세개의 과정을 빌드한다 라고 말해도 무방합니다. (사실 엄연히 말하면 다릅니다 ༼;´༎ຶ ༎ຶ`༽ )
서론이 길어젔는데 개발자는 소스코드를 작성하고 배포를 하는 과정을 자주합니다. 얼마나 자주하냐고요?? 새로운 버전, 오류들을 수정할 때마다 컴파일을 통해 빌드를하고 빌드를 통해나온 C언어에서는 exe, JAVA 에서는 jar파일을 만들어 사용자에게 서비스를 제공할 서버에 옮기뒤에 다시 실행해야하죠...
하지만 이것도 혼자할 때의 과정이고 수정한파일을 Git을 통해 머지리퀘스트를 신청후 적용이된다면 적용된 파일을 서버에 올려야하고 만약 서버에 환경설정이 없다면 새로 설치해서 환경을 맞춰준후 다시 배포를 해야하죠 ( 이과정은 Docker가 해줍니다.)
그래서 젠킨스라는 녀석이 나옵니다. Git에 올리기만 하면 알아서 바뀐 파일을 jar파일에 옮기고 자동으로 배포해주죠. 젠키스는 대단한게 아닙니다. 그냥 반복되는 매크로작업의 일종입니다. 사람이 그동안 하던걸 예약어를 통해서 하는 것이죠.
자이제 본론으로..
그래서 CI / CD 가 뭔데?
CI / CD 도 결국 개발 방법론 중에 하나이고 CI /CD 를 도와주는 것들이 젠킨스, 도커 , 쿠버네티스 같은 도구들입니다.
CI
지속적 통합(Continuous Integration) : 개발이 끝난 후 코드에대한 통합을 지속적으로 진행함으로써 품질을 유지하는 것
쉽게말해 이러한 여러 편리한 도구들 약속들을 통해서 소스코드들을 통합하는 것 퇴근하기전에 Git에 올려서 항상 최신버전을 유지한다던가 지속적으로 피드백을 해주는 것입니다!!!
CD
지속적 배포(Continuous Deploy) : 서버에 올리는 것
CI에 연장선에 항상 최신의 좋은 코드들을 서버에 배포하는 것입니다. 여러 개발 도구들 그리고 지속적인 피드백을 이용하여 좋은 코드들을 만들었다면 배포를 해야합니다.
결론 : CI / CD는 방법론이다. (면접때 내가 대답한것도 정답이였다.)
'개인공부' 카테고리의 다른 글
렌더링의 변화과정 (0) | 2021.02.13 |
---|---|
웹 렌더링 성능관련 키워드 (8) | 2021.01.25 |
HTML , CSS 깔끔하게 작업하기(Tip) (6) | 2021.01.22 |
시멘틱 마크업 간단한 정리 예제 (0) | 2021.01.14 |
Spring 버전별 정리 및 예제 (0) | 2021.01.12 |