IT STUDY LOG

[개발 프로세스와 DevOps 업무 개요] 01. 개발 프로세스 본문

devops bootcamp 4/서비스 운영 기초

[개발 프로세스와 DevOps 업무 개요] 01. 개발 프로세스

roheerumi 2023. 3. 7. 15:07

# 학습 목표

  • 개발 프로세스
    • 애플리케이션 배포가 어떤 의미인지 설명할 수 있다.
    • 전통적인 소프트웨어가 사용자에게 도달하기까지 어떤 과정을 거치는지 설명할 수 있다.
    • 현대의 웹 서비스가 사용자에게 도달하기까지 어떤 과정을 거치는지 설명할 수 있다.
    • CI/CD 파이프라인에서의 지속적 통합, 지속적 전달, 지속적 배포가 무엇인지 정의할 수 있다.
      • CI/CD 파이프라인에서 각 단계의 순서를 기억할 수 있다.
    • DevOps라는 개념이 어떻게 생겨났는지 배경을 이해할 수 있다.
    • DevOps의 범위가 무엇인지 이해할 수 있다.

 


# 학습 내용

1.  애플리케이션 배포

  • 설치형 애플리케이션과 웹 애플리케이션
  설치형 애플리케이션 웹 애플리케이션(Saas)
특징 - PC, 서버 등 물리적인 하드웨어 필요
- 하드웨어, 소프트웨어 구매 필요
- 하드웨어 불필요
- 네트워크를 통해 물리적인 자원을 논리적인 자원으로 가상화하여 제공
장점 - 커스터마이징 가능
- 높은 수준의 보안
- 설치 간편
- 유지보수 쉬움
- 진입 장벽이 낮음
단점 - 설치 어려움, 플랫폼 종속적
- 유지 보수 어려워 지속적인 업데이트 필요
- 높은 초기 비용
- 비즈니스 환경 변화에 따라 설비 교체 부담
- 데이터 노출, 보안 우려
- 네트워크 의존
비고 - 분류: 로그인 타입, API 타입
출처 : https://it.donga.com/25782/

 

  • 웹 호스팅 서비스와 클라우드 서비스
  웹 호스팅 서비스 클라우드 서비스
이용방식 호스팅 업체의 서버 중 일부(공간)만 임대하여 사용 호스팅 업체의 가상 서버를 단독으로 사용
단 몇 분만에 서버 생성 후 바로 사용
장점 서버 및 인프라 구축 필요 없음
가격 저렴
서버 관리에 대한 직접 권한을 가짐
사용자가 필요할 때 자유롭게 서버 확장/축소 가능
서버 호스팅과 비교해서 서비스 스펙도 마음대로 조절 가능
이용한 만큼 과금하는 후불제로 경제적임
단점 단독 서버 사용자에 비해 자원 사용량이 제한되고 서버 관리 권한이 없음 하나의 프로그램에 이상이 생기면 연결된 다른 프로그램도 영향을 받음(이중화, 백업으로 커버 가능)
주 사용자 회사 홈페이지, 커뮤니티, 블로그 등 소규모 웹사이트 운영에 주로 사용 게임, 일시적 이벤트, 개발 테스트 등 접속자가 유동적일 때 주로 사용(주로 스타트업)
출처 : https://library.gabia.com/wp-content/uploads/2016/03/%EC%A0%95%EB%B3%B4%EC%82%AC%EC%9D%B4%ED%8A%B8-%ED%98%B8%EC%8A%A4%ED%8C%85003.jpg

 

2. 서비스가 사용자에게 도달하기까지

  • 클라우드 컴퓨팅
    • 클라우드 컴퓨팅 개요 및 특징
      • 개요
        • rental, on demand 개념
        • 필요한 만큼 빌려서 사용
        • 실시간 확장성 지원
        • 사용한 만큼 비용 지불
      • 특징
        • 이용자가 필요한만큼 자원을 가상화된 형태로 인터넷을 통해 제공받음
        • 가상화
          • 개념: 클라우드 컴퓨팅의 핵심 기술로 물리적인 IT 자원을 동시에 다수의 논리적인 IT 자원으로 사용할 수 있는 기술
          • 종류: 데스크톱 가상화, 어플리케이션 가상화, 스토리지 가상화, 서버 가상화, 네트워크 가상화
    • 전통적인 IT 환경
      • IT 자원을 직접 구매하여 전산실/센터에  보관, 설치
      • 관련 S/W 구입 및 설치
      • 원활한 서비스 제공을 위해 서비스에 필요한 최대치를 고려해 자원을 구매 (유휴 낭비)
      • 유지보수 비용 큼
    • 클라우드 컴퓨팅과 전통적인 소프트웨어 전달 방식 비교
  클라우드 컴퓨팅 온프레미스
