공부/기타

DevOps 정리

완이버스 2023. 12. 20. 22:50
DevOps란? - Development + Operation 의 합성어, 소프트웨어 개발 및 IT 운영의 두 가지 영역 간의 협력과 커뮤니 케이션을 강조하는 문화, 철학, 방법론을 나타냄

 

주요 특징

1. 자동화 : 자주 반복적으로 해야하는 작업들을 자동화 시켜 효율성을 증가함

 

2. 협업 및 커뮤니케이션 강조 : 기존 개발에서는 개발팀과 운영팀의 의견갈등으로 인한 문제점을 해결하고자 개방적인 커뮤니케이션을 중시

 

3. 모니터링 : 시스템을 상태를 상시 모니터링하고, 로그도 기록하여서 빠른 대응 강조

 

4. 보안 : 개발 초기에 DevSecOps라고도 하여 보안을 중요시함

 

주요 구성 요소

CI ( Continuous Integration) : 지속적 통합을 뜻하며, 코드의 변경이 이루어질 때 자동으로 빌드 및 테스트를 수행하여 소프트웨어 품질 유지 및 향상

 

CD ( Continuous Deployment ) : 변경 사항이 테스트를 통과하면 자동으로 프로덕션 환경으로 배보되는 것

 

IaC ( Infrastructure as Code ) : 인프라를 코드로 관리하여 확장성 있고, 자동화된 인프라 구축을 가능하게 하는 방식

 

주요 이점

1. 지속적 통홥과 지속적인 배포를 통해서 개발 프로세스를 줄이고 새로운 기능 또한 빠르게 도입 할 수 있음

2. 자동화 기술을 적용하여 오류를 줄이고 생산성 향상

3. 상시 모니터링을 하여 장애 및 예외사항 발생시에 빠르게 대처할 수 있음

4. 안전성과 신뢰성을 향상할 수 있다.

 

유용 툴

CI ( Continuous Integration )

개발 - 버전관리가 중요하기에 대표적으로 사용되는 툴에는 Git,Github,GitLab 그리고 Bitbucket이 버전관리에 사용됨

통합 - 각 개발자들이 작성한 코드를 통합하는 과정에서 발생되는 충돌문제와 테스트를 위해 사용되는 도구에는 Jenkins로 오픈소스 CI/CD도구가 쓰인다. 그밖에도 Travis CI는 Github와 연동된다는 장점을 가지고 있다.

저장 - 소스코드 저장소로 앞써 말한 Gitbub, Bitbucket도 사용되고 아티팩트 저장 및 관리를 위해 Artifactory, Nexus Reopsitory Manager가 사용된다

빌드 - Java 프로젝트인 경우에는 Maven이 있고 빌드 자동화 및 의존성 관리를 도와준다. 또한 Gradle은 다양한 언어를 지원하고 다양한 옵션을 지원한다.

테스트 - 유닛 테스트, 통합 테스트등을 수행하는 목적으로 JUnit, pytest등은 단위 테스트를 지원하고 Selenium은 웹 개발에서 자동화 테스트를 수행한다.

 

CD ( Continuous Deployment )

테스트 - 유닛 테스트, 통합 테스트등을 수행하는 목적으로 JUnit, pytest등은 단위 테스트를 지원하고 Selenium은 웹 개발에서 자동화 테스트를 수행한다.

배포 - Beta Test와 같이 실제 환경에서 실행 가능한지 확인 목적으로 Docker, Kubernetes가 있고 서버 환경 테스팅에서는 Puppet, Ansible이 사용된다

운영 - 모니터링을 목적으로 Prometheus, ELK Stack등 다양한 도구들로 로그 분석, 이벤트 식별, 지표 분석등의 역할을 수행한다.

감시 - 성능 및 가용성을 보장하기 위해 New Relic, Datadog, Nagios의 툴이 프로그램 모니터링을 위해 사용된다.

 

컨테이너 ( Container )

앞써 CD단계에서 사용되는 배포 툴로 Docker가 사용된다고 했는데 이는 대표적인 컨테이너 기반 가상화 환경을 지원하는 툴이다. 컨테이너는 소프트웨어를 실행하는 데 필요한 모든 정보들을 포함하는 환경을 뜻함.

