26분
How: Docker 빌드 & 통합 테스트
Docker 배포 & 테스트
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 쿼리가 실제로 연동되는지 검증하는 테스트 누락을 분석하고 개선안을 제안해줘.
이 팁이 도움이 됐나요?