CI/CD 이건 왜?
Continuous integration , Continuous Delivery or Development
내가 개발을 시작한 20년전만 해도 CI/CD 이런 걸 현업에서 못들어봤어.
(물론 개념이 간단한거니까, 비슷하게 메뉴얼로 하긴 했지. 북박이 개발자가 컴파일하고 테스트 하고 ..
하지만 내가 말하고 싶은건 딱 CI/CD 라고 말도 안했고, 개념도 막 지금처럼 그러지 않았어
경력을 임베디드쪽으로 시작해서 웹이나 다른 어플리케이션쪽이 어땟었는지는 모르지만..내가 알기론 없어.
어딘가 인터넷을 뒤져보면, CI/CD 개념이 등장한건 1990년대이지만 널리 사용되고 툴이 많이 개발된거는 2010년 이후부터라네..
지금은 당연하게 느껴지는 것들이 생각해보면 얼마안된개념일수도..(고딩 3 때 삐삐 썼던걸 생각해보면, 기술이 정말 빨리 발전하는.. 아 내가 오래된건가..)
개념은 언제나 간단해. (그걸 실행하는 툴이나 방법이 많고 계속 복잡해져 보여서 그렇지)
CI: 모든 개발자가 버전관리에 코드를 올리자 마자 자동으로 컴파일이 되고 (물론 컴파일 환경도 같지. 예를들어 GITLAB 을 쓰면 동일한 러너가 쓰일꺼고.)
CD: 자동으로 테스트부서나? 자동화테스트장비나 툴이나 여튼. 딜리버리해서 확인하는거지 (CD 딜리버리라고도 , 디플로이라고도, 디벨로프라고도 하는데)
그럼 CI/CD 가 왜 이렇게 지금은 필수(?) 가 되었는지 설명해줄께.
예를 들어, 20년전 어느 회사에서 하나의 임베디드 제품개발에 100여명의 개발자가 있다고 하자.
물론 그 당시에도 버전관리 툴은 있었으니 (그때는 아이벰꺼 썻던거 같은데), 버전관리 툴에 올리기 전에
개발자 각자가 자기껀 확인하고(모두의 컴퓨터에 개발환경이 있었단거지) 버전관리 툴에 올렸을꺼야.
테스트부서에 하나의 프로그램으로 전달하던, 제품 출시를 위해 하나의 프로그램으로 만들던 여튼.
드디여 100명의 작업을 모아서 하나의 바이너리를 만들어야 할때가 온거야. 어떻게 했을까?
모두의 컴퓨터에 개발환경이 있다고 했지? 프로젝트 메니저가 100명의 개발자 중에 만만한 한명이 찍으면,
그 한 개발자의 컴퓨터에서 그 중요하고도 중요하고도 중요한 바이너리를 만들어.
지금 생각해보면 말이 좀 안되는데 여튼 그땐 그랬어.
여튼 프로그램은 만들어 지니까 (모로가던 서울로 가면 되니까) 목적은 달성 되지만, 딱봐도 뭔가 문제가 많을꺼 같지 않아?
(100명 개발자가 다 대기해야해! 언제까지? 바이너리 만들어질때까지. 결전의 날인거지)
여러문제점이 있을수 있지만,
1. 프로그램을 맨날 만들어야 하면 , 개발자 리소스 낭비가 심하고
2. 개발자 a 랑 개발자 b가 컴파일 환경이 혹시나 다르다면 프로그램 일관성관점에서 문제가 생기지
- 어떤경우엔 프린트문이 있고 없고에 따라서도 버그가 생기는데....;;;(이건쫌 딴얘기긴하네여튼) 컴파일러 버전이 달라서 인스트럭션 순서가 조금 바꼈다?
어떤 일이 일어날지는 아무도 모르지.
- 이런 문제 없애려고 개발서버를 이용하기도 했었어. (공식 릴리즈 프로그램은 무조건 개발서버에서 하기로.)
자! 저 예제를 통해서 왜 CI/CD 가 등장했는지 자연스럽게 이해가 가지?
다시개념반복.
CI: 모든 개발자가 버전관리에 코드를 올리자 마자 자동으로 컴파일이 되고 (물론 컴파일 환경도 같지. 예를들어 GITLAB 을 쓰면 동일한 러너가 쓰일꺼고.)
CD: 자동으로 테스트부서나? 자동화테스트장비나 툴이나 여튼. 딜리버리해서 확인하는거지 (CD 딜리버리라고도 , 디플로이라고도, 디벨로프라고도 하는데)
CI/CD 가 잘 도입되어있으면, 모든 개발자가 결전의 날에 바이너리하나 만들어서 보내겠다고 밤을 새는 일은 하지 않아도 된다는 거야
결전의 날같은게 필요가 없지. 코드 올라가자마자 다 컴파일되서 테스트 까지 자동으로 되니까. 언제 어떤 바이너리를 줘도(테스트가 다 된다는 가정하에)
준비완료 인거야.
(내 생각에는 이건, 나혼자 개발을 한다고 해도 셋업해 놓으면 도움은 되는거 같아
물론 혼자 셋업하는게 귀찮고 때론 이런거도 해야 하나 싶기도 하고, 설령 안해도 혼자서 하는거면 뭐. 조금 더 노가다 하면 되지만? 그래도 시간나면
함해보는거도 좋을듯. 이거해보는건 프로젝트가 아무리 작아도, 오버엔지니어링은 아닌듯. 한번씩들 해 보세요)
'소프트웨어 엔지니어 > 일반' 카테고리의 다른 글
| 소프트웨어 뭐지? (소프트웨어 엔지니어가 하는일?) (0) | 2024.08.21 |
|---|---|
| 소프트웨어 이해하기 어려운이유? (0) | 2024.08.21 |
| 모놀리틱 vs 마이크로서비스 아키텍쳐 (0) | 2024.08.20 |
| tcp/ip, http, ? 프로토콜 (protocol) ? (0) | 2024.08.19 |
| 윈도우7, 윈도우10, 리눅스 ? (0) | 2024.08.16 |