1. 지속적인 통합 메커니즘
- CI는 개발자가 체크인하는 경우 다음 방법 중 하나로 검증하는 소프트웨어 엔지니어링 실천방법이다.
1) Pull Mechanism : 예정된 시간에 자동화된 빌드 작업을 실행한다.
2) Push Mechanism : 변경 사항이 저장소에 저장되는 경우 자동화된 빌드가 실행된다.
- 이 단계에서는 소스 코드 저장소에서 이용 가능한 최신 변경사항에 대한 단위 테스트의 실행이 뒤따른다.
- 빌드-테스트-통보 : 돌고 도는 파이프라인이 구성된다. 빌드 실행 결과에 기반한 빠른 피드백이 핵심이다.
- CI의 필요성 : 개발의 초기단계에서 보완하고 고칠 수 있는 파이프라인 생성, 같은 이슈가 매우 오랜 기간 후에 발생하고 의존성과 복잡성이 증가했을 때 발생한다면, 고치기 어려워진다.
- Jenkins, GitLabCI 쓰자.
2. 모범사례
- Git, SVN 같은 코드 저장소 유지
- 서드파티, 빌드스크립트, 다른 산출물 등을 코드 저장소에 체크인
- 코드 저장소에서 완전히 빌드를 실행. Clean build를 사용한다.
- Maven, Ant등을 사용해 빌드를 자동화한다. (Java의 경우이고, JS의 경우에는 npm, yarn, webpack, gulp 등이 있다.)
- 빌드 자체적인 테스팅을 한다. 단위테스트를 만든다.
- 기능마다 최소한 하루에 한 번 모든 변경 사항을 커밋한다.
- 모든 커밋은 변경 사항의 무결성을 검증하기 위해 빌드되어야 한다.
- 사용자를 인증하고 액세스 제어를 강제화 한다. (인증 및 권한 부여)
- 빌드 이름에 알파벳 문자를 사용하고 기호문자를 피한다.
- 다양한 빌드작업에 대한 균일성을 유지하고 더 나은 방법으로 작업을 관리한다.
- 문제해결 시 유용한 아카이브된 빌드와 다른 산출물을 포함하고 있는 CI 서버의 home 디렉터리를 정기적으로 백업한다.
- CI 서버에 사용 가능한 디스크 공간이 충분한지 확인한다.
- 여러 작업이 동시에 시작하도록 예약하지 않거나, 특정 작업이 슬레이브 인스턴스에 할당해 여러 빌드 작업이 동시에 실행할 수 있는 마스터-슬레이브 개념을 이용한다,
- 프로젝트나 앱 특정 이해당사자에 대해 이메일, SMS, 트위터 통보 등을 설정한다.
- 커뮤니티 플러그인의 사용이 권장된다.
3. 클라우드컴퓨팅
- 클라우드컴퓨팅 서비스의 주요 모델 (관리와 사용자 책임에 따른 분류)
1. IaaS (Infrastructure as a Service):
IaaS는 가상화된 컴퓨팅 리소스를 제공하는 클라우드 기반 서비스입니다.
사용자는 네트워크, 가상 머신, 스토리지, 로드 밸런서 등의 기본 인프라를 제공받으며, 운영 체제와 애플리케이션 스택에 대한 관리 책임이 사용자에게 있습니다.
예시: Amazon Web Services (AWS) EC2, Google Compute Engine (GCE), Microsoft Azure Virtual Machines
사용자 책임: 운영 체제, 미들웨어, 런타임, 데이터, 애플리케이션
클라우드 제공자 책임: 가상화, 서버, 스토리지, 네트워킹
2. PaaS (Platform as a Service):
PaaS는 IaaS를 기반으로 하며, 개발, 테스트, 배포, 호스팅 및 유지 관리를 위한 플랫폼을 제공합니다.
사용자는 운영 체제, 미들웨어, 런타임 등을 관리할 필요 없이 애플리케이션 개발에만 집중할 수 있습니다.
예시: Heroku, Google App Engine, Microsoft Azure App Service
사용자 책임: 데이터, 애플리케이션
클라우드 제공자 책임: 운영 체제, 미들웨어, 런타임, 가상화, 서버, 스토리지, 네트워킹
3. SaaS (Software as a Service):
SaaS는 클라우드에서 실행되는 완전한 애플리케이션을 제공하는 서비스입니다.
사용자는 애플리케이션을 사용할 수 있는 웹 브라우저만 있으면 됩니다.
SaaS 제공자가 모든 것을 관리하며, 사용자는 소프트웨어를 사용하는 데만 집중할 수 있습니다.
예시: Google Workspace, Salesforce, Microsoft Office 365
사용자 책임: 사용자 데이터의 관리 및 보안
클라우드 제공자 책임: 애플리케이션, 데이터, 런타임, 미들웨어, 운영 체제, 가상화, 서버, 스토리지, 네트워킹
세 가지 서비스 모델의 차이를 요약하면 다음과 같습니다:
IaaS:
가장 낮은 수준의 추상화를 제공합니다.사용자는 가상 머신, 스토리지, 네트워크 등의 인프라를 관리합니다.사용자는 운영 체제, 미들웨어, 런타임 등을 선택하고 설치할 책임이 있습니다.비교적 많은 유연성과 제어를 제공하지만, 관리 부담이 더 큽니다.
PaaS:
중간 수준의 추상화를 제공합니다.사용자는 애플리케이션 개발, 배포, 관리에만 집중할 수 있습니다.클라우드 제공자는 런타임, 미들웨어, 운영 체제 등의 관리를 담당합니다.개발 및 배포의 효율성이 향상되지만, 플랫폼의 제약 사항으로 인해 제어력이 상대적으로 떨어집니다.
SaaS:
가장 높은 수준의 추상화를 제공합니다.사용자는 완전한 소프트웨어 애플리케이션을 사용합니다.클라우드 제공자는 애플리케이션, 인프라, 운영 체제 등의 모든 것을 관리합니다.사용자는 소프트웨어를 사용하는 데만 집중하며, 거의 관리 부담이 없습니다. 하지만, 소프트웨어의 사용 및 구성에 대한 제어력이 제한됩니다.
어떤 서비스 모델을 선택할지는 프로젝트의 요구사항, 팀의 역량 및 선호도, 시간 및 비용 투자 등을 고려하여 결정해야 합니다. 각 모델은 특정 시나리오와 요구사항에 더 적합할 수 있으므로, 사용 사례를 분석하여 가장 적합한 클라우드 서비스 모델을 선택하세요.
- 클라우드 컴퓨팅은 앱의 가용성 측면에서 다양한 기회를 열었다.
- 클라우드 배포 모델의 종류
1) 공용 클라우드 : 인프라스트럭쳐는 공용으로 이용이 가능
2) 전용 클라우드 : 인프라스트럭쳐는 단일 조직을 위해 운영됨
3) 커뮤니티 클라우드 : 인프라스트럭쳐는 공유된 관심사항을 갖는 특정 커뮤니티에 의해 공유된다
4) 하이브리드 클라우드 : 인프라스트럭쳐는 두 개 이상의 클라우드 모델로 구성된다.
4. 구성 관리(Configuration Management, CM)
- 구성관리는 시스템, 더 구체적으로는 서버 런타임 환경에서의 변경사항을 관리한다.
- 구성관리는 특정 노드나 서버 상태와 관련된 세부 정보의 추적, 버전 유지에 관한 내용이다.
- 시장에는 셰프, 퍼펫, 앤서블, 솔트 같이 있기 있는 구성 관리 도구가 많다.
5. 지속적인 전달/배포
- 지속적인 전달과 배포에는 상호교환적으로 자주 사용이 된다.
- 전달은 모든 환경에서 자동화된 방식으로 배포하는 프로세스이며, 품질 향상을 위해 지속적인 피드백을 제공한다.
- 배포는 프로덕션 환경으로 최신 변경사항을 갖는 앱의 배포에 관한 것이다.
- 즉, 지속적인배포는 지속적인 전달을 의미하지만, 반대는 아니다.
- 지속적인 전달은 애자일 기간의 스프린트 이후의 점진적인 출시 때문에 중요하다.
- 개발부터 테스팅까지 기능이 준비된 앱의 배포를 위해 요구사항이나 해석의 변경으로 인해 스프린트에서 여러 번의 반복이 포함될 수 있다.
- 그러므로 자동화가 권장된다.
- 모든 환경에 대해 인프라와 런타임 환경 생성을 위해서는 스크립트가 유용하다.
- 자동화 스크립트는 환경에 기반한 구성 파일을 사용할 수 있으며, 자원을 생성해 애플리케이션으로 배포할 수 있다.
6. 지속적인 전달의 모범사례
- 계획 : 대상 환경에 앱을 배포하기 위해 하나의 커밋만 필요한 상황을 고려하라. 컴파일, TDD, 검증, 통보, 인스턴스 프로비저닝, 런타임 환경 설정, 배포가 포함되어야 한다. 자동화를 위해 반복적인, 어려운, 수동작업을 고려해야 한다.
- 유사 프로덕션환경에서 버그 수정을 개발하고 테스트한다. (스테이징 서버와 관련된 사항이다.)
- 개발 환경과 테스트환경으로 자주 배포한다.
7. 지속적인 모니터링
- 전체적인 전달 파이프라인의 근간이며, 오픈소스 모니터링 도구는 아이스크림 위의 토핑과 같다.
- 세심하게 구현된 계획이어야 하며, 지속적인 전달/배포를 위한 지속적인 통합에 대한 모니터링 실천 방법을 고려해야 한다.
- CI -> 클라우드 프로비저닝 -> 구성관리 -> CD(Delivery) -> CD(Deploy)
- 다양한 상황에서의 모니터링을 생각할 수 있다.
1) 앱 모니터링 : 응답시간, 서비스 성능, DB
2) 플랫폼 모니터링 : NoSQL, 메시징, 메모리 캐싱
3) 로그 모니터링 : 로그 분석
4) 인프라스트럭쳐 모니터링 : 서버, 스토리지, 네트워크
- 기획 단계에서의 적절한 모니터링 전략을 갖고 있어야 한다.
8. 지속적인 피드백
- DevOps 문화에서 중요한 마지막 구성요소이다.
- 폭포수 모델에서 피드백 주기는 매우 길다.
- 애자일이나 데브옵스 문화에서는 작은 구현 단계의 결과를 확인하므로, 더 짧은 주기의 피드백이 주된 차이점을 만든다.
다음 시간에는 이러한 개념들을 직접 구현할 수 있는 툴들이 어떤 것이 있는지 배워본다.
'개발 방법론 > DevOps의 개념' 카테고리의 다른 글
[DevOps] 도구와 기술 - 2 (0) | 2023.04.13 |
---|---|
[DevOps] 도구와 기술 (0) | 2023.04.11 |
[Jenkins] 설치 및 기본 문법 (0) | 2023.04.10 |
[DevOps] 용어정리 : 인프라스트럭쳐, 프로비저닝 (0) | 2023.04.07 |
[DevOps] DevOps의 이해 (0) | 2023.04.07 |
댓글