[KR-1912150] 모던 소프트웨어 개발, 배포 라이프사이클
last updated 2020-01-02
Last updated
Was this helpful?
last updated 2020-01-02
Last updated
Was this helpful?
1991년 11월 17일 Linus Torvalds님이 Linux를 최초로 릴리즈 하였고 이때당시 contribution 및 파일 시스템 tracking은 Bitkeeper를 사용하였으나 시간이 지남에 따라 Linux의 수많은 contribution을 효율적으로 처리 하기위한 distributed version-control system의 필요성이 대두되고 있었습니다.
이에 따라 크게 두가지 시스템이 개발되었는데
현재 공식적인 Linux Kernel distributed version-control system은 Git이 사용되고 있습니다.
이후 Git을 효과적으로 활용하는 방법에 대한 관심이 두드러졌는데 2015년 1월 5일, Vincent Driess은 https://nvie.com/에 A successful Git branching model 제목의 포스팅을 합니다.
해당 포스팅에서 왜 Git을 써야하는지(좋은지), branch를 어떻게 효과적으로 사용 할 수 있을지 여러 페이지에 걸쳐 상세히 설명하고 있는데 한 장으로 요약된 그림은 아래와 같습니다.
1994 년, Grady Booch는 객체 지향 분석 및 응용 프로그램과 디자인 (제 2 판)에서 연속 통합이라는 문구를 사용했습니다. In 1994, Grady Booch used the phrase continuous integration in Object-Oriented Analysis and Design with Applications (2nd edition)[7] - [Continuous integration wikipedia]
어느덧 소프트웨어 개발을 좀더 기민하게(agile) 하기위해 지속적인 통합(CI), 지속적인 배포(CD)는 필수 조건이 되었습니다.
이러한 시대적 요구에 따라 다양한 방법들이 시도 되었습니다만 개인적으로는 2011년 2월 2일 Jenkins의 등장이 CI/CD를 널리 보급하는데 큰 일조를 하지 않았나 생각합니다. 이후 많은 회사들이 CI/CD도입하기 시작하고 2015년~2016년쯤부터 CI/CD는 굉장히 일반화 되었습니다. 뿐만아니라 이제는 CI/CD를 위한 툴을 직접 설치, 운영 할 필요 없이 클라우드 레벨에서 도와주는 CI/CD tool들이 다양하게 존재합니다.
몇가지 유명한 툴들은 아래와 같습니다.
기본적인 흐름은 code repository에서 commit push이벤트 훅이 발생하면 CI/CD event를 trigger하는 방식입니다.
Github repository와(기타 git base repository) 사용자들이 주로 애용하던 CI/CD툴은 Jenkins또는 Circle CI였습니다만 최근(2019-08-08)에는 Github에서 Github Actions라는 이름으로 자체적으로 해결 할 수 있도록 기능을 추가였습니다. 따라서 이후 메인 CI/CD시장이 어디로 이동할지는 조금 지켜봐야 할 듯 합니다. (사실 어디여도 상관 없습니다, 편하면 됩니다)
더 자세한 내용은 별도의 포스트에서 다룰 예정입니다.
2019년 12월 현재 어느덧 위에서 언급한 Git flow, CI, CD는 모던 소프트웨어 개발을 위해 꼭 알아야만 하는 기반 지식입니다.
아래 그림은 제가 '모던 소프트웨어 개발, 배포 라이프 사이클'을 설명할 때 화이트 보드에 그리던 그림입니다. 대단한 내용은 아닙니다만 놀랍게도 인터넷에 없어 매번 화이트보드에 그려야 했습니다.
그래서 저와 여러분의 수고를 덜고자 최대한 정갈하게 그려보았으니 비 영리 목적으로 필요하신분은 출처를 명시하시고 마음껏 사용하셔도 좋습니다. 영리 목적인경우 저에게 문의 주시기 바랍니다. 건설적인 피드백은 언제나 환영합니다.
아래 파일을 클릭하면 고화질 파일을 다운 받을 수 있습니다.
software deployment - wikipedia
Continuous integration - wikipedia
Jekins - wikipedia
Linux - wikipedia
Git - wikipedia
Mecurial - wikipedia
이 글은 다수의 집단지성으로 작성, 수정, 개선 하였습니다.
개발_좀_아는_언니