웹 아키텍쳐

웹 아키텍처9 - 컨테이너화/가상화 도구와 Docker

dodo4723 2024. 2. 17. 09:56
728x90
반응형

제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(5년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.

 

비슷한 차트 검색기

 

similar chart finder

내 종목의 차트는 상승하는 차트일까요?

3.35.36.208

 

 

가상화. CS의 핵심

 

지난번에 포스팅한 '캐싱'에 이어 '가상화(추상화)'라는 콘셉트도 운영체제부터 시작해서 애플리케이션까지 IT의 전반적인 핵심 개념인 것 같네요. 어떤 과목을 공부하든 계속 보게 되는 것 같습니다.

 

저는 도커를 최근 웹 프로젝트를 진행하며 사용해 보았습니다. 이전까지는 주변에서 도커라는 단어와, "도커가 필수이다. 도커 진짜 좋다". 라는 말들을 듣기만 했습니다.

 

궁금하긴 했습니다. 도커가 도대체 뭔데 이렇게 내 귀에 많이 들려오는 건지.. 그리고 가끔 대학 강의를 진행할 경우에도 환경설정을 할 경우 도커를 이용하라는 선택지가 있었는데 저를 포함한 대부분의 학생들이 도커의 개념을 모르고 그냥 로컬에 환경을 구성하였습니다.

 

하지만, 직접 웹 프로젝트를 진행하며 도커의 진면목을 느낄 수 있었습니다. 이제까지 주변에서 왜 도커가 필수이고 정말 좋다고 했는지 알게 되었습니다.

 

오늘은 도커에 관해 정리해보려고 합니다. 도커를 잘 모르는 다른 사람들(특히 동기들)에게도 도커를 알려주고 싶은 마음이 드네요.




컨테이너화의 이해

컨테이너화란?

컨테이너화는 애플리케이션과 그것이 동작하는데 필요한 환경을 패키징 하는 프로세스를 말합니다. 컨테이너화된 애플리케이션은 다양한 환경에서 일관성 있게 동작하며, 이를 통해 개발, 테스트, 배포 과정이 단순화되고 효율화됩니다.


 

컨테이너화 도구의 필요성

컨테이너화 도구를 사용하면 애플리케이션의 배포와 스케일링을 쉽게 할 수 있습니다. 또한, 컨테이너화 도구를 통해 애플리케이션과 서비스를 빠르게 시작하고 중단할 수 있으며, 필요에 따라 리소스를 유연하게 할당하거나 재할당할 수 있습니다.


 

주요 컨테이너화 도구

1. Docker

Docker는 가장 널리 알려진 컨테이너화 도구 중 하나입니다. Docker를 사용하면 애플리케이션을 컨테이너에 패키징하여, 다양한 환경에서 동일하게 실행시킬 수 있습니다. Docker는 이미지라는 개념을 사용하여, 이 이미지를 이용해 컨테이너를 생성하고 실행합니다.

2. Kubernetes

Kubernetes는 컨테이너화된 애플리케이션의 배포, 스케일링, 및 관리를 자동화하는 오픈소스 플랫폼입니다. Kubernetes는 클러스터 기반의 아키텍처를 가지고 있으며, 이를 통해 애플리케이션의 고가용성과 확장성을 보장합니다.

 

제 프로젝트는 특정 시간에 특정 컨테이너를 실행해야합니다. Kubernetes도 제 프로젝트에 필요성을 느끼고 있지만 아직 적용하지는 못한 상태입니다. 후에 시간이 나면 사용해 봐야겠네요.

3. OpenShift

OpenShift는 Red Hat이 제공하는 컨테이너화 플랫폼으로, Docker와 Kubernetes를 기반으로 합니다. OpenShift는 개발, 운영, 보안 팀이 컨테이너화된 애플리케이션을 개발하고 관리하는 것을 돕습니다.


 

컨테이너화의 이점

컨테이너화는 다음과 같은 이점을 제공합니다.

  • 환경 일관성: 컨테이너화된 애플리케이션은 다양한 환경에서 일관성 있게 동작합니다. 이로 인해 "내 컴퓨터에서는 잘 동작했는데..."라는 문제를 피할 수 있습니다.
  • 빠른 배포와 롤백: 컨테이너화된 애플리케이션은 빠르게 배포하고 롤백할 수 있습니다. 이는 애플리케이션의 업데이트 또는 버그 수정을 빠르게 반영할 수 있음을 의미합니다.
  • 리소스 효율성: 컨테이너는 가상 머신에 비해 훨씬 적은 리소스를 사용합니다. 이는 애플리케이션을 더 효율적으로 실행할 수 있음을 의미합니다.

 

가상화의 이해

가상화란?

가상화는 하나의 물리적 자원을 여러 개의 가상 자원으로 나누는 기술을 말합니다. 가상화를 통해 서버, 스토리지, 네트워크 등의 IT 인프라를 더 효율적으로 사용할 수 있게 됩니다.

가상화 도구의 필요성

가상화 도구를 사용하면 하드웨어 리소스를 더 효율적으로 사용할 수 있습니다. 또한, 가상화 도구를 통해 여러 운영 체제를 한 대의 머신에서 동시에 실행할 수 있으며, 이는 애플리케이션 테스트와 배포를 더욱 단순화시키고 빠르게 진행할 수 있게 합니다.

주요 가상화 도구(가상머신)

1. VMware vSphere

VMware vSphere는 가장 널리 사용되는 가상화 도구 중 하나입니다. vSphere는 서버 가상화를 가능하게 하는 ESXi 하이퍼바이저와 가상 인프라를 관리하는 vCenter Server로 구성되어 있습니다.

2. Microsoft Hyper-V

Microsoft Hyper-V는 Microsoft가 제공하는 가상화 도구로, Windows 서버에 내장되어 있습니다. Hyper-V를 이용하면 여러 운영 체제를 한 대의 머신에서 동시에 실행할 수 있습니다.

3. Citrix XenServer

Citrix XenServer는 클라우드 서비스 제공업체와 대형 데이터 센터에서 사용하기 위해 설계된 가상화 도구입니다. XenServer는 많은 가상 머신을 관리하고, 고성능, 고밀도, 고가용성을 제공합니다.

가상화와 컨테이너화의 차이

가상화와 컨테이너화는 비슷해 보일 수 있지만, 기본적인 차이가 있습니다. 가상화는 하드웨어를 추상화하여 여러 가상 머신을 생성하고, 각 가상 머신에 운영 체제를 설치합니다. 반면, 컨테이너화는 운영 체제 수준에서 추상화를 제공하여, 컨테이너라는 격리된 공간에서 애플리케이션과 그 의존성을 패키징 합니다. 따라서 컨테이너화는 가상화에 비해 더 가볍고 빠르게 실행될 수 있습니다.


 

그래서 도커(Docker)란?

도커는 컨테이너 기반의 오픈소스 가상화 플랫폼입니다. 도커를 사용하면 애플리케이션과 그 의존성을 '컨테이너'라는 패키지로 묶어서 배포하고 실행할 수 있습니다. 이 컨테이너는 어디서든 동일하게 동작하므로, 애플리케이션의 배포와 관리를 간소화하고 효율화할 수 있습니다.


 

도커의 핵심 요소

도커는 크게 이미지와 컨테이너, Dockerfile이라는 세 가지 핵심 요소로 구성됩니다.

1. 이미지

도커 이미지는 컨테이너를 생성하는 데 필요한 모든 정보를 가지고 있습니다. 이미지는 여러 개의 '레이어'로 구성되며, 각 레이어는 Dockerfile의 한 명령에 해당합니다.

2. 컨테이너

컨테이너는 이미지를 실행한 결과, 즉 실제로 동작하는 애플리케이션 인스턴스를 말합니다. 하나의 이미지로 여러 개의 컨테이너를 생성할 수 있으며, 각 컨테이너는 독립적으로 동작합니다.

3. Dockerfile

Dockerfile은 이미지를 생성하기 위한 '레시피'입니다. Dockerfile은 여러 개의 명령을 순서대로 기술하며, 이 명령들은 애플리케이션의 코드를 복사하거나, 필요한 라이브러리를 설치하는 등의 작업을 수행합니다.


 

도커의 장점

도커는 다음과 같은 여러 가지 장점을 가지고 있습니다.

1. 환경 일관성

도커 컨테이너는 어디서든 동일하게 동작하므로, 개발 환경과 운영 환경 간의 차이를 최소화할 수 있습니다. 이는 "내 컴퓨터에서는 잘 동작하는데…"라는 문제를 피할 수 있습니다.

2. 빠른 배포와 롤백

도커 이미지는 불변(immutable) 하기 때문에, 새로운 버전의 애플리케이션을 배포할 때마다 새로운 이미지를 생성하고 이를 실행하는 방식으로 배포를 진행합니다. 이를 통해 배포와 롤백을 빠르고 안전하게 수행할 수 있습니다.

3. 높은 이식성

도커 컨테이너는 어떤 도커 엔진에서도 실행될 수 있으므로, 다양한 플랫폼과 환경에서 애플리케이션을 실행할 수 있습니다. 이는 클라우드 환경으로의 이전을 쉽게 만들어 줍니다.


 

가상 머신 vs 도커

1. 리소스 사용

가상 머신은 각각의 운영 체제를 가지고 있기 때문에 많은 리소스를 사용합니다. 반면에 도커 컨테이너는 호스트 시스템의 운영 체제를 공유하므로, 훨씬 적은 리소스를 사용합니다. 이는 도커가 더 효율적인 리소스 관리를 가능하게 한다는 것을 의미합니다.

2. 시작 시간

가상 머신은 전체 운영 체제를 시작해야 하므로 시작 시간이 상대적으로 길다. 반면에 도커 컨테이너는 애플리케이션과 그 필요한 라이브러리만 로드하면 되므로 시작 시간이 매우 짧습니다.

3. 이식성

도커 컨테이너는 도커 엔진이 설치된 어떤 시스템에서도 실행될 수 있습니다. 이는 컨테이너가 호스트 시스템의 운영 체제를 공유하기 때문입니다. 이로 인해 애플리케이션의 배포와 이동이 더욱 쉬워집니다.

4. 관리

도커는 이미지 기반의 시스템을 사용하여, 컨테이너의 생성, 배포, 복제를 쉽게 할 수 있습니다. 또한, 도커는 Dockerfile이라는 스크립트를 통해 컨테이너의 설정을 코드로 관리할 수 있어, 버전 관리와 재사용이 용이합니다.


 

대학 강의를 수강하다 보면, 리눅스를 사용해야 하는 경우가 많았습니다. 제 PC는 윈도 기반이라 이 경우 처음에 가상 머신을 사용하여 리눅스를 사용해야 했습니다. 그래서 처음 사용해 본 가상머신은 뭔가 너무 무겁고 불편했습니다.

 

하지만 도커로 신세계를 맞이했네요.

반응형