2020. 4. 14. 00:36ㆍ인프라/클라우드
개발자가 왜 컨테이너 기술을 알아야 할까?
개발자 혹은 개발자를 하고자 공부하는 모든 사람들은(이하 개발자) 인프라를 알아야할까요? 제 대답은 "알아야 한다" 입니다. 개발자들마다 환경이 다르고 하고자하는 것이 다르기 때문에 감히 모든 개발자라고 말하기 어려울 수 있으나, 역설적으로 개발자마다 환경이 다르고 하고자하는 것이 다를수록 컨테이너 기술을 사용해야 합니다.
이전까지 혹은 지금도 인프라 엔지니어는 데이터 센터나 서버실이 있어서 직접 서버를 두고 관리하는 온프레미스(On-premise)방식에서 네트워크나 환경 구축등을 담당하고 있습니다. 그러나 온프레미스 방식에서는 모놀리식(Monolith) 방식으로 모든 애플리케이션, 서비스를 묶어서 관리해왔습니다. 따라서 하나의 서비스를 수정하기 위해서 모든 서비스를 다시 올려야한다는 극명한 단점이 있었습니다. 결국 서비스를 컨테이너화 시킨다는 마이크로서비스(Microservice) 방식을 추구하는 클라우드로 이주하면서 인프라 엔지니어들이 담당하던 업무의 입지가 좁아졌습니다.
이후에 컨테이너를 잘 이용하는 개발자가 등장했는데 위의 이유 뿐만아니라, 개발팀과 운영팀과의 관계를 이해하고 있어야합니다. 개발팀은 늘 새로운 것을 배우고 새로운 것을 적용시켜야 하는 입장입니다. 또한 개발팀의 목적은 말 그대로 개발하는 것이 목적입니다. 따라서 각 팀마다의 사용 언어도 다르고 서로 버전도 달라서 각자의 의존성 파일이 있을 것입니다. 반면에 운영팀은 말 그대로 운영이 목적이기 때문에 개발환경이 중요하지않습니다. 그저 서버가 터지지않게 안정적인 것을 중요시 생각합니다. 이런 이해관계가 상충하기때문에 개발자가 애플리케이션을 개발하고 테스트나 배포할 수 있는 능력인 컨테이너를 활용하는 기술이 요구되었고, 또한 애자일(Agile) 방법론이 대두되었습니다.
그런데, 이전에는 애플리케이션을 배포하고 테스트할 수 없었을까요?
* 상황에 따라서 클라우드보다 온프레미스(on-premise)방식이 더 적합할 수도있습니다.
Container 와 VMs
물론 기존에 VmWare등 가상환경이 존재해왔었습니다.
위 그림에서 왼쪽이 VM환경인데 하드웨어위에 하이퍼바이저(Hupervisor)가 끼어있습니다. 가상화중에는 전가상화(Full-Vortualization)와 반가상화(Para-Virtualization) 두가지 방법이 있는데, 전가상화에서는 게스트에서 호스트에게 직접 명령을 전달하고 호스트는 하이퍼바이저를 통해서 이를 번역하고 자원을 관리합니다. 반면 반가상화는 게스트에서 하이퍼바이저로 전달 후 바로 호스트에게 번역합니다.
이처럼 반가상화가 전가상화보다는 좋은 퍼포먼스를 가질 수 있습니다. 그러나 반가상화같은 경우에는 호스트의 커널을 수정해야한다는 단점을 가지고 있죠.
오른쪽 그림은 컨테이너에 대한 그림입니다. 하이퍼바이져 대신 Container Engine(docker)이 들어가고 그위에 게스트가 없이 바로 파일 시스템이 분리되어있어서 거의 native급으로 퍼포먼스를 수행할 수 있습니다.
이처럼 컨테이너를 주로 사용하지 않던 시기에는 속도가 퍼포먼스가 너무 느리거나 제한되는 상황이 있었습니다. 그러나 현재는 컨테이너를 활용하여 각 서비스마다 빠른 테스트와 배포를 하고 있습니다.
컨테이너 기술의 표준, 도커 그리고 쿠버네티스
도커(Docker)는 2013년 출시한 오픈소스 컨테이너 프로젝트입니다. 간단하게 설명하자면 도커는 말 그대로 컨테이너 기술을 잘 사용할 수 있게 정리해둔 것이 도커이고, 그 도커(컨테이너 기술)를 잘 사용할 수 있게 만드는 기술인 Container Orchestration 기술을 구글에서 다년간 쌓아온 노하우를 잘 정리해서 오픈소스화 시킨것이 쿠버네티스(Kubernetes)입니다.
이렇게 마이크로서비스화 되는 시장에서 개발자로서 입지를 다지기위해 이번 포스팅을 시작으로 도커와 쿠버네티스에 대해서 알아볼 생각입니다. 일단은 도커부터 차근차근 알아가보도록 하겠습니다.
참조
https://blog.netapp.com/blogs/containers-vs-vms/amphttps://medium.com/microservices-for-net-developers/what-is-microservices-and-why-is-it-different-fac017cb8cf4
'인프라 > 클라우드' 카테고리의 다른 글
[클라우드] 도커(Docker)의 기본 간단 정리 (0) | 2020.04.17 |
---|