본문 바로가기
바이브코딩

도커의 모든 것: 완벽한 밀키트

by ethanjoh 2026. 7. 5.

기술이 발전할 수록 알아야 할 것도 참 많아집니다.

이번엔 도커에 대해서 알아보겠습니다.

 


도커(Docker)를 사용하는 가장 핵심적인 이유는 **프로그램을 어떤 환경에서든 에러 없이 일관되게 설치하고 실행할 수 있는 '이식성(Portability)'**을 확보하고, 개발 및 배포 과정의 비효율성을 없애기 위함입니다.

도커가 현대 소프트웨어 개발에서 필수가 된 구체적인 이유는 다음과 같습니다.

1. 완벽한 환경 일관성 ("내 컴퓨터에서는 되는데 왜 서버에선 안 되지?" 해결)

이전에는 개발자의 PC에서 잘 작동하던 코드가 테스트 서버나 운영 서버에 배포되면 OS 버전 차이, 라이브러리 누락, 미세한 설정 값 차이 등으로 인해 에러가 발생하는 일이 흔했습니다. 도커는 애플리케이션 소스 코드뿐만 아니라 실행에 필요한 런타임, 라이브러리, 시스템 도구, 환경 설정 등 모든 것을 '밀키트(Lunchable)'처럼 하나의 이미지로 패키징합니다. 이 덕분에 개발, 테스트, 운영 서버 등 도커가 설치된 곳이라면 어디서든 완벽히 동일하게 동작합니다.

2. 의존성 충돌 방지 및 '의존성 지옥(Dependency Hell)' 해결

동일한 컴퓨터 내에서 여러 프로젝트를 진행할 때, 각각 다른 버전의 소프트웨어가 필요하면 심각한 충돌이 일어납니다. 예를 들어 한 프로그램은 Node.js 14버전이 필요한데 다른 프로그램은 9버전이 필요하거나, Java 1.7과 1.8 버전이 동시에 필요할 때 설정이 꼬이게 됩니다. 도커를 사용하면 각 애플리케이션이 격리된 컨테이너라는 독립 장벽 안에서 실행되므로, 호스트 시스템이나 다른 프로그램에 간섭하지 않고 여러 환경을 한 컴퓨터 안에서 조화롭게 구동할 수 있습니다.

3. 기존 가상 머신(VM) 대비 압도적인 효율성 (가볍고 빠름)

기존의 가상 머신(VM)은 독립된 환경을 만들기 위해 하이퍼바이저 위에 매번 무거운 운영체제(Guest OS)를 통째로 설치해야 해서 부팅에 몇 분이 걸리고 기가바이트(GB) 단위의 용량을 낭비했습니다. 반면 도커는 호스트 OS의 커널(심장부)을 그대로 공유하면서 애플리케이션 실행에 필요한 최소한의 라이브러리만 담기 때문에 메가바이트(MB) 단위로 매우 가볍고, 실행 속도 역시 수 밀리초(ms)에서 수 초에 불과합니다. 시스템 자원(CPU, 메모리, 스토리지)을 고정 할당하지 않고 필요한 만큼 동적으로 나누어 쓰므로 네이티브에 준하는 고성능을 낼 수 있습니다.

4. 개발 환경 세팅의 극적인 단순화 및 협업 효율화

새로운 팀원이 합류하거나 새로운 데이터베이스(예: PostgreSQL, Redis 등)를 테스트해야 할 때, 길고 까다로운 설치 문서를 보며 반나절 동안 삽질할 필요가 없습니다. 도커 환경에서는 공식 이미지 저장소(Docker Hub) 등에서 필요한 이미지를 찾아 명령어 한 줄만 실행하면 몇 초 만에 완벽히 설정된 서비스 환경이 로컬 컴퓨터에 구동됩니다. 개발팀이 운영팀에 배포 지침을 전달할 때도 복잡한 텍스트 가이드 대신, 코드 실행 조건이 명시된 Dockerfile이나 Docker Compose 파일만 넘겨주면 되므로 불필요한 소통 오버헤드가 사라집니다.

5. 유연한 시스템 확장과 현대적 아키텍처(MSA) 지원

도커는 필요할 때 컨테이너를 빠르게 띄우고 지울 수 있는 **불변성(Immutability)**을 지닙니다. 이 특징 덕분에 서비스 트래픽이 몰릴 때 순식간에 컨테이너를 수십 개로 늘려 대응하고(Scale-out), 불필요해지면 즉시 지워 서버 자원을 효율화하기가 매우 쉽습니다. 이는 대형 웹 서비스를 잘게 쪼개어 가볍고 신속하게 관리하는 마이크로서비스 아키텍처(MSA) 및 지속적 배포(CI/CD) 자동화를 구현하는 데 강력한 밑바탕이 됩니다.

6. 컴퓨터를 항상 깨끗하게 유지 일반적인 방식으로 프로그램을 설치하면 삭제 후에도 시스템에 수많은 찌꺼기 파일과 라이브러리가 남아 컴퓨터가 지저분해집니다. 하지만 도커 컨테이너는 격리된 채 실행되므로, 사용이 끝나면 컨테이너와 이미지만 깔끔하게 삭제하여 호스트 컴퓨터 상태를 항상 깨끗하게 보존할 수 있습니다.

 

 


 

종종 여러 사람이 협업을 하다보면 분명 내 컴퓨터에서는 실행이 됐는데 다른 사람의 컴퓨터에 가져가면 안되는 경우가 발생합니다.

