콘텐츠로 건너뛰기

3-4. 바이브 코딩 핵심 인프라 도커(Docker)

  • 기준

앞서 호스팅 및 도메인 연결 그리고 IDE와 WSL까지 선택하고 설치 했다면 이제 본격적으로 바이브 코딩할 거의 모든 여건이 마련된거나 마찬가지 입니다.

실전 학습은 WSL2이란 윈도우 11기반의 가상환경(Ubuntu 24.0)에 바이브 코딩을 할 예정입니다.

다만 이러한 가상환경은 근접하게 실제 리얼서버의 환경을 흉내 내었다 해도 비슷한 것이지 똑같은 것이 아니여서 프로젝트 완료후에 호스팅 서버로 코드를 이식하고 실제 서비스를 한다면 많은 오류가 나타 날 수 있습니다.

그렇지만 고맙게도 과거 우리 선배 하드코어 코딩러들은 이러한 여러 OS 환경에도 불구하고 하나의 패키지 또는 소프트웨어 플랫폼 만 설치하면 OS와 그에 따른 환경과 상관없이 어디에서나 동일하게 작동할수 있게 하는 툴을 만들었습니다.

이를 도커(Docker)라고 하며 복잡한 서버 환경 설정을 하나의 ‘표준화된 박스(컨테이너)’로 만드는 기술입니다.

Docker: 마법의 밀키트 상자 (환경 일관성)

컨테이너와 이미지

도커를 이해하기 위해서는 이미지(Image)와 컨테이너(Container)의 차이를 아는 것이 중요합니다. 이미지와 컨테이너라는 두가지의 개념이 필요한지 이유는 하나의 이미지로 여러 컨테이너를 만들수 있고 이렇게 만들어진 컨테이너는 각각 별개로 동작이 가능하기 때문입니다. 또한 각각의 컨테이너는 설정도 다르게 할수 있습니다.

💡 이미지 (Image): 요리의 ‘레시피’이자 ‘냉동 밀키트’

컨테이너 즉 실행에 필요한 모든 것(코드, 런타임, 라이브러리, 환경 변수 등)이 포함된 읽기 전용 파일입니다.

한 번 만들어진 이미지는 변하지 않습니다. “내 컴퓨터에서 만든 이미지”와 “Vultr 서버에서 실행할 이미지”는 100% 동일합니다.

📦 컨테이너 (Container): 레시피로 만든 ‘실제 요리’

이미지를 실행한 상태입니다. 하나의 이미지로 여러 개의 컨테이너를 띄울 수 있습니다. 그리고 독립된 공간에서 실행되므로, 한 컨테이너가 고장 나도 다른 컨테이너가 호스트 OS(내 컴퓨터)에는 영향을 주지 않습니다.

바이브 코딩에 왜 ‘도커’를 사용해야 하는가?

단순하게 프론트엔드만 있는 웹페이지나 웹서비스를 만든다고 가정하면(백엔드 없는) 도커(Docker)는 필요 없습니다.

그러나 앞으로 실슬을 진행할 예정인 파이낸싱 서비스같이 빈번한 데이터수집 가공 제공 서비스는 여러 서비스를 사용해야 하며 로컬 환경에서 개발된 코드가 리얼서버로 이식할때 도커 없이 실제 코드를 복사해서 이식하면 OS, 라이브러리, 프레임워크 등 설정을 맞추는데 많은 시간이 들고 결과적으로 완벽하게 서비스 된다는 보장이 없습니다.

따라서 도커(Docker)사용은 필수 입니다.

하나, “내 컴퓨터에서는 잘 되는데요?” 현상 해결 (환경 일관성)

개발자의 OS(Windows, Mac)와 실제 서버의 OS(Linux)는 기본적으로 다르고 같은 설정을 맞출 수가 없습니다. 파이썬(코딩 언어) 버전, 라이브러리 충돌, 경로 문제 등 수많은 변수가 존재합니다.

도커는 환경 자체를 박스에 담아 옮기기 때문에 어디서나 똑같이 작동합니다.

둘, 가볍고 빠른 실행 (경량화)

과거에는 가상 머신(VM)을 써서 OS 위에 또 다른 OS를 설치했습니다. 하지만 도커는 호스트의 커널(어려운 단어인데 OS의 머리)을 공유하면서 프로세스만 격리합니다.

👉 VM: 부팅에 몇 분 소요, 기가바이트(GB) 단위 용량.

👉 Docker: 부팅에 몇 초 소요, 메가바이트(MB) 단위 용량.

셋, 마이크로서비스 아키텍처(MSA)의 최적화

‘바이브 코딩’은 효율성을 중시합니다.

  • Python 컨테이너 (백엔드)

  • Next.js 컨테이너 (프론트엔드)

  • PostgreSQL 컨테이너 (데이터베이스) 이들을 각각 분리하여 관리하면, 데이터베이스를 업데이트할 때 서버 전체를 끄지 않아도 됩니다.

도커의 꼭 알아야 할 기초 명령어
  • docker pull [이미지]도커 허브에서 이미지를 다운로드합니다.

  • docker run [이미지]이미지를 바탕으로 컨테이너를 생성하고 실행합니다.

  • docker ps현재 실행 중인 컨테이너 목록을 확인합니다.

  • docker stop [ID]실행 중인 컨테이너를 중지합니다.

  • docker rm [ID]컨테이너를 삭제합니다.

  • docker images내 컴퓨터에 다운로드된 이미지 목록을 봅니다.

운영체제별 도커(Docker) 설치 방법을 단계별로 정리해 드립니다.

도커 설치

