SW/Kubernetes, Docker

Docker Compose 쉽게 시작하기: 백엔드, 프론트엔드, DB 한 번에 띄우는 방법

얇은생각 2025. 9. 17. 07:30
반응형

처음 웹 앱 만들었을 때, 솔직히 서버 하나만 잘 돌면 되는 줄 알았어요. 그런데 조금만 기능이 늘어나면 어때요? frontend도 있어야 하고, backend도 따로 돌아가야 하고, database도 빠질 수 없죠. 이거 하나하나 컨테이너 따로 띄우고 연결하고 있다 보면 진짜 정신없습니다. 예전에 저도 그렇게 고생 좀 했는데, 그때 알게 된 게 바로 Docker Compose예요. 이건 진짜 신세계였어요. 모든 컨테이너를 한 줄 명령어로 띄우고, 서로 잘 연결되게 만들어주는 도우미 같은 존재예요.

 

 

프로젝트 구성? 별 거 없어요

  • 예제로 사용하는 프로젝트는 backend와 frontend 두 가지로 구성됨
  • 각 폴더에는 Dockerfile이 존재하며 Compose에서 필수적으로 사용됨
  • Dockerfile은 Compose에서 반드시 필요하며 대체가 아닌 기반으로 작동함

지금 예제로 쓰는 프로젝트는 예전 강의에서 만든 거예요. backend 하나, frontend 하나 딱 두 개인데, 각자 폴더에 Dockerfile 잘 챙겨놨어요. 이게 핵심이에요. Compose는 이 Dockerfile들을 기반으로 돌아갑니다. ‘이거 빼고도 되지 않을까?’ 싶어도 꼭 필요해요. Compose는 그걸 대체하는 게 아니라, 활용하는 거니까요.

 

 

왜 굳이 Compose냐고요?

  • 구성 요소가 여러 개일 때 수작업으로 컨테이너 관리하는 것은 매우 번거로움
  • Compose는 설정 한 번만 하면 한 줄 명령어로 여러 서비스 실행 가능
  • 모든 컨테이너가 유기적으로 연결되어 손쉽게 실행 가능함

제일 솔직한 답: 귀찮아서요. 구성 요소가 3~4개 넘어가면 진짜 번거롭잖아요. 근데 Compose 쓰면, 그냥 설정 하나 해두고 docker-compose up 치면 끝이에요. frontend, backend, DB가 한 덩어리처럼 딱 올라가요. 마치 밴드 리더가 박자 맞춰주는 느낌? 알아서 척척 돌아갑니다.

 

 

시작은 docker-compose.yml 파일 만들기부터

  • 프로젝트 루트에 docker-compose.yml 파일 생성 필요
  • .yaml 또는 .yml 확장자 사용 가능, YAML 문법 준수 필요
  • 들여쓰기 오류는 실행 에러로 이어지므로 주의해야 함
  • VS Code의 Docker 확장을 설치하면 작성 편의성과 오류 방지에 도움 됨

루트 폴더에 docker-compose.yml 파일 하나 만드세요. .yaml이나 .yml 중 아무거나 써도 상관 없고요. 이 파일은 YAML 문법을 따르는데, 들여쓰기가 생명이에요. 한 번 틀리면 에러 나니까 조심조심.

그리고 개인적으로 추천하는 건 Visual Studio Code에서 Docker 확장 설치해두는 거예요. 자동완성 덕분에 실수도 줄고, 뭐가 뭔지 훨씬 보기 쉬워요.

 

 

version? 그냥 3.8 쓰면 무난해요

  • Compose 파일은 시작 부분에 version을 지정해야 함
  • 앱 버전이 아닌 Compose 문법 버전으로 기능 사용 여부에 영향 줌
  • 예시는 3.8 버전 기준이며, 공식 문서를 통해 최신 버전 확인 가능
  • 실무에서는 전체 기능 중 필요한 일부만 사용해도 충분함

파일 제일 처음엔 version부터 써야 해요. 앱 버전이 아니라 Compose에서 어떤 문법을 쓸 건지 알려주는 거예요. 저는 그냥 3.8로 씁니다:

version: '3.8'

 

버전에 따라 지원되는 기능이 조금씩 다르니까요. 혹시 궁금하면 공식 문서 들어가서 확인해보세요. 근데 솔직히 말해서 대부분 기능은 안 써요. 진짜 필요한 것만 익혀도 충분합니다.

 

