- 도구와 기술은 DevOps 문화에서 중요한 역할을 담당한다.
- 그러나 주의가 필요한 유일한 부분은 아니다.
- 스킬적인 부분이 많고, 파이프라인과 도구의 장점, 기술스택과 연동성, 프로젝트의 요구사항 등을 잘 고려해서 사용해야 한다.
1. Git (Version Control System)
- 모르면 취업 못함
- 코드의 버전을 이용해서 이전 버전까지 추적이 가능하고, 개발자의 협업에서 매우 중요한 역할을 한다.
- 많은 개발자가 동시에 작업이 가능하게 해준다.
- 소스코드 저장 서버가 있으므로 문제 발생 시 복구가 가능하다.
- 비선형 개발을 지원한다.
- 호환성이 좋다. 업계 표준이다.
- 툴킷 기반 설계이다.
- 다양한 병합기법(git branch strategy)을 지원한다.
2. SVN(Subversion) (Version Control System)
- Git과 양대산맥인데, 아주 오래되었고, 아직도 사용한다.(꼰대다)
- SVN은 중앙집중식 버전 관리고, Git은 분산 버전관리다.
- SVN과 Git의 다른 차이점들도 존재하는데, 다음과 같이 정리된다.
저장소 구조: SVN은 중앙 서버에 하나의 중앙 저장소를 사용하여 변경 이력을 관리하는 반면, Git은 개발자의 로컬 컴퓨터에도 저장소의 전체 변경 이력을 복제하여 저장합니다. 이로 인해 Git은 오프라인에서도 작업할 수 있는 이점이 있습니다.
분산 vs. 중앙집중식: SVN은 중앙집중식 시스템으로, 모든 변경 사항을 중앙 서버에 저장하고 공유합니다. 반면에 Git은 분산 시스템으로, 개발자들이 자신만의 로컬 저장소에서 작업한 후 원격 저장소와 동기화할 수 있습니다. 이로 인해 Git은 여러 개발자들이 병렬로 작업하고 변경 사항을 쉽게 병합할 수 있는 유연성을 제공합니다.
성능: Git은 대부분의 작업이 로컬에서 수행되므로 SVN보다 빠른 속도를 제공합니다. 또한, Git은 브랜치 관리와 병합 작업이 더 빠르고 쉽습니다.
브랜치 관리: Git에서 브랜치를 만들고 병합하는 것은 매우 간단하고 빠릅니다. 반면에 SVN에서 브랜치를 만들고 관리하는 것은 상대적으로 느리고 복잡할 수 있습니다.
데이터 무결성: Git은 내부적으로 SHA-1 해시를 사용하여 파일과 디렉터리의 무결성을 확인합니다. 이로 인해 데이터 손상의 가능성이 낮아집니다. SVN에서는 이러한 해시 기반의 무결성 검사 기능이 없습니다.
커밋 히스토리: Git은 커밋 히스토리를 효율적으로 저장하며, 이전 커밋으로 쉽게 되돌릴 수 있습니다. SVN에서는 파일을 되돌리는 과정이 복잡할 수 있습니다.
3. 빌드, 패키지매니저 도구
- Webpack
- npm/yarn
- gulp
등이 있다. (JS 기준)
4. 지속적인 통합(CI) 도구 - Jenkins 2
- 젠킨스2 는 자바로 만들어진 CI도구이며, MIT라이선스의 오픈소스 도구이다.
- 지속적인 통합과 지속적인 전달을 포함한 모든 자동화에 중점을 둔 자동화서버이다.
- 젠킨스는 애자일 환경에서 지속적인 통합서비스를 활용할 수 있도록 도와준다.
- 다양한 플러그인을 사용할 수 있다
- 소스코드관리(Git 등), 빌드 트리거(BuildFlow 등), 빌드 보고서(CodeScanner등), 인증과 사용자관리(GitHub OAuth등), 클러스터관리/분산빌드(AWS EC2, Azuer Slave등)가 포함된 플러그인 들이 있다.
- 젠킨스의 엄청난 장점 :
설치/업그레이드/설정이 쉽다
지원 플랫폼이 다양하다
개발 수명주기 프로세스를 관리/통제한다
자바가 아니어도 지원한다 : 닷넷, 루비, PHP, 드루팔, 펄, C++, Node.js, 파이썬, 안드로이드, 스칼라
자동화된 빌드에 의해 검증되는 일 단위 통합 개발 방법론
모든 커밋은 빌드를 트리거할 수 있다.
사용자가 CI/CD 구현을 가능하게 만드는 완전한 기능의 기술 플랫폼이다
CI/CD에 국한되지 않고, 쉘/윈도우 batch 명령 실행도 지원해서 전체 파이프라인에 대한 모델의 포함/오케스트레이션이 가능하다
개발팀과 운영팀이 효과적인 방법으로 협력하는 것을 돕는 공통언어 DSL 을 지원한다
젠킨스2는 GUI를 갖는다
젠킨스2는 실행을 위해 서블릿 3.1을 필요로 한다
빌드자동화, 테스트 자동화 테스팅, 패키징, 정적 코드 분석도 가능하다
앱 배포 파이프라인을 자동화한다. 형상관리도구 통합이 쉽다. 환경의 프로비저닝을 자동화한다.
머신에서 처리할 수 있는 원격 액세스 API를 갖는다
- 젠킨스는 갓갓갓이다.
5. 구성관리도구 - 셰프
- SCM(Softwrae Configuration Management, 소프트웨어 구성관리) 는 조직이 소프트웨어 구성 요소의 변경을 관리하는 데 사용되는 도구와 기법으로 구성된 소프트웨어 공학 분야이다.
- 기술적 측면, 의사소통, 프로젝트에 대한 변경 통제를 포함한다.
- 소프트웨어의 신뢰성과 품질을 향상시킨다.
- Chef는 인프라스트럭쳐를 코드로 변환하는 데 사용되는 구성 관리 도구다.
- Chef는 인프라스트럭쳐의 구축/배포/관리를 자동화한다.
- 재사용성을 기반으로, 레시피를 사용해 인프라스트럭쳐를 자동화한다.
- 레시피는 DB, WAS, 로드밸런스 구성에 필요한 지침이다.
- 레시피는 인프라스트럭쳐의 모든 부분과 구성, 배포, 관리되는 방법을 설명한다.
- 레시피는 자원을 알려진 빌딩 블럭으로 사용한다. 자원은 템플릿/패키지/설치되어야하는 파일과 같이 인프라의 일부로 설명된다.
- 레시피는 셰프 서버에 저장된다.
- 셰프 클라이언트는 주기적으로 최신 레시피와 노드가 레시피에 의해 정의된 정책의 준수 여부를 확인하기 위해 셰프 서버를 확인한다.
- 레시피가 오래된 경우 셰프 클라이언트는 레시피를 실행해 노드를 최신 상태로 만든다.
- 즉 종합하면, 프로그래밍 방식으로 자원의 프로비저닝과 구성을 자동화하고, 인프라스트럭쳐를 관리한다.
6. AWS와 Azure (클라우드 서비스 제공)
- 주기적으로 정책/ 서비스가 변화하고 업데이트 되므로, 공식문서와 정보들을 충분히 학습할 필요가 있다.
- AWS 는 자격증도 있다. 난 자격증 딸거다. 따면 뭔가 기부니가 좋을 것 같다.
다음 DevOps 시간에는 컨테이너 기술을 다룬다.
'개발 방법론 > DevOps의 개념' 카테고리의 다른 글
[DevOps] 도구와 기술 - 2 (0) | 2023.04.13 |
---|---|
[Jenkins] 설치 및 기본 문법 (0) | 2023.04.10 |
[DevOps] CI(지속적인 통합, Continuous Intergration) (0) | 2023.04.10 |
[DevOps] 용어정리 : 인프라스트럭쳐, 프로비저닝 (0) | 2023.04.07 |
[DevOps] DevOps의 이해 (0) | 2023.04.07 |
댓글