DevOps 와 Ci/CD 에 대한 이해
Waterfall > 단계별로 수행되는 일의 모습 (계획 / 형식에 의존성이 큼)
요구사항정의 > 분석 / 설계 > 구현 > 테스트 > 운영 (이전 단계로 돌아가기가 상당히 어려움)
Agile > 의졵성을 줄임
프로젝트의 생명 주기 동안 반복적인 과정을 통해 SW 가 진화되고 사용자의 니즈를 만족시켜주는 과정.
(TDD, Scrum 등등이 포함)
> 문서화 / 절차를 중심적으로 했던 방향 --> 시시각각으로 요구 사항 변경이 생겼을 떄 반영해줄 수 있는 시스템으로 변경
> 요즘 나타나는 IT 에서는 Cloud, 가상화, MSA 등이 트랜드임.
>>>> 클라우드 네이티브 아키텍처란? :
>>> 클라우드에서 빌드되고, 클라우드 컴퓨팅 모델을 최대한 활용하여 워크로드를 디자인 / 생성 /운영하는 방식
>>> 컨테이너, MSA 등의 방식으로 동적환경에서 확장 가능한 앱을 빌드하고 실행할 수 있음
Cloud Native Application 의 구성요소
4가지 (MSA, Container, Devops, CI/CD)
1 - 앱이 Microservice 개발
2 - 앱을 구성하고 있는 MicroService 들을 클라우드 환경에 배포 /사용을 위해 컨테이너 가상화 기술이 사용
3 - 서비스에 문제가 발생했을 경우, 니즈가 추가되었을 경우, 바로바로 반영 / 배포를 위해 개발과 운영 조직간의 유기적인 협력을 통해 서비스를 개선해 나가는 방법론 - DEVOPS
4 - CI CD 자동화를 통해 통합되고 빌드 /테스트/ 배포 를 거친다.
====================1:44 그림 ====================
1. MSA - Inner Architecture, Outer Architecture 이 있음.
> 이너는 단순한 Domain, Buisness Logic 을 가지고 그냥 서비스 개발 쪽임
> 아우터 > 앱들이 운영되고 작동되기 위해 서포트 되는 시스템들 - CI / CD 자동화도 여기에 포함
>> 이번 강의에서는 개발된 앱에 대한 빌드하고, 배포하며 자동화 파이프라인을 구축하는 방식에 대한 강의
====================4:00 그림 ====================
2. Container 환경에 대한 사용
결과물은 컨테이너 기반의 가상화로 실행된다.
수많은 MSA 들을 가상화 방식이 아닌 서버를 통해서 기동하는 것은 리소스 낭비
(적은 리소스를 사용, 운영환경의 공유를 통한 자원 절약)
대표적으로 도커가 있음. (도커 파일을 통해서 이미지를 생성되고, 이미지를 통해 인스턴스(컨테이너) 를 빌드하게 된다)
> 환경을 Dev, Test, Prod 작업 환경을 토대로 환경이 구축될 수 있음. MSA 와 같은 여러 환경을 요구하는 개발론에서는 필수!
3. DevOps 에 대해
> Dev - 개발 / Op - 안전성 >> 이해관계의 충돌
> 서로 유기적인 통합. 시스템 개선을 위한 문화
> 인프라 코드관리(??) , 애자일 인프라(??), CI CD 도 뎁옵에서 강조하는 특징
====================7:00 그림 ====================
그림처럼 사이클을 반복하는것이 댑옵의 핵심. (각 단계별로 사용될 수 있는 툴들이 소개되어 있음)
Deploy / Operate - Docker, Vagrant, IoC 를 제공하는 Ansible과 Terraform
Monitor - Nagios, Fluentd 등
(9분 15 그림 선택)_
Gateway - AWS 제품, NGINX, 등
MSA 구성, 네트웤, 통신 (핵심) - Netflix Opensource, Istio, Consul 등 (이 쪽에 대해선 아예 아무것도 모르는듯)
Runtime (운영환경) - Docker, Docker 를 효율적으로 운영하기위한 Kubernetes
In App Framework (인앱 개발 프레임워크) - 스프링, 스프링 클라우드, 스프링 부트, 플라스크 등
Automation (자동화) - Maven, Jenkins, Ansible 등
Telemetry (모니터링, 로그 수집 등) - filentor
BackingService (백업 서비스) - 카프카, 레디스 등
이 강의에서는 도커, 쿠버넥, 메이븐, 젠킨, 앤시블 등을 사용해서 CI/CD 자동화를 학습해보려고 함.
==========================================================================
CI / CD 란?
CI - 작업된 코드 컴파일 / 테스트 / 패키징
CD - CI 에 의한 결과물을 개발 서버, 테스트 서버, 운영 서버에 배포하는 작업.
>> 작은 단위로 여러번 배포하는 방법을 통해 발생하는 문제점들에 대한 해결을 빠르게 하기 위함. (코드 품질 향상 - 단위 Test 지속 진행)
>> CI 의 역할 ( 마지막 화면 그림)
개발자들이 각자 개발한 코드에 대해서 SCM (형상관리 시스템, git) 에 업로드를 하게 됨. 같은 코드를 여러 사람이 관리하는 경우 형상관리가 필수. 사용할수 있는 오픈 소스는 깃헙, 깃랩, 빗벜 등 (깃랩같은 경우, 시스템에 직접 설치해서도 사용할 수 있음)
CI 의 대표적인 도구 >> Jenkins
>> 젠킨스는 빌드를 통해 test 및 패키징을 한다. 통과해야 빌드를 함
>> 패키지된 결과물을 운영측, 운영서버에 자동적으로 배포가 된다.
==========================================================================
Ci Cd Workflow
처음 그림 (3분 39에서 완성됨)
스프링 앱들은 Maven, Gradle 을 통해서 빌드를 한다
Docker 를 사용한 컨테이너들에 배포를 할 것인데, 이 때 오케스트레이션 도구인 쿱네를 사용할 것임.
(도커 데스크탑 같은 경우는 큰 기업에서 사용할 떄 라이센스가 필요함)
쿱네는 도커를 딱 찍어서 지원하는건 아니고, 도커의 코어가 container-d 로 되어 있다보니까 지원해주는 것임.
쿱네는 CNCF 라는 재단의 첫 작품. 거의 오케스트레이션 도구의 표준.
젠킨스, 쿱네 사이에는 ANSIBLE, TERRAFORM 등이 위치 (IAC 라는 부분)
>> 이 부분은 IaC, Infrastrcutre as Code
>> 서버에 인프라 관리를 스크립트로 하겠다, 코드로 하겠다는 뜻. (이뜻이였음..)
우선 로컬에서 구축했던 환경을 클라우드로 옮겨서 따로 또 환경이전을 시도해보도록 함.
--------- 3분 50 그림 -------
0. 자바 웹 앱을 만들 것임
1. 젠킨슨하고 메이븐을 연동해서 파이프라인을 구축할 것임. 패키징 된 것은 WAR 파일 일 것. (Jenkins 의 지속 작업)
2. 와르 파일을 톰캣 WAS 에 배포를 하거나, WAR 파일을 실행할 수 있는 환경을 Docker 로 구성후 Docker 로 배포할 수 있음.
------ 다음 그림 ------ 8분 30초 대 최종 그림 -------
배포를 할 때, 중간단계에 IaC 를 두어서, 파이프라인을 연결할 것임.
젠킨스 (패키징된 앱이 있음) >>> 바로 도커에 배포를 했었는데
이제는 IaC 시스템(앤시블, 테라폼) 을 거쳐서 도커 쪽으로 배포하려고 함.
여기까지가 CI 라고 보면 될 것 같고,
Ansible / Docker / Kubne 를 통해 안시블이 이미지를 만들고, 이미지를 도커엣 땡겨서 최종적으로 배포되는 모습을 CD 측이라고 보면 된다.
================================================= 정리할 때는 이 강의 (포스트에선) 뭘뭘 할거다 이런건 필요 없고, 그냥 CI CD 툴들에 대한 소개만 하면 될듯
대부분 Linux 환경에서 사용하는게 좋음. (왜 리눅스를 사용하는가? 도 좋은 생각해볼 주제일듯)
----------------------------------------------------- Jenkins 소개
말했듯이 Git과 연동되어 Build / Test / Deploy / 의 과정을 지원해줌.
-Maven, Gradle 등의 Build Plugin 사용 가능 (플러그인, 통합 등에 대해서는 제일 우수한 툴)
- Git 같은 SCM 과 연동 가능
- Java, Python 등의 언어 Plugin 사용 가능
- 오픈소스, 무료는 젠킨스 뿐임
----4분 30초 그림 ----
DEV Test (Unit, Integration 등) 이후 제품 테스트 UAT 단계가 있음. 실 제품 사용 및 유저 테스트임.
> 그 이후로 디버깅 진행 및 Prod 배포.
>> CI CD 작업은 각 단계를 자동으로 넘어가게끔 구성해준다
>> 작업 기본 단위를 Item 으로 만들어지게 되는데 --> Item 여러 개를 묶어서 PipleLine 이라는 것을 만들 수 있음.
>> DSL (Domain Specific Lang) 이란 스크립트를 통해서 Pipeline 을 만들고, 그걸로 Jenkinsfile 로 병합된다.
>> 젠킨스 파일은 선언형 / 스크립트형이 있음.
---- 이런 것들을 할거임~~
'웹 운영 > 운영 구축' 카테고리의 다른 글
| RaspberryPi + Cloudflare 서비스로 LAN 내에서 서버 구축하기 (1) | 2024.09.30 |
|---|