[wanted Docker Series] 05.cloudcontainerservice
October 5, 2024
Cloud Container Service
- 모던 웹 환경에서 환경 불일치, 리소스 비효율성, 배포 복잡성 등의 문제를 해결하기 위해서 도입됐다.
- 컨테이너화된 애플리케이션은 일관성 있고 이식성이 뛰어나며, 리소스를 효율적으로 사용하여 배포를 높일 수 있다.
- Docker는 MSA, CI/CD를 지원하면서, 웹 개발에서 필수적인 도구로 자리잡았다.
- 개발환경과 운영 환경의 일관성
- 로컬, 운영에서 환경 불일치로 로컬에서 되던 것이 운영에서 안되는 경우가 있었음
- Docker로 모든 라이브러리, 종속성을 하나의 컨테이너로 묶어서 제공
- 이식성
- 전통적 애플리 케이션 방식은 OS에 의존적이거나 특정 서버 구성에 종속적인 경우가 많았음
- Docker로 특정 운영체제에 독립되어 영향을 거의 받지 않도록 함
- 효율적 리소스 관리
- VM 마다 OS를 올려서 오버헤드 발생
- Docker는 OS 수준 격리된 경량 컨테이너를 실행하므로 전체를 가상화하지 않음
- 빠르고 일관된 배포 및 스케일링
- 점차 CI/CD 파이프라인을 통해 애플리케이션을 자주 업데이트하고 배포해야하는데, 전통적인 방식으로는 어려웠다.
- Docker는 컨테이너 이미지를 기반으로 애플리케이션을 일관되게 배포할 수 있어, 다양한 배포 환경에서 빠르고 안정적으로 배포할 수 있음
- Kubernetes 같은 컨테이너 오케이스테이션 도구 도입으로 스케일링도 자동화할 수 있다.
- 마이크로서비스 아케텍쳐 지원
- 요즘 트렌드는 대규모 애플리 케이션을 작고 독립적인 서비스로 나눠 관리하는 방식이 됐다.
- 개발, 배포가 더 유연하고 빠르게 이뤄질 수 있다.
- Docker는 각각 마이크로 서비스를 독립적인 컨테이너로 실행할 수 있어서 서로 격리된 환경에서 실행되는 동시에 관리도 간편해진다.
- 개발자/ 운영팀 간의 협업 개선
- 서로 다른 환경에서 작업하는 개발자와 운영팀 간의 불일치나 배포 실패나 성능 저하로 이뤄질 수 있다.
- Docker 개발환경과 운영 환경 간의 일관성을 제공하기에 환경 불일치를 막을 수 있다.
CI/CD
CI(지속적 통합)
- 개발자들이 작업한 코드를 주기적으로 공유 레포지토리에 병합함으로써 코드의 통합을 자동화하는 과정이다.
- 모든 변경 사항은 자동 빌드 및 테스트를 거쳐 master로 통합된다.
- 코드 충돌을 최소화하면서 소프트웨어의 품질을 유지하고, 배포 준비 상태를 지속적으로 유지할 수 있다.
CD(Continuous Delivery) - 지속적 전달
- CI 과정을 한 단계 발전시켜, 코드 변경사항이 자동으로 빌드 및 테스트를 거쳐 실제 운영환경에 배포될 준비가 된다.
- 배포 과정을 완전히 자동화하지 않고 실제 배포는 수동으로 트리거할 수 있는 옵션을 둔다.
- 신속하게 배포할 준비를 할 수 있으며, 비즈니스 요구에 따라서 배포 시점을 선택할 수 있다.
CD(Continuous Deployment) - 지속적 배포
- 모든 변경사항이 자동 테스트를 통과하면 즉시 프로덕션에 배포된다.
- 배포 과정을 단축시켜 빠르게 가치를 전달할 수 있도록 함
- 지속적 배포로, 릴리즈 과정이 자동화되어, 사람 개입 없이도 신속하게 배포된다.
- CI/CD 파이프라인의 도입은 개발 프로세스의 자동화, 코드 통합, 테스트, 배포 과정을 효율성을 극대화하여 코드 품질의 지속적 개선, 개발 주기의 단축, 사용자 만족으로 이어진다.
결론적으로 왜 필요하게 됐는가?
- CI/CD 구축은 기능 개발에 시간과 노력을 더 투자하기보다느 전체 개발 과정의 효율성과 안정성을 향상시키는 데 기여한다.
- 이를 통해서 개발자는 코드 품질을 유지하고, 더 빠르게 새로운 기능을 릴리즈하며, 배포 과정에서 발생하는 문제를 미연에 방지할 수 있다.