이는 모든 운영체제 수준에서 동작하며 보다 VMware, Virtual Box오나느 다르게 가볍고 동작이 빠르다는 특징이 있음

 

주요 특징

1. 휴대성 : 모든 종속성이 포함되어 이식성이 높아 다양한 환경에서도 일관된 동작을 수행할 수 있음.

2. 이미지 : 컨테이너 생성시 사용되는 소스이며 이는 애플리케이션, 라이브러리, 종속성 및 환경 설정 정보를 포함함.

3. 오케스트레이션 : 여러개의 컨테이너를 보다 효율적으로 관리하고 스케일링 하는데 사용됨.

4. 마이크로서비스 아키텍처 : 컨에티너는 각각의 서비스를 독립저그올 패키징 하고 배포할 수 있어 다양하게 사용됨

 

이러한 특징들을 보유하고 있고 개발, 테스트 , 배포 단계에서 DevOps과정에서 다양한 이점을 지원하고 소프트웨어 개발 주기를 단축시켜먼서 확장성을 제공함.

 

Cloud Computing

정의 : 인터넷을 통해 컴퓨터 시스템 및 서비스에 대한 접근을 제공하는 기술

이는 전통적인 로컬 서버 및 데이터 센터에 의존성을 줄이고 필요 resource를 on-demand로 제공하고 소비자는 필요만큼의 resource만 사용하고 그에 맞는 비용을 지불하는 형태

 

특징으로는,

1. On-demand service - 사용자는 자신이 필요한 리소스를 직접 관리하고 provisioning할 수 있음

2. Broad Network Access - 인터넷을 통해 자유로운 접근이 가능하고 다양한 디바이스에서 사용 가능

3. Rapid Elasticity - 수용에 따라 리소스를 늘리거나 축소할 수 있다.

 

IaaS ( Infrastructure as a Service )

가상화된 컴퓨팅 resource를 제공하여 사용자가 필요한 양만큼의 infra를 사용하게 해주는 서비스. 하드웨어 자원부터 네트워크, 가송화 서비스를 제공하고 사용자는 이를 직접 관리 할 수 있음

특징

1. 자동 확장과 축소 : 수요에 따라 자동으로 컴퓨팅 리소스를 확장하거나 축소할 수 있음. 그에따라 탄력성이 부과되어 트래픽이 과도하게 몰릴때 유연하게 리소스를 늘려 서버가 마비되거나 다운되는 경우를 예방할 수 있다.

2. Storage : 필요한 만큼의 가상 디스크를 사용하고, 데이터와 관련된 많은 기능등을 사용할 수 있다.

3. Network : 가상 네트워크를 생성하고 관리할 수 있으며, 방화벽, load balancer등의 네트워크 기능을 사용할 수 있다.

 

IaaS 제공 서비스 기업으로는 Amazon Web Services(AWS)의 EC2, Microsoft Azure의 Virtual Machines, Google Cloud Platform(GCP)의 Compute Engine등이 있음

 

PaaS ( Platform as a Service )

응용 프로그램을 개발, 테스트, 배포 관리하기 위한 플랫폼을 제공하는 서비스. 개발자가 애플리케이션 코드를 작성하고 실행하는 데 필요한 환경을 제공.

특징

1. 애플리케이션 개발 및 실행 환경 제공 : PaaS는 프로그래밍 언어, 라이브러리, 프레임워크, 런타임 등을 포함한 개발 및 실행 환경 제공.

2. 자동 확장 및 관리 : 수요에 따라 자동 확장 및 축소하여 성능 최적화. 로깅, 모니터링, 백업, 보안 업데이트 등과 같은 관리 작업을 자동으로 처리

3. 개발 생산성 증대 : 다수의 개발자 협업하고 소프트웨어 개발 프로세스를 효율적으로 관리할 수 있도록 하는 엽업 도구 및 개발 생산성 도구 제공

 

PaaS 제공 서비스 기업으로는 Heroku, Google App Engine, Microsoft Azure App Service, AWS Elastic Beanstalk등이 있음. PaaS로 애플리케이션의 코드 작성과 관리에 집중할 수 있어 개발 생산성을 높일 수 있음.