글 업데이트 로그
2025.04.08 - 글 일부 수정, 가독성 개선
최근에 인수인계를 진행하면서 Docker를 설명할 일이 있었다.
근데 생각보다 설명하기가 쉽지 않았다..
“가상화를 통해서 운영체제나 환경의 제약없이 Docker가 환경을 똑같이 구성해준다.”
이게 내가 Docker에 대해 아는 전부였는데 막상 ‘VMware랑의 차이는 뭘까?’ 설명이 어려웠다.
차이가 궁금해져서 포스팅을 남기려고 한다. 작성하려 한다.
1. 도커가 필요한 이유
먼저 도커가 왜 필요한지 이유에 대해서 알아보자.
우리는 환경의 차이로 인한 문제들을 많이 겪는다.
예를 들어, 윈도우에서 압축한 파일을 macOS에 압축을 풀었을 때,
ㅇㅣㄱㅓㅇㅗㅐ... 파일 이름이 이렇게 깨지는 경우를 많이 볼 수 있다.
또한, 보안 프로그램들이 macOS에서는 설치되지 않는 문제도 많다.
웹 개발에서 환경이 달라졌을 때, 의존성 설치를 위해 npm install을 실행한다.
하지만 의존성 충돌 문제가 발생하기 시작하거나, 에러 로그가 뜬다.
웹 개발을 해봤다면 익숙한 경험 아닌가? 우리는 이런 환경 차이로 인한 의존성 충돌을 자주 겪는다.
간단한 노드 버전 오류라면 괜찮지만, 아니라면 해당 에러들을 해결하기 위해 시간이 필요하다.
이처럼 환경이 달라지는 것은 피곤하다. 하지만 도커가 이 문제를 해결해준다.
도커 파일에 필요한 환경 설정을 정의하고 이를 기반으로 컨테이너를 실행하면, 도커만 설치되어 있다면 어떤 운영체제에서든 동일한 환경으로 프로젝트를 실행할 수 있다.
이는 도커가 컨테이너 기술을 통해 애플리케이션과 그 실행 환경을 하나로 감싸서 개발 환경과 서버 환경을 일치시켜주기 때문인데, 솔직히 세부 기술은 이해하기 어려웠다…
2. 도커, VMware 차이
글을 쓰기 이전에 제일 먼저 궁금했던 내용이다.
둘 다 가상화 기술을 쓰는데 도커와 VM의 차이는 무엇일까?
리소스 사용량
VMware, Virtual Box 등의 가상화 플랫폼은 운영체제를 포함한다.
즉, 컴퓨터 리소스를 많이 사용한다.
내 소중한 M3 맥북 프로에서 VM 관련 프로세스를 점유율을 확인해봤다.
관련 프로세스가 점유하는 메모리가 무려 25GB에 달한다…
(저게 뭔데 25GB나…)
그림에서 왼쪽이 VM, 오른쪽 도커이다. 그림을 살펴보면 VM에서는 OS를 포함한다.
Docker 기반의 컨테이너는 OS를 포함하지 않고, 컨테이너 엔진이 설치된 Host OS를 공유한다.
Host OS를 포함하지 않기 때문에 도커가 더 가볍고 빠르다.
Host OS 사용 유무
도커는 HostOS를 사용한다. 이를 위해 LinuX Containers라는 리눅스 커널 기술이 이용된다.
리눅스 컨테이너를 만들고, 리눅스 컨테이너 상에 별도로 구성된 파일 시스템에 실행할 수 있는 기술이다.
초기 도커는 리눅스 컨테이너스를 사용했지만, 현재는 도커에서 개발한 별도의 기술을 만들어 쓴다고 한다.
아래 블로그에 해당 내용이 설명되어있다.
나는 이해가 어려웠다…
3. 도커 활용
앞서 설명한 것처럼 개발 환경의 불일치를 해결하는 데 도커를 활용할 수 있다.
또한 도커의 컨테이너는 독립적으로 실행이 가능하다는 장점이 있다.
그래서 최근 대두되는 마이크로 서비스 아키텍처(MSA)에 적합하다.
MSA는 소비자의 니즈가 빠르게 변화하는 상황에서 유용하다.
서비스가 방대해질수록 작은 코드 변경에도 배포 시간이 많이 소요되기 때문이다.
이러한 문제를 해결하기 위해 세부 서비스를 빠르게 업데이트할 수 있는 마이크로 서비스 구조가 등장하게 되었다.
마이크로 서비스 아키텍쳐(MSA)
•
모놀리틱 구조(Monolithic Architecture): 하나의 서버에 모든 기능을 넣음. 일반적으로 모노레포라고 줄여서 말한다.
•
마이크로 서비스 아키텍쳐(MSA): 여러 서버에 각 기능을 분산해 놓은 후, REAT API 등으로 통신을 통해 전체 서비스를 운영.
실제로 하나의 웹 어플리케이션에서도 2개의 프론트엔드 프로젝트가 연동된 경우가 있다.
이런 경우, 도커를 사용한다면 더 간편하게 빌드 관리를 할 수 있다.
물론 컨테이너 연결이 네트워크 이해도도 있어야 하고 난이도가 있다.
지속적인 학습이 필요하다.
정리하자면,
•
일관된 개발 환경 제공
•
운영체제나 의존성 버전 차이로 인해 로컬 개발 환경과 실배포 환경 간의 불일치 해결
•
컨테이너 이미지를 공유하여 협업 속도를 높일 수 있음.
정리
Docker는 단일 이미지만 관리하면 되어 매우 편리하며,
배포 후 장애가 발생하더라도 이전 버전의 이미지로 쉽게 롤백 가능
반면 FTP 배포 방식은 사전 백업이 필요하고,
배포 후 서버에서 애플리케이션 프로세스를 재시작하는 과정이 복잡
즉, 정리하자면
•
일관된 개발 환경 제공
•
운영체제나 의존성 버전 차이로 인해 로컬 개발 환경과 실배포 환경 간의 불일치 해결
•
컨테이너 이미지를 공유하여 협업 속도를 높일 수 있음.
•
VM은 OS를 포함한 무거운 아키텍처, Docker는 컨테이너 엔진으로 Host OS를 공유해 빠르고 가벼움.