장점 비용 - 필요한 만큼 비용 지불
- 규모의 경제
- 초기 비용이 저렴
- 추가적인 하드웨어 구입비용 없음
- 운영이 장기화됨에 따른 비용 상승이 제한적
- 유지보수 비용 외의 추가비용 적음
보안 - 서비스 제공 업체에 의한 보안시스템 기본 제공 - 높은 수준의 보안시스템 구축 가능
- 보안시스템의 전체권한 사용 가능 및 조작 용이
사용자화 - 선택적 사용자화로 인해 안정성 증진
- 서비스 제공 업체로부터 지속적 업데이트 제공
- 사용자의 요구대로 구축 가능
구현 - 시스템 구현 시간이 길게 소모되지 않음 - 시스템 구성 및 제어 용이
성능 - 손쉽게 고성능의 시스템 구축 가능 - 저렴한 비용으로 고속의 private 네트워크 구축 가능
- 빠른 응답 속도
단점 비용 - 클라우드 시스템을 익혀야하는 학습 비용
- 데이터 증가에 따른 추가적인 비용 상승 가능성
- 데이터 이동 시 발생하는 과도한 비용
- 실물 장비 부재로 인해 사용 중단시 투입된 비용 소멸
- 초기 구축 비용이 큼
- 불필요한 비용과 유휴 자원 낭비
- 추가적인 장비 유지 보수 비용 발생
보안 - 서비스 제공자가 SPoF
- 서비스 제공업체의 보안시스템 침해 사고 발생 시 동일한 피해 발생
- 데이터의 간접보유로 인한 통제성 상실 우려
- 제한적인 보안 시스템 사용
- 조직 보안 수준에 따라 보안성이 갈리는 만큼 보안 수준이 낮은 조직의 경우 보안성이 떨어짐
사용자화 - 기본적으로 제공되는 커스터마이즈 사안이 적음 - 사용자화에 걸리는 소요시간 만큼 시스템 구현시간 지연
- 권장사항을 따르지 않는 과도한 사용자화의 경우 벤더 서비스 적용시 문제 발생 가능성 있음
구현 - 온프레미스보다 복잡한 인프라 체계
- 서비스 제공 업체 제품에 핸들링 가능한 기술인력이 시장에 적음
- 시스템 구축에 많은 시간이 소요
성능 - 시스템 성능이 WAN 구간 네트워크 대역폭에 절대적인 영향을 받음
- On-premise에 비해 늦은 응답속도
- 인프라가 외부와 단절되어 있거나 통신 환경이 열악한 곳에서는 이용할 수 없음
- 고성능 시스템 구축 시 비용 부담 발생
출처 : 알기사 정보보안기사 필기 교재, https://velog.io/@allzeroyou/%EC%98%A8%ED%94%84%EB%A0%88%EB%AF%B8%EC%8A%A4On-premise%EC%99%80-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9CCloud%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90, http://mdic.kr/review/review/view/1379

 

3. CI/CD 파이프라인과 Stage

  • 지속적 배포(CI/CD 파이프라인)
    • 지속적 통합 + 지속적 전달
    • 모든 코드이 변경이 배포로 이어지는 것이 핵심
    • 아래 과정(Stage) 싸이클의 반복
      • Plan: 계획
      • Code: 개발자가 코드를 코드 저장소에 push
      • Build: 코드 저장소로부터 코드를 가져와 유닛 테스트 후 빌드
      • Test: 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는 지 확인
      • Release: 배포 가능한 소프트웨어 패키지(artifact) 작성(배포에 적합한 빌드 선정)
        • cf. 출시 : 상품이 시장에 나오거나 내보냄, 릴리즈와 혼동 X
      • Deploy: 프로비저닝 진행 후 서비스를 사용자에게 노출
      • Operate: 서비스에 생길 수 있는 현황 파악 및 문제 감지