🪟 Windows에서 도커 설치
  1. 다운로드 및 설치 : Docker공식 웹사이트에서 Windows용 Docker Desktop 설치 파일(.exe)을 다운로드하여 실행합니다.(https://www.docker.com/products/docker-desktop/)

  1. 권장 설정: 설치 마법사 진행 중 “Use WSL 2 instead of Hyper-V” 옵션을 선택하여 WSL 2 기반 엔진을 사용하는 것이 좋습니다.

💡 오류 해결

  • Hyper-V 오류: 설치 후 hardware assisted virtualization and data execution protection must be enabled in the bios 오류가 발생하면, ‘Windows 기능 켜기/끄기’에서 Hyper-V를 활성화하거나 BIOS에서 가상화(VT-x)를 켜야 합니다.

  • WSL 커널 오류: Docker Desktop requires a newer WSL kernel version 메시지가 뜨면 명령 프롬프트에서 wsl --install 또는 wsl --update를 입력해 업데이트합니다.

🍎 macOS에서 도커 설치

맥 환경에서는 공식 홈페이지 다운로드 또는 Homebrew를 이용한 두 가지 설치 방법이 있습니다.

  • 공식 사이트 이용: 공식 홈페이지에서 Mac용 Docker Desktop(.dmg)을 다운로드합니다. M1~M4 등 Apple Silicon 칩 사용자는 ‘Mac with Apple Chip’ 버전을 선택해야 합니다. 다운로드한 파일을 더블클릭한 후 Docker 아이콘을 Applications 폴더로 드래그하여 설치합니다.

  • Homebrew 이용: 터미널을 열고 brew install --cask docker 명령어를 입력하여 설치할 수 있습니다.

  • 초기 설정: 처음 실행 시 macOS의 “보안 및 개인 정보 보호” 설정에서 권한을 허용해야 할 수 있습니다.

🐧 Linux (Ubuntu)에서 도커 설치

우분투 서버에서는 터미널 명령어를 통해 도커 엔진을 설치합니다.

  1. 패키지 업데이트 및 필수 패키지 설치: sudo apt-get update를 실행한 후, ca-certificates, curl, gnupg 등의 필수 패키지를 설치합니다.

  2. GPG 키 및 저장소 추가: Docker 공식 GPG 키를 다운로드하여 시스템에 등록하고, 도커 패키지 저장소(repository)를 추가합니다.

  3. 도커 엔진 설치: 다시 sudo apt-get update로 목록을 갱신한 뒤, sudo apt-get install docker-ce docker-ce-cli containerd.io 명령어를 실행하여 설치를 완료합니다.

✅ 설치 확인 및 테스트 (공통)

설치가 올바르게 되었는지 확인하려면 터미널(명령 프롬프트/PowerShell)을 열고 다음 명령어를 입력합니다.

  • 버전 확인: docker --version (또는 docker -v)를 입력하여 버전 정보가 정상적으로 출력되는지 확인합니다.

  • Hello World 테스트: docker run hello-world 명령어를 실행합니다. “Hello from Docker!”라는 메시지가 출력되면 도커가 정상적으로 작동하고 있는 것입니다.

💡 Docker와 WSL2 연동 방법
  1. Windows에서 실행 중인 Docker Desktop 애플리케이션 화면을 띄웁니다.

  1. 우측 상단의 톱니바퀴(Settings) 아이콘을 클릭합니다. 왼쪽 메뉴에서 Resources > WSL integration을 선택합니다.

“Enable integration with my default WSL distro” 옵션에 체크되어 있는지 확인합니다. (보통 기본으로 체크되어 있습니다.)

그 바로 아래, “Enable integration with additional distros:” 부분에 현재 사용 중인 WSL 배포판 이름(예: Ubuntu, Ubuntu-24.04 등)이 리스트로 쭉 나올 텐데요, 여기서 해당 배포판 이름의 토글 스위치를 켭니다(On).

  1. 우측 하단의 [Apply & restart] 버튼을 눌러 적용합니다.

적용이 완료된 후, WSL 터미널(또는 지금 제가 띄워놓은 창)에서 다시 docker run hello-world를 입력해 보시면 Windows에 설치된 Docker 엔진을 그대로 쓸 수 있게 됩니다.

🤖 프론트엔드를 도커로 만들기

✨ 사용자의 의도(Vibe)

"frontend를 도커 컨테이너로 만들어줘"

💻 AI가 생성한 코드 (Syntax)

  1. frontend/Dockerfile
# 1. 의존성 설치 환경FROM node:20-alpine AS deps# Alpine 리눅스 호환성 패키지 설치RUN apk add --no-cache libc6-compatWORKDIR /app# package.json 및 package-lock.json 복사COPY package.json package-lock.json* ./# 의존성 설치 (캐시 우선순위로 변경된 의존성 패키지가 있을 때만 이 단계가 실행됨)RUN npm ci# 2. 애플리케이션 빌드 단계FROM node:20-alpine AS builderWORKDIR /appCOPY --from=deps /app/node_modules ./node_modulesCOPY . .# 프로덕션 빌드 캐시 비활성 및 Next.js 원격 지원 끔… 이하 생략 …# 애플리케이션 실행CMD ["node", "server.js"]

에이전트에서 직접 docker build -t frontend-dashboard .를 실행하려고 했으나 현재 WSL 환경에서 일반 사용자의 Docker 데몬 소켓 접속 권한이 없어 오류가 발생하고 있습니다 (sudo 권한 필요).

  1. “sudo의 비밀번호는 0000이야 다시 도커를 빌드해줘”(만약에 비밀번호를 밝히는게 꺼려지면 터미널에 직접 명령을 하면 됩니다.) <아래와 같이 도커 데스크탑에 컨테이너가 생성됨>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다