[DevOps] 데브옵스란?
2023. 11. 28. 23:51ㆍProgramming/ETC
해당 글에서는 DevOps의 개념과 사용되는 도구와 기능 정리, 그리고 CICD를 다룰 예정이다.
[DevOps] 데브옵스란?
DevOps는 소프트웨어 개발과 운영의 협업이 합쳐진 것이다. 신속한 고품질의 서비스 제공을 통해 비즈니스 가치를 높이고 대응 능력을 개선하기를 목표로 접근하는 방식이다. 해당 방식은 빠르게 반복적으로 운영에서 등장하는 사항을 처리할 수 있는 능력과 IT서비스를 제공하는 역량이 있어야 가능하다.
결론적으로는 소프트웨어 제품이나 서비스를 효율적으로 개발, 배포, 운영을 위해 만들어진 방식이다.
DevOps의 핵심은 다음과 같다.
- 자동화
- CICD 파이프라인, 인프라 코드, 테스트 자동화
- CI - 개발자들이 코드를 중앙 리포지토리에 통합하고, 자동으로 빌드 및 테스트 실행하여 코드 통합 여부 확인
- CD - 진행이 된 코드를 자동으로 프로덕션 환경에 배포하거나 배포를 준비
- CICD 파이프라인, 인프라 코드, 테스트 자동화
- 협업과 커뮤니케이션
- 팀 간의 원활한 소통과 협력 및 지속적인 피드백을 통해 프로세스를 개선하고 배우는 문화 형성
- 개발팀, 운영팀 등의 각 부서간의 원활한 정보 공유를 통해 신속하게 문제를 해결
- 감시와 로깅
- 애플리케이션 및 시스템의 성능을 지속적으로 감시하고 로그를 수집
- 수집된 로그를 통해 빠르게 문제를 식별하고 해결
CICD
- CICD - Continuous Integration , Continuous Deployment/Delivery의 합성어
- 소프트웨어 개발 프로세스를 자동화 하여 지속적인 빌드, 테스트, 배포를 가능하게 하는 방법론이다.
- 빌드 (build) : 애플리케이션을 컴파일하는 단계
- 테스트 (test) : 코드를 테스트하는 단계 -> 해당 단계를 자동화하여 시간과 수고를 줄임
- 릴리스 (release) : 코드를 프로덕션에 배포하는 단계
- 검증 및 컴플라이언스 (validation & compliance) : 빌드 검증 단계는 해당 조직의 필요에 따라 결정
- CI - Continuous Integration
- 개발자가 개발한 코드가 중앙 리포지토리에 통합이 되면 자동으로 빌드 및 테스트가 수행되어 코드의 통합 여부 확인
- 해당 기능을 통해 개발자는 따로 통합한 후의 코드를 빌드 및 테스트하는 과정에서 시간을 줄일 수 있게 된다
- 팀 전체의 코드 품질을 유지할 수 있다.
- CD - Continuous Deployment / Delivery
- CI를 통과한 유효한 코드 변경이 프로덕션 환경에 배포되는 단계이다
- Deployment는 자동으로 모든 코드 변경을 프로덕션에 배포하는 것을 의미
- Delivery는 배포를 자동으로 준비하고 수동으로 활성화하는 단계를 포함한다
사용되는 도구 및 기능정리
DevOps 이루기 위해서는 위에서 보았던 그림과 같은 단계에 맞는 도구를 몇 개 정리하였다. 대상 도구는 jenkins, docker이다
젠킨스 - Jenkins
- CICD을 구현하기 위한 오픈 소스 자동화 도구
- 개발 프로세스에서 코드 통합, 빌드, 테스트, 배포를 자동화하여 개발자들이 소프트웨어를 더 신속하게 제공할 수 있도록 도움
- 자동화된 빌드, 테스트
- 코드가 변경이 될 때 자동으로 빌드 및 테스트 프로세스를 시작하여 통합 테스트를 통과하는지 확인
- CI
- 코드의 변경이 자주 통합되어 팀 내에서 코드의 품질을 유지할 수 있도록 도움
- CD
- CI를 통과한 코드를 자동으로 프로덕션 환경에 배포하거나 배포를 준비
- 플러그인 지원
- 다양한 플로그인을 지원하여 다양한 개발환경과 도구에 적용
- 사용자 요구에 맞게 유연하고 확장가능한 점을 특징으로 가지고 있다
- 자동화된 작업 스케줄링
- 특정 시간에 빌드 및 배포 작업을 예약하여 자동으로 작업 스케줄링을 지원
도커 - docker
- 애플리케이션 개발, 배송 및 실행을 위한 개방형 플랫폼
- 컨테이너라는 기술을 사용해서 인프라를 관리
- 컨테이너란?
- 이미지의 실행 가능한 인스턴스
- 생성, 시작, 중지, Docker API or CLI를 사용하여 컨테이너를 이동하거나 삭제
- 컨테이너를 하나 이상의 네트워크에 연결하거나, 스토리지에 연결하기 가능
- 이때 도커의 컨테이너는 기본적으로 독립적 환경에서 실행이 되기에 컨테이너 밖에서 접근할 수밖에 없음
- 컨테이너를 만들고, 시작하고, 정지하고, 이동하고, 삭제하는 API / CLI 제공
- 여러 컨테이너를 사용하여 애플리케이션 패키징 및 실행
- 애플리케이션의 환경을 일관성있게 유지 및 효율적 관리
- 이미지 실행
- 컨테이너란?
- Docker의 코드를 신속하게 전달, 테스트 및 배포하기 위해 방법론 존재한다.
- 코드 작성과 프로덕션 사이에서 실행의 지연시간을 단축시킨다.
- Image
- 애플리케이션읋 실행하기 위한 모든 것(코드, 런타임, 시스템 도구, 라이브러리 등)을 포함하는 패키지
- 이미지는 읽기 전용이며, 컨테이너를 실행하는데 필요한 모든 내용이 이미지로 구성
- 도커 레지스트리에서 이미지를 저장하고 공유도 가능하다
- Container
- 이미지를 실행한 가상 환경
- 격리된 공간에서 독립적으로 실행되며, 호스트 시스템의 자원을 공유
- 필요한 라이브러리 및 의존성을 이미지로부터 가져와 실행
- 이미지 빌드
- 도커의 이미지를 정의하고 빌드
- DockerFile이라는 텍스트 파일에 정의되며, 기본이미지, 애플리케이션 코드, 의존성, 설정 등이 명시
- 이미지 저장 및 배포
- 이미지를 빌드 한 뒤 해당 이미지를 저장하거나 공유
- 컨테이너 실행
- 저장된 이미지를 기반으로 도커 컨테이너를 실행한다.
- 실행이 된 컨테이너는 호스트와 독립적이며, 애플리케이션의 환경을 유지한다.
- 컨테이너 관리 및 모니터링
- 실행 중인 컨테이너를 모니터링
etc
cloud system
- 인터넷을 통해 컴퓨터 자원을 제공하는 기술
- 이를 통해 사용자는 자신의 컴퓨터에 접속하지 않아도 인터넷을 통해 접속이 가능함
- Iaas - Infrastructure as a Service
- 하드웨어 자원을 제공
- 사용자는 가상머신, 스토리지, 네트워킹과 같은 기본적인 컴퓨팅 리소스를 필요에 따라 확보
- ex : aws의 ec2 ( elastic compute cloud )
- Paas - Plaform as a Service
- 애플리케이션 개발 및 실행에 필요한 플랫폼을 제공
- 개발자는 서버나 인프라 관리에 대해 걱정할 필요 없이 애플리케이션 개발에 집중
- 플랫폼은 개발, 테스트, 배포 및 관리 지원
- ex : Google App Engine
- 개발자들이 애플리케이션을 빌드, 배포, 관리하기 위한 플랫폼을 제공
- 작성된 코드를 App Engine이 자동으로 확장하고 필요한 인프라를 관리하여 애플리케이션 실행
- Saas - Software as a Service
- 소프트웨어 애플리케이션을 인터넷을 통해 제공
- 소프트웨어에 대한 라이선스를 구입하지 않고도 웹 브라우저를 통해 해당 소프트웨어를 사용할 수 있음
- ex : microsoft 365
- 워드 프로세싱, 스프레드시트, 이메일, 켈린더 등의 비즈니스 애플리케이션을 온라인에서 사용가능
- Iaas - Infrastructure as a Service
- 장점
- 유연성과 확장성
- 필요에 따라 리소스를 신속하게 확장하거나 축소할 수 있다. 사용자의 요구에 따라 더 효율적으로 자원을 활용할 수 있는 장점을 제공한다.
- 비용 절감
- 클라우드 서비스를 이용하면 기업이나 개인은 자체적으로 인프라를 구축할 필요가 없어지며, 가상화된 자원을 필요에 따라 이용할 수 있어 비용을 절감할 수 있다.
- 편의성
- 클라우드 서비스는 어디서든 인터넷에 접속할 수 있는 환경에서 이용할 수 있기에 사용자는 언제 어디서나 필요한 서비스에 접근할 수 있다.
- 자동화된 업데이트 및 유지보수
- 클라우드 제공업체가 시스템의 유지보수, 업데이트, 보안 패치 등을 자동으로 처리해 주므로 사용자는 이에 대한 걱정이 줄어든다.
- 유연성과 확장성
- 단점
- 보안 문제
- 클라우드 시스템에서는 사용자의 데이터가 외부 서버에 저장되기 때문에 보안 문제가 주요 고려사항이다. 적절한 보안 조치를 취하지 않으면 데이터 유출의 위험이 존재한다.
- 의존성 및 가용성
- 클라우드 서비스의 가용성은 제공자의 서버 상태에 의존한다. 만약 클라우드 서비스 제공자의 시스템에 문제가 생기면 사용자도 영향을 받을 수 있다.
- 보안 문제
'Programming > ETC' 카테고리의 다른 글
[vscode] extensions (0) | 2023.12.20 |
---|---|
[Etc] 5.리눅스 편집기 (0) | 2023.08.08 |
[ETC] 4.서비스 관리 명령어 (0) | 2023.08.08 |
[ETC] 3.네트워크 관리 명령어 (0) | 2023.08.08 |
[명령어] - 사용자 및 파일 권한 관리 명령어 (0) | 2023.08.07 |