지속적 통합 지속적 전달
- Code, Build, Test 과정의 반복
- 버그 조기 발견, 테스트 완료된 코드의 빠른 전달, 지속적 배포가 가능
- Test, Release, Deploy, Operate 과정의 반복
! Check Point !
- CI/CD 과정을 순차적으로 기술
> 소프트웨어 계획, 분석, 설계 후 구현하고, 코드를 단위 테스트 후 하고 빌드, 통합 테스트 진행 후 릴리즈, 릴리즈 후 배포하고, 현황 관제 및 문제 감지

- 각 단계(Stage)에서 실행하는 행위(Action) 
> 계획 - 목적을 수행하기 앞서 방법이나 절차 등을 미리 생각하여 계획
> 코드 - 코드 개발 및 검토, 버전 관리 도구, 코드 병합
> 빌드 - 지속적 통합(CI) 도구, 빌드 상태
> 테스트 - 테스트 및 결과가 성능을 결정
> 패키지 - 애플리케이션 디플로이 이전 단계
> 릴리스 - 변경사항 관리, 릴리스 승인, 릴리스 자동화
> 구성 - 인프라스트럭처 구성 및 관리, IaC(Infrastructure as Code) 도구
> 모니터링 - 애플리케이션 성능 모니터링, 최종 사용자 경험.

4. DevOps

  • 소프트웨어 조직의 팀 구성과 목표
    • 개발팀 + 운영팀
개발팀(Dev)의 목표 운영팀(Ops)의 목표
- 잦은 배포 + 업데이트
- 애플리케이션을 통해 쉽고 빠르게 새로운 기능을 제공
- 프로덕션 앱(고객이 사용하는 안정적인 공식 출시 버전)의 안정성
- 애플리케이션이 아닌 인프라 관리
- 모니터링 및 제어
! Check Point !
- Dev팀과 Ops팀의 목표에서 상충되는 부분
>

- 안드로이드 앱 버전 기준에 따르면, 각 버전은 어떻게 다른지, 어떤 버전이 가장 안정적이라고 볼 수 있는지
>
  • DevOps
    • 정의: 소프트웨어 배포 속도를 높이고 서비스 안정성 개선, 조직 역량 강화를 위한 조직적, 문화적 방법론
  Amazon Web Service Microsoft Azure
정의 - DevOps란 "모델"
- 애플리케이션, 서비스를 빠른 속도로 제공할 수 있도록 조직 역량을 향상시키는 문화 철학, 방식, 도구 조합
- DevOps 모델을 통해 기존 방식보다 제품을 더 빠르게 혁신, 개선 가능
- 개발(Dev)과 운영(Ops)의 합성어
-고객에게 지속적으로 가치를 제공하도록 지원하는 사람, 프로세스 및 기술의 집합
- 개발, 운영, 품질, 보안을 통합해 안정적이고 신속하게 제품을 제공
작동 방식 - 개발팀과 운영팀이 단일팀으로 병합되어 전체 애플리케이션 수명 주기에 걸쳐 작업
- 프로세스 자동화
- 애플리케이션을 안정적이고 빠르게 운영, 개선하는 기술 스택, 도구 사용
- 코드 배포, 인프라 프로비저닝과 같이 작업을 다른 팀의 도움 없이 독립적으로 수행 가능
- 계획: DevOps 팀들이 빌드하려는 애플리케이션과 시스템의 특징 및 기능에 대한 아이디어를 도출하고, 이를 정의하고, 기술
- 개발:  코드를 작성하고, 검토하고, 통합하는 코딩의 모든 측면과 이 코드를 다양한 환경에 배포할 수 있는 빌드 아티팩트로 빌드하는 작업(자동화)
- 제공: 일관성 있고 안정적인 방식으로 프로덕션 환경에 애플리케이션을 배포,환을 구성하는 기본 인프라 배포 및 구성 작업 포함(자동화)
- 운영: 프로덕션 환경에서 애플리케이션을 관리, 모니터링 및 문제 해결
장점 - 작업 속도 향상
- 릴리즈 빈도, 속도 개선을 통한 신속한 제공
- 애플리케이션 업데이트 인프라 변경 품질 보장을 통한 안정성 제공
- 모니터링, 로깅 기능을 통해 실시간 성능 확인 가능
- 코드형 인프라 사용을 통해 확장
- 협업 강화
- 코드형 인프라와 코드형 정책을 통한 보안 강
- 출시 시간 단축
- 시작, 경쟁 지형에 따른 유연한 대응
- 시스템 안정성, 신뢰성 제공
- 평균 복구 시간 개
문화 철학 - 개발과 운영의 장벽 완화 - 협업, 가시성 및 조율
- 팀 역할 범위와 책임의 변화
- 짧은 릴리즈 주기 (유연한 대응 가능)
- 지속적인 학습
  • 방식 
