[DevOps] 데브옵스란?

2023. 11. 28. 23:51Programming/ETC

 

해당 글에서는 DevOps의 개념과 사용되는 도구와 기능 정리, 그리고 CICD를 다룰 예정이다.

 

[DevOps] 데브옵스란?

 

 DevOps는 소프트웨어 개발과 운영의 협업이 합쳐진 것이다. 신속한 고품질의 서비스 제공을 통해 비즈니스 가치를 높이고 대응 능력을 개선하기를 목표로 접근하는 방식이다. 해당 방식은 빠르게 반복적으로 운영에서 등장하는 사항을 처리할 수 있는 능력과 IT서비스를 제공하는 역량이 있어야 가능하다.

devops = development + operation

 

결론적으로는 소프트웨어 제품이나 서비스를 효율적으로 개발, 배포, 운영을 위해 만들어진 방식이다. 

 

DevOps의 핵심은 다음과 같다.

  • 자동화 
    • CICD 파이프라인, 인프라 코드, 테스트 자동화 
      • CI - 개발자들이 코드를 중앙 리포지토리에 통합하고, 자동으로 빌드 및 테스트 실행하여 코드 통합 여부 확인
      • CD - 진행이 된 코드를 자동으로 프로덕션 환경에 배포하거나 배포를 준비
  • 협업과 커뮤니케이션
    • 팀 간의 원활한 소통과 협력 및 지속적인 피드백을 통해 프로세스를 개선하고 배우는 문화 형성
    • 개발팀, 운영팀 등의 각 부서간의 원활한 정보 공유를 통해 신속하게 문제를 해결
  • 감시와 로깅
    • 애플리케이션 및 시스템의 성능을 지속적으로 감시하고 로그를 수집
    • 수집된 로그를 통해 빠르게 문제를 식별하고 해결

 

 

CICD

 

  • CICD - Continuous Integration , Continuous Deployment/Delivery의 합성어
    • 소프트웨어 개발 프로세스를 자동화 하여 지속적인 빌드, 테스트, 배포를 가능하게 하는 방법론이다.
    • 빌드 (build) : 애플리케이션을 컴파일하는 단계
    • 테스트 (test) : 코드를 테스트하는 단계 -> 해당 단계를 자동화하여 시간과 수고를 줄임
    • 릴리스 (release) : 코드를 프로덕션에 배포하는 단계
    • 검증 및 컴플라이언스 (validation & compliance) : 빌드 검증 단계는 해당 조직의 필요에 따라 결정
  • CI - Continuous Integration
    • 개발자가 개발한 코드가 중앙 리포지토리에 통합이 되면 자동으로 빌드 및 테스트가 수행되어 코드의 통합 여부 확인
    • 해당 기능을 통해 개발자는 따로 통합한 후의 코드를 빌드 및 테스트하는 과정에서 시간을 줄일 수 있게 된다
    • 팀 전체의 코드 품질을 유지할 수 있다.
     

git action - CI with Gradle

 

  • 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
    • 이미지를 실행한 가상 환경
    • 격리된 공간에서 독립적으로 실행되며, 호스트 시스템의 자원을 공유
    • 필요한 라이브러리 및 의존성을 이미지로부터 가져와 실행

  1. 이미지 빌드
    1. 도커의 이미지를 정의하고 빌드
    2. DockerFile이라는 텍스트 파일에 정의되며, 기본이미지, 애플리케이션 코드, 의존성, 설정 등이 명시
  2. 이미지 저장 및 배포
    1. 이미지를 빌드 한 뒤 해당 이미지를 저장하거나 공유
  3. 컨테이너 실행
    1. 저장된 이미지를 기반으로 도커 컨테이너를 실행한다. 
    2. 실행이 된 컨테이너는 호스트와 독립적이며, 애플리케이션의 환경을 유지한다.
  4. 컨테이너 관리 및 모니터링
    1. 실행 중인 컨테이너를 모니터링

 

 

etc

 

cloud system

  1. 인터넷을 통해 컴퓨터 자원을 제공하는 기술
  2. 이를 통해 사용자는 자신의 컴퓨터에 접속하지 않아도 인터넷을 통해 접속이 가능함 
    1. Iaas -  Infrastructure as a Service
      1. 하드웨어 자원을 제공
      2. 사용자는 가상머신, 스토리지, 네트워킹과 같은 기본적인 컴퓨팅 리소스를 필요에 따라 확보
      3. ex :  aws의 ec2 ( elastic compute cloud )
    2. Paas - Plaform as a Service 
      1. 애플리케이션 개발 및 실행에 필요한 플랫폼을 제공
      2. 개발자는 서버나 인프라 관리에 대해 걱정할 필요 없이 애플리케이션 개발에 집중
      3. 플랫폼은 개발, 테스트, 배포 및 관리 지원
      4. ex : Google App Engine
        1. 개발자들이 애플리케이션을 빌드, 배포, 관리하기 위한 플랫폼을 제공
        2. 작성된 코드를 App Engine이 자동으로 확장하고 필요한 인프라를 관리하여 애플리케이션 실행
    3. Saas -  Software as a Service
      1. 소프트웨어 애플리케이션을 인터넷을 통해 제공
      2. 소프트웨어에 대한 라이선스를 구입하지 않고도 웹 브라우저를 통해 해당 소프트웨어를 사용할 수 있음
      3. ex : microsoft 365
        1. 워드 프로세싱, 스프레드시트, 이메일, 켈린더 등의 비즈니스 애플리케이션을 온라인에서 사용가능
  3. 장점
    1. 유연성과 확장성
      1. 필요에 따라 리소스를 신속하게 확장하거나 축소할 수 있다. 사용자의 요구에 따라 더 효율적으로 자원을 활용할 수 있는 장점을 제공한다.
    2. 비용 절감
      1. 클라우드 서비스를 이용하면 기업이나 개인은 자체적으로 인프라를 구축할 필요가 없어지며, 가상화된 자원을 필요에 따라 이용할 수 있어 비용을 절감할 수 있다.
    3. 편의성
      1. 클라우드 서비스는 어디서든 인터넷에 접속할 수 있는 환경에서 이용할 수 있기에 사용자는 언제 어디서나 필요한 서비스에 접근할 수 있다.
    4. 자동화된 업데이트 및 유지보수
      1. 클라우드 제공업체가 시스템의 유지보수, 업데이트, 보안 패치 등을 자동으로 처리해 주므로 사용자는 이에 대한 걱정이 줄어든다.
  4. 단점
    1. 보안 문제
      1. 클라우드 시스템에서는 사용자의 데이터가 외부 서버에 저장되기 때문에 보안 문제가 주요 고려사항이다. 적절한 보안 조치를 취하지 않으면 데이터 유출의 위험이 존재한다.
    2. 의존성 및 가용성
      1. 클라우드 서비스의 가용성은 제공자의 서버 상태에 의존한다. 만약 클라우드 서비스 제공자의 시스템에 문제가 생기면 사용자도 영향을 받을 수 있다.

'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