컨테이너 개발 시대가 왔다

제이밍·2023년 7월 25일
2
post-thumbnail
post-custom-banner

컨테이너 개발?

컨테이너 개발을 이해하기 위해 알아야 하는 사전지식 📖

컨테이너 라고 하면 가장 먼저 떠오르는 용어가 있는데요 바로 쿠버네티스도커 에요! 이 친구들을 공부하기전에 사전에 알아야하는 용어가 몇 가지 있어요!

  1. 컨테이너
    앱이 구동되는 환경까지 감싸서 실행할 수 있도록 하는 격리 기술
    우리가 구동하려는 애플리케이션을 실행할 수 있는 환경까지 감싸서, 어디서든 쉽게 실행할 수 있도록 해 주는 기술

  2. 컨테이너 런타임
    컨테이너를 다루는 도구

  3. 도커
    컴테이너를 다루는 도구 중 가장 유명한 것

  4. 쿠버네티스
    컨테이너 런타임을 통해 컨테이너를 오케스트레이션 하는 도구

  5. 오케스트레이션
    여러 서버에 걸친 컨테이너 및 사용하는 환경 설정을 관리하는 행위

예를들어 우리가 PC에 프로그램을 설치할 때, 내 컴퓨터에 필요한 옵션을 일일이 맞춰서 세팅해주어야 하는 경험이 있을거예요!
하지만 컨테이너는 이러한 환경까지 모두 포함하여 독립적으로 프로그램이 실행될 수 있도록 해주는 역할을 해요

이러한 컨테이너를 사용할 때 필요한 도구가 컨테이너 런타임 인데요,
그 중 가장 유명한 것이 도커 입니다!

도커가 사용하는 컨테이너 규격은 표준화 되어있어 도커가 아닌 다른 컨테이너 런타임들도 도커로 만든 컨테이너를 사용할 수 있어요!

도커와 함께 쿠버네티스 라는 용어도 많이 들어보셨을것 같은데요,
쿠버네티스는 컨테이너 런타임(ex. 도커)을 통해 컨테이너를 다루는 도구를 말해요.

쿠버네티스의 가장 큰 역할은 여러 서버(노트)에 컨테이너를 분산해서 배치하거나, 문제가 생긴 컨테이너를 교체 혹은 컨테이너가 사용할 비밀번호나 환결 설정을 관리하고 주입하는 일을 주로 하고 이를 컨테이너 오케스트레이션 이라고 해요.

즉 쿠버네티스가 도커를 다루는 도구가 아니며 도커 이외에도 다양한 컨테이너 런타임 소프트웨어를 사용할 수 있어요

쿠버네티스의 좀 더 자세한 역할을 보려면 공식문서를 참조해주세요!

배포의 여정 히스토리 "전통적인", "가상화" 그리고 컨테이너 배포 방식'

전통적인 배포방식 (Traditional Deployment)

  • 물리적인 컴퓨터 한 대에 하나의 OS를 깔고 여러 가지 프로그램을 설치하는 방식이다.

문제점
1. 인터넷 뱅킹을 위해 보안 프로그램을 많이 성치했더니 게임이나 웹 브라우저 성능이 떨어지는 걸 경험합니다 -> 리소스 할당에 문제가 있기 때문
2. 특정 프로그램이 성능을 독점할 경우 다른 프로그램의 성능이 떨어지는 단점이 있습니다.

그렇다고 두대의 컴퓨터를 구입해서 사용하자니 비용이 너무 많이 들어요

가상화 배포방식 (Virtualized Deployment)

이 문제를 해결하기 위해 등장한 해법이 바로 가상화 배포에요!

위 이미지의 용어에 대해 간략하게 살펴보자면
중간에 하이퍼바이저가 하나의 시스템 상에서 가상 컴퓨터를 여러 개 구동할 수 있도록 해주는 계층이에요
App은 실행하고자 하는 프로그램, Bin/Library는 프로그램이 실행하는데 필요한 환경과 관련된 파일이에요.

가상 머신은 말 그대로 가상 컴퓨터로 가상머신에도 CPU, 메모리, 저장 장치등을 개별적으로 할당할 수 있어요
하나의 컴퓨터에서 두 개의 가상화된 컴퓨터가 동작하게 되면 두 프로그램이 서로 간섭하지 않게되요 때문에 일정 수준의 보안성을 제공하지요!

여기서 가상머신은 성능을 조정해 게임 컴퓨터에는 좀 더 많은 CPU와 메모리를,
인터넷 뱅킹용 컴퓨터에는 적은 CPU와 메모리를 할당하여 좀 더 유연하게 처리할 거예요

전통적인 방식보다 분명 효율적이지만 가상머신에 일일이 운영체제를 설치해야 하기 때문에 컨테이너 중심 배포보다는 무거운 편에 속해요

컨테이너 개발시대 (Container Deployment)

가상화 배포방식과 비교해 가장 큰 특징은
하이퍼바이저라는 부분이 Container Runtime으로 대체되었고, Virtual MachineContainer로 대체되요!

때문에 컨테이너는 가상머신과 달리 프로그램 구동을 위해서 OS를 매번 설치할 필요가 없게 되죠. (Container는 단 하나의 OS만 사용합니다!)

컨테이너 기반 배포는 전통적인 배포 위에 Container Runtime이 올라가 있어 컴퓨터상에서만 유요한 것일까요?

꼭 그렇지는 않습니다. 🤔

컨테이너 자체는 OS하단이 어떻게 동작하는지 관심을 두지 않아요!
그래서 가상머신 위에 올라간 OS에서 컨테이너 기반 배포를 하는 것이 가능한 것이죠!

같은 예로 게임과 인터넷 뱅킹 프로그램이 한 컴퓨터에 설치 되는 것을 가정해보죠.
서로 간섭을 일으켜 성능 저하나 오류를 발생시킬수 있는 상황에서 컨테이너 중심의 배포 방식이라면 게임과 인터넷 뱅킹은 하나의 OS상에서 구동 될거예요 🫨
하지만! 전통적 배포와의 차이점은 게임과 인터넷 뱅킹이 설치되면서 컨테이너에서는 실제로 두 프로그램간에 간섭이 일어나지 않도록 장벽을 쳐요

장벽을 치는 것과 동시에 OS는 게임과 인터넷 뱅킹이 사용할 수 있는 CPU, 메모리 등의 자원 또한 독립적으로 사용할 수 있도록 할당하고 관리하죠.

이러한 과정에서 이 두 프로그램은 서로 다른 컴퓨터에 깔려있다고 생각하게 되는 것이죠
이와같은 동작방식을 OS커널을 공유하는 가상화 라고도 표현되요.

주의해야 할 점도 있어요!

컨테이너는 OS를 공유하는 방식이기 때문에 어떤 프로그램이 다른 프로그램을 간섭할 수는 없어요,
하지만 내 프로그램의 문제가 OS에 문제를 일으킬 경우 OS에서 구동 중인 전체 컨테이너의 문제가 될 수는 있죠.

Reference

쿠버네티스 공식 문서
쿠버네티스 알아보기 1편: 쿠버네티스와 컨테이너, 도커에 대한 기본 개념

profile
모르는것은 그때그때 기록하기
post-custom-banner

4개의 댓글

comment-user-thumbnail
2023년 7월 25일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

1개의 답글
comment-user-thumbnail
2023년 10월 19일

재밌는 이야기처럼 풀어내주셔서 잘 이해가 되었습니다. 감사합니다.

1개의 답글