개발자 끄적끄적
DevOps 본문
<DevOps>
- Development(개발) + Operations(운용)
- 개발 팀과 운용 팀이 긴밀히 협업하고 연계하여 비즈니스 요구에 신속하게 대응하여 소프트웨어 개발 및 배포
- 배포된 소프트웨어가 운영환경에서 안정적으로 동작하도록 하여 비즈니스 가치를 실현
- 개발 : 비지니스 요구에 맞춰 새로운 기능 요구에 신속한 대응
- 운용 : 변화보다는 시스템을 안정성에 관심
<DevOps의 목적>
- 개발과 운용 모두 공통의 목적의식을 갖고 서로 존중하면서 협업하는 문화를 형성하는 것이 필요
<DevOps 프로세스>
- Infinite loop
1. Plan : 요구사항 정의(무엇을 개발할 지 결정)
2. Code : 구현 및 구현된 코드를 코드 저장소에 커밋(Commit)
3. Build : 코드 저장소에 커밋된 코드가 문제가 없는 지 검사한 후에 기존 코드와 통합
4. Test : 운영 환경에 배포할 상태가 되어 있는지를 테스트(인수 테스트, 성능 테스트 등)
5. Release : 최종 산출물(바이너리 형식)을 관리
6. Deploy : 최종 산출물을 실제 운영 환경(Production Environment)
7. Operate / Monitor : 로깅 등을 통해 운영 현황에 대한 데이터를 수집, 분석하여 결과를 통지하고 다음 개발 계획을 위해 피드백
<CI(Continuous Integration)>
- 지속적(연속적) 통합
- 코드의 통합이 프로젝트 종료 시점에 이루어짐(=Big Bang Integration)
- 결함의 조기 발견으로 인한 비용 감소
- 위험 감소
- 품질에 대한 자신감
*Big Bang Integration : Integration Hell(=통합 지옥)
- 뒤늦은 결함 발견
- 오류의 원인 파악 어려움
- 배포 가능한 소프트웨어 부재
- 제품에 대한 자신감 결여
<CI의 모든 과정이 적절한 tool chain을 통해 자동화>
1. 개발자가 새로운 기능을 추가하거나 오류를 수정하는 등의 작업 내용을 저장소에 반영하기 위해 커밋(Commit)하는 단계
2. 통합 서버는 저장소에 코드가 커밋되었음을 감지하고 빌드 환경에 코드를 다운로드
3. 코드를 컴파일하고 통합
4. 단위 테스트 및 코드 리뷰 수행
5. 테스트 결과를 여러 수단(SMS, Slack, Email)을 통해 통지
<CD(Continuous Delivery)>
- 지속적 전달
- 여러 개발자가 공동으로 작업을 하는 경우 각 개발자의 작업을 개발 초기부터 빈번하게(개발자마다 매일 최소한 한 번) 검증 및 통합이 이루어지도록 하는 방법
- 시스템이 실제 운영 환경에 릴리스 준비가 되어 있는지를 확인
<Testing Pyramid - Mike Cohn에 의해 제안>
1. E2E Testing -> Fewer of these(Costly, Slow)
- Test whole app through UI
- End-to-End Testing(User Interface <-> Service A <-> Service B <-> Service C)
- UAT(User Acception Testing)에 같은 의미로도 사용
- 전체 시스템이 통합된 상태에서 '사용자 관점'에서 테스팅
2. Integration Testing
- Test Units work together
- 일반적으로는 컴포넌트와 컴포넌트를 통합하여 실시하는 테스트를 의미하나,
- 여기에서는 시스템이 외부 환경(DB, 파일 시스템, 외부 시스템)과 통합이 문제가 없는지 테스트하는 의존성 테스트를 의미
3. Unit Testing -> More of these(Cheap, Fast)
- Test Units in isolation
- 각 컴포넌트가 의도한대로 동작하는지를 테스트, 독립적으로 테스트
- 각 컴포넌트가 의존하는 다른 컴포넌트는 가짜(test double)로 대체
<CD 테스팅 환경>
- 시스템이 실제 운영 환경에 릴리즈 준비가 되어 있는지를 확인하기 위해 다양한 테스트 환경에서 다양한 테스트 진행
1. (QA) Testing Environment : QA팀이 테스트하기 위해 사용하는 환경, 복잡하고 시간이 걸리는 테스트를 수행
2. Staging Environment : 실제 운영 환경과 동일한 환경, 실제 운영 데이터를 사용하여(통합된) 시스템을 대상으로 사용자 인수테스트를(UAT)를 포함한 다양한 비기능적 테스트 수행(부하 테스팅, 성능 테스팅, 보안 및 장애 테스트) 등
3. Production Environment : 실제 운영 환경이며 Blue-green deployment나 Canary deployment 등의 배포 전략을 사용하여 배포가 이루어진다
<Continuous Deployment>
- Continuous Delivery는 실제 운영 환경으로 배포할 때 사람의 승인이 필요하지만, Continuous Deployment는 사람 개입없이 "자동으로" 배포
'소프트웨어공학' 카테고리의 다른 글
RAD(Rapid Application Development), Lean Startup (0) | 2024.03.12 |
---|---|
배포 전략 (1) | 2024.03.12 |
애자일 개요 및 원칙 (0) | 2024.03.11 |