IT STUDY LOG
[개발 프로세스와 DevOps 업무 개요] 01. 개발 프로세스 본문
# 학습 목표
- 개발 프로세스
- 애플리케이션 배포가 어떤 의미인지 설명할 수 있다.
- 전통적인 소프트웨어가 사용자에게 도달하기까지 어떤 과정을 거치는지 설명할 수 있다.
- 현대의 웹 서비스가 사용자에게 도달하기까지 어떤 과정을 거치는지 설명할 수 있다.
- 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 환경 변화에 민첩하게 대응할 수 없음
- 적은 변경 범위, 배포에 따른 위험성을 축소할 필요성
- 개발 조직과 운영 조직이 공동 비즈니스 목표를 가질 필요성
- 개발, 운영으로 구분된 전통적인 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=5 , https://www.jobkorea.co.kr/Recruit/GI_Read/40819802?Oem_Code=C1&logpath=1&stext=DevOps&listno=4
'devops bootcamp 4 > 서비스 운영 기초' 카테고리의 다른 글
[리눅스 운영체제] 04. 출력 관련 명령 (1) | 2023.03.11 |
---|---|
[리눅스 운영체제] 03. 패키지와 패키지 매니저 (0) | 2023.03.09 |
[리눅스 운영체제] 02. CLI 기본 명령어 (0) | 2023.03.09 |
[리눅스 운영체제] 01. 왜 리눅스인가? (0) | 2023.03.09 |
[개발 프로세스와 DevOps 업무 개요] 02. 규모에 따른 운영 (0) | 2023.03.08 |
Comments