TechBridge

Docker Compose 완전 분해 — yml 파일 해부학

← 목록으로

📋 실습 안내

✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기 내 코드 실행 결과
🎯 완성 미리보기 목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기 이번 강의 전용
  선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. docker-compose.yml에서 depends_on만 사용할 때의 한계는?
💡 depends_on은 기본적으로 컨테이너가 started 상태인지만 확인합니다. PostgreSQL이 시작은 됐지만 아직 초기화 중이라 쿼리를 받지 못하는 시점에 앱이 시작될 수 있습니다. v3.9부터 condition: service_healthy를 사용하면 healthcheck 통과 후에만 다음 서비스를 시작합니다.
Q2. docker-compose.yml에서 ${POSTGRES_PASSWORD:?에러메시지} 문법의 의미는?
💡 :? 문법은 환경변수가 설정되지 않았거나 빈 값일 때 지정된 에러 메시지를 출력하고 실행을 중단합니다. 필수 환경변수(DB 비밀번호 등)가 누락된 채로 서비스가 시작되는 것을 방지하는 안전장치입니다. :-default는 없을 때 기본값을 사용합니다.
Q3. docker-compose down vs docker-compose down -v 의 차이는?
💡 docker-compose down은 컨테이너와 네트워크를 삭제하지만 Named Volume은 보존합니다. docker-compose down -v는 Named Volume까지 함께 삭제합니다. DB 데이터를 날리지 않으려면 -v 없이 down을 사용해야 합니다.
Q4. docker-compose.override.yml 파일의 역할은?
💡 docker-compose.override.yml은 docker-compose up 실행 시 docker-compose.yml과 자동으로 deep merge됩니다. 기본 설정은 docker-compose.yml에, 개발 환경 전용 설정(포트 노출, bind mount, 디버그 환경변수 등)은 override 파일에 분리하는 패턴이 일반적입니다.
Q5. docker-compose.yml에서 networks를 frontend와 backend로 분리하는 이유는?
💡 네트워크를 분리하면 보안 격리가 가능합니다. nginx는 frontend 네트워크에만, DB는 backend 네트워크에만 연결하면 nginx에서 DB로 직접 접근할 수 없습니다. 앱 서버만 두 네트워크에 연결하여 nginx의 요청을 받아 DB에 쿼리하는 구조가 됩니다.
🎉

퀴즈 통과!

점수: 0점 — 수고하셨습니다!

다음 강의로 →
😅

아쉽네요!

점수: 0점 — 70점 이상이 되어야 통과합니다.