DevOps는 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합입니다. 기존의 소프트웨어 개발 및 인프라 관리 프로세스를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선할 수 있습니다. 이러한 빠른 속도를 통해 조직은 고객을 더 잘 지원하고 시장에서 좀 더 효과적으로 경쟁할 수 있습니다.
![DevOps란 무엇입니까? DevOps란 무엇입니까?](https://d1.awsstatic.com/product-marketing/DevOps/DevOps_feedback-diagram.ff668bfc299abada00b2dcbdc9ce2389bd3dce3f.png)
DevOps 모델에서는 개발팀과 운영팀이 더 이상 "사일로"에 묶여 있지 않습니다. 때로는 이 두 팀이 단일팀으로 병합되어 엔지니어가 개발에서 테스트, 배포, 운영에 이르기까지 전체 애플리케이션 수명 주기에 걸쳐 작업하고 단일 기능에 한정되지 않은 광범위한 기술을 개발합니다.
일부 DevOps 모델에서 품질 보증팀과 보안팀 또한 애플리케이션 수명 주기에 걸쳐 개발 및 운영과 좀 더 긴밀하게 통합됩니다. DevOps 팀 전체가 보안을 중점으로 두는 경우 때때로 DevSecOps라고 불립니다.
이러한 팀에서는 DevOps 방식을 사용하여 속도가 느리고 수동으로 수행되던 프로세스를 자동화합니다. 또한, 애플리케이션을 안정적으로 빠르게 운영하고 개선하는 데 도움이 되는 기술 스택과 도구를 사용합니다. 이러한 도구 덕분에 엔지니어는 이전 같았으면 다른 팀의 도움이 필요했을 코드 배포 또는 인프라 프로비저닝과 같이 작업을 독립적으로 수행할 수 있으며, 따라서 팀의 작업 속도가 더욱 빨라집니다.
소프트웨어와 인터넷은 쇼핑에서 엔터테인먼트 그리고 뱅킹에 이르기까지 전 세계와 산업을 변화시켰습니다. 이제 소프트웨어는 비즈니스를 지원하는 것에 그치지 않고, 비즈니스의 모든 부분에서 핵심적인 구성 요소가 되었습니다. 기업은 온라인 서비스 또는 애플리케이션으로 제공되는 소프트웨어를 통해 온갖 종류의 디바이스에서 고객과 상호 작용합니다. 또한, 소프트웨어를 사용하여 물류, 통신, 운영 등과 같은 가치 체인의 모든 부분을 혁신함으로써 운영 효율성을 향상합니다. 20세기에 실제 상품을 제조하는 기업이 산업 자동화를 통해 제품의 설계, 생산 및 전달 방법을 혁신한 것과 마찬가지로, 오늘날의 기업은 소프트웨어를 구축하고 제공하는 방법을 혁신해야 합니다.
DevOps로 전환하기 위해서는 문화와 사고방식의 변화가 필요합니다. 간단하게 말하자면 DevOps는 기존에 사일로에 묶여 있던 개발과 운영이라는 두 팀 간의 장벽을 없애줍니다. 일부 조직에서는 개발팀과 운영팀이 나뉘어 있지 않고 엔지니어가 두 업무를 모두 수행할 수도 있습니다. DevOps에서는 두 팀이 함께 작업하여 개발자의 생산성과 운영의 안정성을 모두 최적화합니다. 두 팀은 자주 소통하고, 효율성을 높이고, 고객에게 제공하는 서비스의 품질을 향상하기 위해 최선을 다합니다. 최종 고객의 요구와 자신이 어떻게 이러한 요구를 해결하는 데 공헌할 수 있는지 생각함으로써 일반적으로 명시된 역할 또는 직책의 범위를 넘어 서비스에 대한 완전한 주인의식을 갖습니다. 품질 보증팀 및 보안팀도 이 두 팀과 긴밀하게 통합될 수 있습니다. DevOps 모델을 사용하는 조직은 어떻게 구성되어 있든, 전체 개발 및 인프라 수명 주기를 스스로의 책임으로 간주하는 팀들로 구성됩니다.
조직이 소프트웨어 개발과 인프라 관리 프로세스의 자동화 및 간소화를 통해 더 빠르게 혁신할 수 있도록 지원하는 몇 가지 주요 방식이 있습니다. 이러한 방식 대부분은 적절한 도구를 사용해 수행됩니다.
기본 방식 중 하나는 소규모 업데이트를 자주 수행하는 것입니다. 이 방식을 통해 조직은 고객을 위해 더 빠르게 혁신할 수 있습니다. 이러한 업데이트는 기존 릴리스 방식에서 수행되는 낮은 빈도의 업데이트보다 일반적으로 좀 더 증분적인 특성을 갖습니다. 소규모로 자주 업데이트하면 각 배포의 위험이 줄어듭니다. 팀에서 오류의 원인이 되는 최근 배포를 확인할 수 있으므로 더 빠르게 버그를 해결할 수 있습니다. 업데이트 소요 시간과 규모는 다르지만, DevOps 모델을 사용하는 조직은 기존 소프트웨어 개발 방식을 사용하는 조직보다 훨씬 더 자주 업데이트를 배포합니다.
또한, 조직은 마이크로 서비스 아키텍처를 사용하여 애플리케이션의 유연성과 혁신의 속도를 높일 수 있습니다. 마이크로 서비스 아키텍처는 복잡한 대규모 시스템을 간단하고 독립적인 프로젝트로 결합 해제합니다. 애플리케이션은 많은 개별 구성 요소(서비스)로 분할되며, 각 서비스는 단일 목적 또는 기능으로 한정되고 피어 서비스 및 전체 애플리케이션과는 별개로 운영됩니다. 이 아키텍처는 애플리케이션 업데이트를 위한 조정 오버헤드를 줄이고, 각 서비스가 이를 담당하는 작고 민첩한 팀과 연결되면 조직이 좀 더 신속하게 움직일 수 있습니다.
하지만 마이크로 서비스와 릴리스 빈도 증가의 조합은 배포 수를 현저히 늘려 운영 문제로 이어질 수 있습니다. 따라서 지속적 통합 및 지속적 전달과 같은 DevOps 방식을 사용하면, 이러한 문제를 해결하고 조직이 안전하고 안정적인 방식으로 신속하게 업데이트를 제공할 수 있습니다. 코드형 인프라 및 구성 관리와 같은 인프라 자동화 방식은 잦은 변경에 대해 컴퓨팅 리소스를 탄력적이고 대응적으로 유지하는 데 도움이 됩니다. 또한, 모니터링과 로깅의 사용도 엔지니어가 애플리케이션 및 인프라의 성능을 추적하여 문제에 신속하게 대응할 수 있게 하는 데 도움이 됩니다.
이러한 방식들을 함께 사용하면 조직이 더 빠르고 안정적으로 고객에게 업데이트를 제공할 수 있습니다. 다음은 주요 DevOps 방식의 개요입니다.
![지속적 통합 지속적 통합](https://d1.awsstatic.com/Developer%20Marketing/DevOps/DevOps-What-is_continuous-integration.3f6fc6ea0386fa699174fe40917dde0e0c5b954a.png)
지속적 통합은 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 소프트웨어 개발 방식입니다. 지속적 통합의 핵심 목표는 버그를 신속하게 찾아 해결하고, 소프트웨어 품질을 개선하고, 새로운 소프트웨어 업데이트를 검증 및 릴리스하는 데 걸리는 시간을 단축하는 것입니다.
![지속적 전달 지속적 전달](https://d1.awsstatic.com/Developer%20Marketing/DevOps/DevOps-What-is_continuous-delivery.65d73ec797fea2064c44a3682d249264f7d64eac.png)
지속적 전달은 프로덕션에 릴리스하기 위한 코드 변경이 자동으로 빌드, 테스트 및 준비되는 소프트웨어 개발 방식입니다. 빌드 단계 이후의 모든 코드 변경 사항을 테스트 환경 및/또는 프로덕션 환경에 배포함으로써 지속적 통합을 확장합니다. 지속적 전달이 적절하게 구현되면, 개발자는 언제나 즉시 배포할 수 있고 표준화된 테스트 프로세스를 통과한 빌드 아티팩트를 보유하게 됩니다.
![마이크로 서비스 마이크로 서비스](https://d1.awsstatic.com/Developer%20Marketing/DevOps/DevOps-What-is_microservices.3a506e14bb8fb85a350346bdc76ddd33a7e73586.png)
마이크로 서비스 아키텍처는 단일 애플리케이션을 작은 서비스의 집합으로 구축하는 설계 접근 방식입니다. 각 서비스는 자체 프로세스에서 실행되고, 주로 HTTP 기반 API(애플리케이션 프로그래밍 인터페이스)라는 간편한 메커니즘을 사용하는 잘 정의된 인터페이스를 통해 다른 서비스와 통신합니다. 마이크로 서비스는 비즈니스 기능을 중심으로 구축되며, 각 서비스는 단일 목적으로 한정되어 있습니다. 다양한 프레임워크 또는 프로그래밍 언어를 사용하여 마이크로 서비스를 작성하고, 이를 독립적으로 단일 서비스 또는 서비스 그룹으로 배포할 수 있습니다.
![코드형 인프라 코드형 인프라](https://d1.awsstatic.com/Developer%20Marketing/DevOps/DevOps-What-is_infra-as-code.b06da7712aef8acebd6567fdc0038838baac1339.png)
코드형 인프라는 버전 관리 및 지속적 통합과 같은 코드와 소프트웨어 개발 기술을 사용하여 인프라를 프로비저닝하고 관리하는 방식입니다. 클라우드의 API 중심 모델을 사용하면 개발자와 시스템 관리자가 수동으로 리소스를 설정 및 구성할 필요 없이 프로그래밍 방식으로 대규모로 인프라와 상호 작용할 수 있습니다. 따라서 엔지니어는 코드 기반 도구를 사용하여 인프라와 인터페이스하고, 애플리케이션 코드를 다루는 방법과 유사한 방식으로 인프라를 다룰 수 있습니다. 인프라가 코드를 통해 정의되므로 인프라와 서버를 표준화된 패턴을 사용하여 배포하고, 최신 패치와 버전으로 업데이트하거나, 반복 가능한 방식으로 복제할 수 있습니다.
개발자와 시스템 관리자는 코드를 사용하여 운영 체제를 자동화하고 구성, 운영 작업 등을 호스팅합니다. 코드를 사용함으로써 구성 변경을 반복하고 표준화할 수 있습니다. 따라서 개발자와 시스템 관리자는 운영 체제, 시스템 애플리케이션 또는 서버 소프트웨어를 수동으로 구성할 필요가 없습니다.
Amazon EC2 Systems Manager를 사용하여 Amazon EC2와 온프레미스 시스템을 구성하고 관리하는 방법 알아보기 »
인프라와 인프라의 구성이 클라우드로 체계화된 조직은 규정 준수를 규모에 따라 동적으로 모니터링하고 적용할 수 있습니다. 따라서 코드를 통해 설명된 인프라는 자동화된 방식으로 추적, 검증 및 재구성할 수 있습니다. 이는 조직이 손쉽게 리소스 변경을 관리하고 보안 조치가 분산 방식으로 적절하게 적용될 수 있게 해줍니다(예: PCI-DSS 또는 HIPAA 규정 준수나 정보 보안). 규정 위반 리소스가 추가 조사를 할 수 있도록 자동으로 플래그가 지정되거나 규정 준수 상태로 자동으로 변경될 수 있으므로 이를 통해 조직 내 팀은 더 빠르게 움직일 수 있습니다.
AWS Config과 Config Rules를 사용하여 인프라에 대한 규정 준수를 모니터링하고 적용하는 방법 알아보기 »
![모니터링 및 로깅 모니터링 및 로깅](https://d1.awsstatic.com/Developer%20Marketing/DevOps/DevOps-What-is_monitor-logging.0951102aacf44686a26ed62b4498eca6387b38dd.png)
조직은 지표와 로그를 모니터링하여 애플리케이션 및 인프라 성능이 제품의 최종 사용자 경험에 어떤 영향을 미치는지 확인합니다. 조직은 애플리케이션과 인프라에서 생성되는 데이터 및 로그를 캡처하고 분류한 다음 이를 분석함으로써 변경 또는 업데이트가 사용자에게 어떤 영향을 주는지 이해하고, 문제의 근본 원인 또는 예상치 못한 변경에 대한 통찰력을 확보합니다. 서비스는 연중무휴 24시간 사용할 수 있어야 하고 애플리케이션 및 인프라 업데이트 빈도가 증가함에 따라 적극적인 모니터링이 점점 더 중요해지고 있습니다. 이러한 데이터에 대한 실시간 분석을 수행하거나 알림을 생성하는 것도 조직이 좀 더 능동적으로 서비스를 모니터링하는 데 도움이 됩니다.
![커뮤니케이션 및 협업 커뮤니케이션 및 협업](https://d1.awsstatic.com/Developer%20Marketing/DevOps/DevOps-What-is_communication-collaboration.299a6b746fc2b80bb323f102e6d9e4d2f6306665.png)
조직에서 커뮤니케이션과 협업이 증가하는 것도 DevOps의 주요 문화적 측면 중 하나입니다. DevOps 도구 및 소프트웨어 제공 프로세스 자동화를 사용하면 개발 및 운영의 워크플로와 책임을 물리적으로 합침으로써 협업이 이루어집니다. 해당 팀에서는 이 위에 채팅 애플리케이션, 문제 또는 프로젝트 추적 시스템, wiki를 사용하여 커뮤니케이션을 지원하고 정보를 공유하는 강력한 문화적 표준을 확립합니다. 이를 통해 개발자와 운영 그리고 마케팅이나 영업과 같은 다른 팀 간에도 커뮤니케이션이 활발해지면서 조직의 모든 부분에서 목표와 프로젝트에 좀 더 가깝게 다가갈 수 있습니다.
DevOps 모델이 팀에서 고객을 위해 신속하고 안정적으로 배포하고 혁신하도록 지원하려면 효과적인 도구가 필요합니다. 이러한 도구는 수동 작업을 자동화하고, 팀이 규모에 따라 복잡한 환경을 관리하도록 지원하며, 엔지니어가 DevOps에서 지원하는 빠른 속도를 관리할 수 있도록 해줍니다. AWS에서는 DevOps용으로 설계되고 AWS 클라우드에서 사용하도록 구축된 서비스를 제공합니다. 이러한 서비스는 위에 설명된 DevOps 방식을 사용하는 데 도움이 됩니다.