무언가 의존성있는 파일들이 누락되었기 때문에 소스만 가져가서는 안될 일이었죠.

이런 문제를 해결해주기 위해 나온 것이 도커입니다.

 

모든 재료들을 다 넣어놨기 때문에 가져가서 포장을 뜯고 요리만 하면 됩니다.

그럼 기존에 가상머신이라는 것도 있었는데 이 기술과는 뭐가 다를까요?

 

 

 

 


 

도커(Docker)와 기존 가상 머신(VM, Virtual Machine)의 가장 핵심적인 차이점은 **‘무엇을 가상화하느냐’**와 **‘운영체제(OS)를 어떻게 처리하느냐’**에 있습니다.

이를 쉽게 이해할 수 있도록 5가지 주요 차이점으로 나누어 설명해 드리겠습니다.

1. 구조적 차이 (운영체제 포함 여부)

  • 가상 머신 (VM): 하드웨어를 가상화합니다. 하이퍼바이저(Hypervisor)라는 기술을 이용해 물리적 서버 위에 여러 개의 가상 컴퓨터를 만들고, 각각의 가상 컴퓨터마다 윈도우나 리눅스 같은 '게스트 운영체제(Guest OS)'를 통째로 설치하여 구동합니다.
  • 도커 (Docker): 애플리케이션(소프트웨어) 계층을 가상화합니다. 무겁게 별도의 운영체제를 또 설치하지 않고, 원래 컴퓨터가 돌리고 있는 '호스트 운영체제(Host OS)'의 심장부(커널)를 공유합니다. 그 위에서 애플리케이션과 구동에 필요한 파일만 묶어 '컨테이너(Container)'라는 격리된 방을 만들어 실행합니다.

2. 용량과 무게

  • 가상 머신 (VM): 운영체제 전체가 펌함되어야 하므로 파일 크기가 기가바이트(GB) 단위로 매우 무겁고 큽니다.
  • 도커 (Docker): 운영체제의 커널을 뺀 필수 라이브러리와 애플리케이션만 포함하므로, 크기가 메가바이트(MB) 단위로 매우 가볍습니다.

3. 부팅 및 실행 속도

  • 가상 머신 (VM): 실행할 때마다 컴퓨터를 켜듯 운영체제를 처음부터 전부 부팅해야 하므로 수 분(Minutes) 단위의 긴 시간이 걸립니다.
  • 도커 (Docker): 이미 켜져 있는 호스트 컴퓨터의 운영체제를 그대로 활용하여 프로세스만 띄우기 때문에, 밀리초(ms)에서 수 초 내에 즉각적으로 실행됩니다.

4. 시스템 자원(CPU, 메모리)의 효율성

  • 가상 머신 (VM): 각 가상 머신마다 CPU, 메모리 등의 시스템 자원을 고정적으로 잘라서 할당해야 하므로 오버헤드가 크고 자원 낭비가 발생하기 쉽습니다. 한 컴퓨터에서 구동할 수 있는 VM의 개수도 제한적입니다.
  • 도커 (Docker): 컴퓨터의 자원을 미리 떼어주지 않고, 여러 컨테이너가 호스트의 자원을 동적으로 효율적이게 나누어 씁니다. 그래서 똑같은 성능의 하드웨어라도 VM보다 훨씬 더 많은 수의 컨테이너를 동시에 가동할 수 있습니다.

5. 운영체제 호환성

  • 가상 머신 (VM): 각각 독립된 OS를 가지므로, 맥(Mac)이나 윈도우 컴퓨터 위에서도 완전한 리눅스를 띄울 수 있고 반대의 경우도 자유롭습니다.
  • 도커 (Docker): 호스트 컴퓨터의 OS 커널을 공유하기 때문에, 기본적으로 호스트와 운영체제 계열이 같은 컨테이너만 띄울 수 있습니다 (예: 리눅스 커널에서는 리눅스 컨테이너만 가능). 다만, 윈도우나 맥 사용자를 위해 '도커 데스크톱(Docker Desktop)'이 내부적으로 아주 가벼운 리눅스 가상 머신을 몰래 띄워주는 방식으로 이 호환성 문제를 해결하고 있습니다.

💡 요약하자면: 가상 머신(VM)이 컴퓨터 안에 **"별도의 완벽한 컴퓨터들을 통째로 여러 대 짓는 것"**이라면, 도커(Docker)는 하나의 큰 집(운영체제) 안에서 **"방만 나누어 주방, 거실 등(커널)은 공유하며 가볍게 살아가는 쉐어하우스"**와 같습니다. 이러한 압도적인 효율성과 가벼움 덕분에 현대의 개발과 배포 환경에서 도커가 필수적으로 사용되고 있습니다.

 


 

 

한국의 인터넷 환경에서 맥컴퓨터를 쓴다는 것은 쉽지 않았습니다.

엑셀, 워드로 만든 문서도 많았고, 무엇보다 은행에 한번 접속하면 그 수많은 보안프로그램 때문에 맥에서는 은행을 이용할 수가 없어 패럴렐즈나 버추얼박스같은 가상머신을 깔고 그 안에 윈도우 OS를 통째로 설치했습니다. 또는 리눅스를 설치할 수도 있었죠.

맥의 자원을 분배하면서 써야 했습니다.

 

하지만 도커는 그런 하드웨어 자원을 공유하는 것이 아니라 필요한 라이브러리 등만을 묶어주기 때문에 용량이 훨씬 작습니다.

 

https://youtu.be/Sglo-dxGzGM?si=Wj7x0nlW53MMf-TC