26

How: Docker 빌드 & 통합 테스트

Docker 배포 & 테스트

학습 목표
  • docker compose up으로 시스템을 실행할 수 있다
  • 통과와 실패를 실제로 가르는 통합 테스트를 작성할 수 있다
  • 자동으로 판정할 수 없는 항목을 미확인으로 남길 수 있다
  • 문제 발생 시 로그를 분석하고 디버깅할 수 있다

빌드 & 통합 테스트

Step 1: 빌드

docker compose build

Step 2: 실행

docker compose up -d

Step 3: 시드 (테스트보다 먼저)

python scripts/seed_data.py

Step 4: 로그 확인

docker compose logs -f

Step 5: 통합 테스트 실행

python tests/test_integration.py


통과할 수밖에 없는 테스트는 테스트가 아니다

원래 이 자리에 있던 검사는 이런 모양이었다.

runner.test("Chat 페이지 로딩", lambda: (
    requests.get(f"{APP_URL}/Chat", timeout=10).status_code == 200
))

Streamlit 은 단일 페이지 앱이라 알 수 없는 경로에도 같은 문서를 200 으로 돌려준다. /Chat 대신 /아무거나 를 넣어도 200 이다. 페이지가 예외로 죽어 있어도 이 검사는 통과한다. 나머지 항목도 파일이 있는지, 컨테이너가 떠 있는지뿐이라 RAG 검색도 Agent 응답도 확인하지 않는다. 그러고는 "모든 테스트 통과, 데모 준비 완료"를 인쇄한다. 검증 장치가 고장을 못 잡는 상태에서 통과 문구만 내보내는 것이 가장 위험하다.

테스트를 쓸 때 스스로에게 물을 것은 하나다. "시스템이 망가지면 이 검사가 빨간불이 되는가?" 아니라면 지운다.

이 파일이 실제로 비교하는 것

검사무엇과 무엇을 비교하는가어긋나면
헬스 응답/_stcore/health 본문이 ok 인가FAIL
시드 문서CNC_매뉴얼.txt 안에 E-042 가 있는가FAIL
KG 시드CNC-001 -> System -> Part 경로에 CP-007 이 있는가FAIL
RAG 검색"스핀들 과열" 상위 3건의 출처에 매뉴얼이 있는가FAIL
도구 선택골든 질문 4개가 의도한 도구를 고르는가FAIL
응답 시간실제로 재서 5초 이내인가FAIL

확인할 수 없는 것은 통과로 세지 않는다

API 키가 없으면 RAG 와 Agent 검사를 할 수 없다. 이때 True 를 돌려주면 안 된다. SKIP 으로 따로 세고, 마지막에 "판정하지 못한 것"으로 따로 인쇄한다. Neo4j 를 정지한 폴백 확인처럼 사람이 봐야 하는 것도 목록으로 남긴다. 남기지 않으면 "테스트가 다 통과했으니 다 된 것"으로 읽힌다.

에디터 로딩 중...
힌트 보기
  • Streamlit은 없는 경로에도 200을 돌려준다 — 경로 GET으로 페이지 상태를 판정할 수 없다
  • 골든 질문과 기대 도구를 표로 적어 두면 회귀 확인이 된다
  • API 키가 없어 못 재는 항목은 PASS가 아니라 SKIP이다
  • docker compose logs -f 로 실시간 로그 확인
  • docker compose exec app bash 로 컨테이너 내부 접속
  • Neo4j는 시작에 시간이 걸리므로 healthcheck 활용
정답 보기
에디터 로딩 중...
AI로 학습하기 — 꿀팁
Docker 통합 테스트 커버리지 점검AI 학습 팁

AI에게 docker compose 환경에서 실행되는 통합 테스트의 커버리지 갭과 불안정한 테스트의 원인을 찾게 하세요.

이 제조 AI 통합 테스트 코드에서 Neo4j·ChromaDB 컨테이너가 준비되기 전에 테스트가 실행되는 race condition, 환경변수 미설정 시 테스트가 조용히 통과하는 false-pass 케이스, RAG 검색과 KG 쿼리가 실제로 연동되는지 검증하는 테스트 누락을 분석하고 개선안을 제안해줘.
이 팁이 도움이 됐나요?
용어