mirim-app/deploy/docker-compose.e2e.yml
AWESOMEDEV 1661591d8b
Some checks failed
CI / backend-test (push) Successful in 1m3s
CI / frontend-build (push) Failing after 27s
CI / backend-dep-scan (push) Successful in 6s
test(e2e): Playwright E2E 도입 — 로그인→강좌→퀴즈 + 멘토/감사로그
실제 브라우저로 '다 조립된 앱'(프론트+백엔드+DB)을 태우는 통합 테스트 6개:
- 인증 가드(비로그인→로그인), 로그인 실패 안내, 학생 로그인→대시보드
- 학습 센터→강좌 열기, 퀴즈 풀기→제출→서버 채점 결과
- 멘토 로그인→멘토 화면+개인정보 접근 기록(SEC-02 감사로그까지 검증)

운영 무오염 설계:
- deploy/docker-compose.e2e.yml — 별도 프로젝트(mirime2e)·네트워크·휘발성 DB(tmpfs)
- deploy/Caddyfile.e2e — 평문 HTTP로 SPA+/api 프록시(운영과 동일 구조)
- deploy/e2e.sh — 스택 기동→테스트 학생 API 생성→퀴즈 slug 자동조회→
  Playwright(브라우저 내장 이미지) 실행→down -v(정리)
- 백엔드 힙 256MB 제한(작은 인스턴스에서 운영과 공존)

EC2에서 6/6 통과 확인. 러너가 운영과 같은 인스턴스라 push마다가 아닌
온디맨드(릴리스 전)로 운영 — 전용 러너 확보 시 CI 게이트로 승격.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-20 08:27:42 +09:00

60 lines
2.0 KiB
YAML

# E2E 전용 임시 스택 — 운영과 완전히 격리(별도 프로젝트명 mirime2e, 별도 네트워크, 휘발성 DB).
# 운영 DB/컨테이너는 절대 건드리지 않는다. E2E가 끝나면 통째로 내려간다(down -v).
#
# 학습 포인트: E2E는 "진짜 같은 환경"이되 "버려도 되는 환경"이라야 한다.
# - Postgres 데이터는 tmpfs(메모리)에 둬 매 실행 깨끗하게 시작하고 흔적을 안 남긴다.
# - 백엔드 힙을 256MB로 제한해(작은 인스턴스에서 운영과 공존) 자원을 아낀다.
# - 멘토 초기 비밀번호를 알려진 값으로 고정해 E2E가 로그인할 수 있게 한다.
name: mirime2e
services:
postgres:
image: postgres:17-alpine
environment:
POSTGRES_DB: mirim
POSTGRES_USER: mirim
POSTGRES_PASSWORD: e2epass
tmpfs:
- /var/lib/postgresql/data # 휘발성 — 매 실행 새 DB, 디스크에 안 남음
healthcheck:
test: ["CMD-SHELL", "pg_isready -U mirim"]
interval: 4s
timeout: 5s
retries: 15
backend:
build: ../backend
environment:
DB_HOST: postgres
DB_PORT: 5432
DB_NAME: mirim
DB_USER: mirim
DB_PASSWORD: e2epass
COOKIE_SECURE: "false" # 평문 HTTP라 secure 쿠키는 꺼야 로그인된다
LOG_LEVEL: INFO
MENTOR_INITIAL_PASSWORD: e2e-mentor-pass
JAVA_TOOL_OPTIONS: "-Xmx256m" # 작은 인스턴스에서 운영과 공존하도록 힙 제한
depends_on:
postgres:
condition: service_healthy
# 프론트 빌드 결과물을 webroot 볼륨에 복사(운영과 동일한 방식)
frontend-build:
build: ../frontend
volumes:
- webroot:/out
caddy:
image: caddy:2-alpine
ports:
- "8899:80" # 호스트 8899 → E2E 사이트(운영 80/443과 안 겹침)
volumes:
- ./Caddyfile.e2e:/etc/caddy/Caddyfile:ro
- webroot:/srv:ro
depends_on:
- backend
- frontend-build
volumes:
webroot: