목적: 애플리케이션을 개발하여 고객의 비지니스에 도움이 되도록 안정적으로 제공하기 위함.

Server Instance Container
관리 애지중지 필요할때 사용, 필요 없으면 지움 필요할때 사용, 필요 없으면 지움
장비 도입 2주~3개월 3~5분 10초 이내
개발방식 Monolitic 주력, MSA 가능 하지만 복잡함. Monolitic 주력, MSA 가능 하지만 복잡함. MSA 최적화
배포 자동화 CI/CD(Jenkins, Git) CI/CD(CodeCommit, Code Pipeline) GitOps(CodeCommit, Flux)
모니터링(지표,로그,추적) Zabbix, Nagios, 제니퍼 CloudWatch Promethus, Grafana, Fluentd, Fluend Bit, Cloudwatch Container Insight, Xray
Network Route, Switch, Hub VPC CNI(Calico, Flannel, Weave net, kubenet, vpccni)
Security(인증,인가) Window AD, 자체개발 IAM 인증: IAM
인가: RBAC

컨테이너를 사용하는 이유

전통적인 배포 시대:  한 물리 서버에서 여러 애플리케이션의 리소스 한계를 정의할 방법이 없었기에, 리소스 할당의 문제가 발생했다. 예를 들어 물리 서버 하나에서 여러 애플리케이션을 실행하면, 리소스 전부를 차지하는 애플리케이션 인스턴스가 있을 수 있고, 결과적으로는 다른 애플리케이션의 성능이 저하될 수 있었다. 이에 대한 해결책은 서로 다른 여러 물리 서버에서 각 애플리케이션을 실행하는 것이 있다. 그러나 이는 리소스가 충분히 활용되지 않는다는 점에서 확장 가능하지 않았으므로, 물리 서버를 많이 유지하기 위해서 조직에게 많은 비용이 들었다.

가상화된 배포 시대: 그 해결책으로 가상화가 도입되었다. 이는 단일 물리 서버의 CPU에서 여러 가상 시스템 (VM)을 실행할 수 있게 한다. 가상화를 사용하면 VM간에 애플리케이션을 격리하고 애플리케이션의 정보를 다른 애플리케이션에서 자유롭게 액세스 할 수 없으므로, 일정 수준의 보안성을 제공할 수 있다.

가상화를 사용하면 물리 서버에서 리소스를 보다 효율적으로 활용할 수 있으며, 쉽게 애플리케이션을 추가하거나 업데이트할 수 있고 하드웨어 비용을 절감할 수 있어 더 나은 확장성을 제공한다.

컨테이너 개발 시대: 컨테이너는 VM과 유사하지만 격리 속성을 완화하여 애플리케이션 간에 운영체제(OS)를 공유한다. 그러므로 컨테이너는 가볍다고 여겨진다. VM과 마찬가지로 컨테이너에는 자체 파일 시스템, CPU 점유율, 메모리, 프로세스 공간 등이 있다. 기본 인프라와의 종속성을 끊었기 때문에, 클라우드나 OS 배포본에 모두 이식할 수 있다.

컨테이너는 다음과 같은 추가적인 혜택을 제공하기 때문에 인기가 있다.

Kubernetes Object 개념