지속적 통합 - 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 소프트웨어 개발 방식
- 목
> 버그를 신속하게 찾아 해결
> 소프트웨어 품질을 개선
> 새로운 소프트웨어 업데이트를 검증 및 릴리스하는 데 걸리는 시간을 단축
지속적 전달 - 프로덕션에 릴리스하기 위한 코드 변경이 자동으로 빌드, 테스트 및 준비되는 소프트웨어 개발 방식
마이크로 서비스 - 마이크로 서비스 아키텍처: 단일 애플리케이션을 작은 서비스의 집합으로 구축하는 설계 접근 방식
- 각 서비스는 단일 목적으로 한정되어 독립적인 단일 서비스 or 서비스 그룹으로 배포 가
코드형 인프라, 
IaC(Infrastructure as Code)
- 버전 관리, 지속적 통합과 같은 코드와 소프트웨어 개발 기술을 사용하여 인프라를 프로비저닝하고 관리하는 방식
- 엔지니어가 코드 기반 도구를 사용해 인프라와 상호작용하고 다룰 수 있음
> 구성 관리: 코드를 이용해 OS를 자동화, 구성, 호스팅(OS, 앱, 서버 소프트웨어 수동 구성 필요 없음)
> 코드형 정책: 코드로 다루는 인프라는 자동화된 방식으로 추적, 검증, 재구성 가능. (표준화 + 자동화를 통한 모니터링)
- 시스템 리소스와 토폴로지를 코딩하는 것처럼 관리할 수 있
모니터링 및 로깅 - 로그 모니터링을 통해 실시간 성능 확인, 분석
커뮤니케이션 및 협업 - 조직에서 커뮤니케이션과 협업이 증가하는 것
  • DevOps와 클라우드
    • 시너지 효과
    • 클라우드 민첩성: 제한 없는 리소스로 다중 지역 클라우드 환경을 빠르게 프로비저닝 및 구성 가능, 물리적 서버 구성 필요성 없음
    • Kubernetes: 대규모 컨테이너 오케스트레이션을 위한 업계 솔루션 (CI/CD 파이프라인을 통해 컨테이너를 빌드 및 배포하는 프로세스를 자동화하고 프로덕션 환경에서 컨테이너를 모니터링)
    • 서버리스 컴퓨팅: 인프라 관리 오버헤드의 대부분이 클라우드 공급자에게 넘어가기 때문에 기본 인프라가 아닌 앱에 집중 가능, 배포 및 운영의 복잡성과 위험을 줄여 주는 옵션도 있습니다.
출처: https://aws.amazon.com/ko/devops/what-is-devops/, https://azure.microsoft.com/ko-kr/resources/cloud-computing-dictionary/what-is-devops/, https://cloud.google.com/devops/?hl=ko, https://en.wikipedia.org/wiki/DevOps
  • DevOps의 이해 및 구현
    • DevOps의 탄생 배경
      • 개발, 운영으로 구분된 전통적인 IT 조직의 특성상 이해 관계 갈등 
        • 개발 조직의 목표: 신규 기능의 빠른 제공, 버그 수정
        • 운영 조직의 목표: 서비스 안정성, 빠른 성능
      • 전통적인 IT 조직의 소프트웨어 전달 프로세스는 급변하는 IT 환경 변화에 민첩하게 대응할 수 없음
      • 적은 변경 범위, 배포에 따른 위험성을 축소할 필요성
      • 개발 조직과 운영 조직이 공동 비즈니스 목표를 가질 필요성
    • DevOps에 대한 이해