services – 내 컨테이너들 이름 짓기

 

services – 내 컨테이너들 이름 짓기

  • services 항목 아래 컨테이너들을 나열해 설정 시작
  • 컨테이너 이름은 자유롭게 지정하되 명확하게 작성 필요
  • 들여쓰기는 두 칸 단위로 유지해야 YAML 문법 오류 방지

이제부터 진짜 설정 들어갑니다. services라는 항목에 여러분이 띄울 컨테이너들을 정리하면 돼요. 예를 들면:

services:
  mongodb:
  backend:
  frontend:

 

이름은 본인이 알아보기 쉽게만 정하면 됩니다. 저처럼 backend, frontend, mongodb 이렇게 쓰면 나중에 헷갈릴 일도 없고요. 그리고 들여쓰기는 두 칸, 꼭 지켜주세요. 이거 틀리면 또 에러 납니다.

 

 

각 컨테이너에 디테일 추가하기

  • 각 컨테이너별 설정을 services 아래에 추가로 작성
  • 예시에서는 image 사용, build 경로 지정, 포트 연결 등을 설정함
  • 총 네 칸 들여쓰기로 구조를 구분하며 설정 구성 필요

 

각 컨테이너에 필요한 설정을 조금 더 써줘야 해요. 여기서는 들여쓰기를 두 칸 더 해줘서 총 네 칸 맞춰야 하고요. 기본 예시는 이렇게:

services:
  mongodb:
    image: mongo:latest
    ports:
      - "27017:27017"
  backend:
    build: ./backend
    ports:
      - "5000:5000"
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"

 

이렇게 해두면 Docker가 “오케이, Mongo는 이 이미지 쓰고 이 포트 열어야지~” 하고 알아서 해줍니다. 정말 편하죠.

 

명령어 한 줄이면 끝나는 마법

 

명령어 한 줄이면 끝나는 마법

  • docker-compose up 명령어 한 줄로 모든 컨테이너 실행 가능
  • 과거처럼 각각의 컨테이너를 따로 실행하고 연결할 필요 없음
  • 실행 과정이 간편해지고 시간도 크게 절약됨

이제 설정 다 됐으면, 터미널 열고 다음처럼 입력하세요:

docker-compose up

 

진짜 이거 하나면 다 뜹니다. 예전엔 각각 따로 띄우고, 연결 확인하고... 머리 아팠는데, 이제는 그런 거 필요 없어요. 커피 한 잔 마시는 사이에 앱이 다 올라가요.

 

 

Compose, 알고 보면 진짜 다재다능

기본적인 것 외에도, Compose가 해줄 수 있는 게 꽤 많아요:

  • 환경변수 설정해서 보안도 챙기고
  • volume으로 데이터 유지도 가능하고
  • custom network 구성해서 컨테이너끼리 잘 소통하게 만들 수 있고
  • depends_on으로 실행 순서 조절도 가능해요

 

그리고 이 설정 파일은 팀원이랑 공유하면 끝이에요. 다 같이 같은 환경에서 개발하면 충돌도 줄고, 협업도 훨씬 부드러워집니다.

 

한 마디로 정리하자면

 

한 마디로 정리하자면

  • 여러 컨테이너를 다루는 복잡한 환경을 단순하게 정리 가능
  • 개발 환경을 자동화하고 관리 스트레스를 크게 줄여줌
  • 실무나 개인 프로젝트에서 반복해서 쓰기 좋은 도구

Docker Compose는, 여러 컨테이너가 얽힌 복잡한 앱을 단순하게 만들어줘요. 개발 환경 세팅하면서 머리 싸매고 싶지 않다면, Compose는 필수템이에요. 저도 한 번 써보고는 아예 안 쓰는 날이 없어요.

 

 

요약해볼게요

  • docker-compose.yml 만들기
  • version은 ‘3.8’로 시작
  • services에 컨테이너 이름과 역할 정리
  • 들여쓰기 정확히 (두 칸씩!)
  • 각 컨테이너 설정 추가 (image, build, ports 등)
  • 명령어 한 줄 docker-compose up으로 실행!

 

도구 하나 바꿨을 뿐인데, 개발 환경이 이렇게 편해질 줄은 몰랐어요. 진심 추천합니다.

반응형