DevOps가 아닌 것 DevOps
  • 개발자가 운영 조직에서 일하는 것
  • DevOps 개발자를 별도로 채용하는 것
  • 개발자에게 운영서버에 대한 접근 권한을 주는 것
  • DevOps라는 새로운 부서(팀)를 신설하는 것
  • 특정 도구나 솔루션으로 구현가능한 것
  • 개발, 운영 도구를 통합적으로 연결해서 코드 저장, 관리, 테스트, 배포까지 연결되는 인프라와 프로세스를 통합한 인프라를 만드는 것
  • 개발 문화, 방법
  • 개발, 운영, 품질보증의 교집
    • DevOps를 실현할 수 있는 방법
      • 개발 문화가 변화를 수용할 수 있도록 하는 보상 시스템 마련
      • 기능 교차적 Devops팀을 만들기 위한 훈련, 효과적인 협업 체계의 마련
출처: http://pds26.egloos.com/pds/201310/24/85/Devops1.pdf
! Check Point !
- DevOps의 정의 (직군, 팀 등)
>

- DevOps를 실현 가능하게 하기 위해 기술이 필요한 부분과, 기술이 아닌 문화로 풀어야 할 부분에 대해 각각 기술 (CI/CD 파이프라인에 근거해서 답변)
>

- DevOps의 필요성이 대두된 배경 설명

 


# 발표 주제

- DevOps 엔지니어, 클라우드 엔지니어, SRE 엔지니어와 같은 직군을 채용 정보 사이트(원티드 등)에서 찾아보고, 여러분이 해당 직군으로 채용된다고 가정할 때, 무슨 일을 하게 될지 이해한 만큼만 적어보세요.

  • A, B사 채용공고의 자격 요건 및 우대 조건
자격 요건 우대 요건
- IDC, 클라우드 시스템 구축에 대한 전반적 이해
- DevOps 사례 및 이를 사용 및 구축한 경험
- AWS/네트워크/방화벽 설계 구축 경험 필수
> 네트워크, 서버 관련 이해가 필요하며 서버나 데이터 센터 등의 구축 관련 업무와 밀접한 관련이 있는 업무

- 코드 기반 AWS 클라우드 인프라 관리 자동화
- 컨테이너 활용 체계 수립과 구현 (Kubernetes, AWS ECS)
- 클라우드 인프라 비용 절감 (FinOps를 통한 비용 분석, Kubernetes 클러스터의 자원 사용 효율 개선 등)
- 전사 클라우드 활용 체계 수립과 구현
> 클라우드 인프라 및 컨테이너 기술과 관련된 업무 수행

- CI/CD 파이프라인 구축
> CI/CD 파이프라인(지속적 통합) 구축 업무를 수행
- PHP, Python, Go 경험
- 웹 애플리케이션 개발 경험이 있는 분
- NGINX, Elasti csearch, MySQL, Mongo와 같은 미들웨어 및 데이터베이스 중 적어도 일부에 대한 경험
> 업무 수행에 어느정도 개발 지식을 요함

- AWS, 네이버/NHN 클라우드 서비스 경험
> 클라우드 운영 경험이 DevOps 업무에 도움이 될 것으로 생각됨

- Kubernetes 활용 경험이 있는 분
- Docker 컨테이너 기술 경험
- Terraform, Ansible, Packer 등 IaC 도구 사용 경험이 있는 분
- Ansible 또는 Terraform과 같은 구성 관리 도구에 대한 지식
> IaC, 구성 관리 도구, 컨테이너 기술 관련 이해도가 요구됨(IaC, 구성 관리 도구 및 컨테이너 기술 관련 정리 필요)

- Prometheus, Grafana 등 모니터링 도구 활용 경험이 있는 분
> 모니터링 도구 사용한 경험이 있을 시 업무에 도움이 될 것으로 여겨짐
출처 : https://www.jobkorea.co.kr/Recruit/GI_Read/41275579?Oem_Code=C1&logpath=1&stext=DevOps&listno=5https://www.jobkorea.co.kr/Recruit/GI_Read/40819802?Oem_Code=C1&logpath=1&stext=DevOps&listno=4

 

Comments