통합 테스트의 마이그레이션 replay를 fail-closed로 만들기
통합 테스트가 스키마를 만들지 못했는데도 entity 테스트를 계속하면 실패가 지연되어 원인을 잃는다. 마이그레이션 디렉터리 누락, SQL 파일 0개, 파일 읽기 실패, 개별 SQL 오류는 모두 테스트 bootstrap 실패다.
Testcontainers·Vitest·pytest
통합 테스트가 스키마를 만들지 못했는데도 entity 테스트를 계속하면 실패가 지연되어 원인을 잃는다. 마이그레이션 디렉터리 누락, SQL 파일 0개, 파일 읽기 실패, 개별 SQL 오류는 모두 테스트 bootstrap 실패다.
콘텐츠 서비스는 같은 화면을 두 가지 데이터 공급 경계에서 제공할 수 있다. Docker SSR은 PostgreSQL을 읽고, 정적 호스트는 배포 시점의 /api/export snapshot을 읽어 페이지를 만든다. 둘을 억지로 하나의 runtime으로 합치면 static build가 DB 자격 증명을 요구하거나, SS…
콘텐츠 DB 초기화는 테이블 생성·스키마 보정·정적 시드·notes/courses 업서를 순서대로 묶습니다. 운영자가 버튼을 두 번 누르거나 console replica가 겹치면, 각 단계가 멱등이어도 두 파이프라인이 중간 상태를 서로 읽을 수 있습니다.
이미지가 만들어졌다는 사실은 사용자가 정상 경로를 사용할 수 있다는 증거가 아닙니다. 검사한 commit과 실행 image를 묶고, health 뒤에 실제 DB를 읽는 smoke를 실행해야 합니다.
기능 구현과 완료 판정은 다릅니다. 기획·디자인·개발·사용자·운영 관점의 질문을 각각 테스트나 기록으로 연결해야 다음 사람이 같은 결론을 재현할 수 있습니다.
페이지 수십 · API 수백 개를 가진 관리자 앱의 E2E 테스트에서 가장 자주 하는 실수는 "스펙 파일에 새 라우트 추가를 잊는 것". 사람이 수작업으로 유지하지 않고, 파일 시스템에서 라우트 목록을 자동 생성해 하나의 spec 이 모든 라우트를 돌게 만드는 패턴이 이 비용을 크게 줄입니다.
단위·통합·브라우저·운영 smoke 검증을 구분하고, Vitest·pytest·Cypress·Playwright를 겹치지 않게 배치하는 기준을 정리합니다.
GitHub Actions 는 GitHub 저장소 안에 CI/CD 를 두는 자리입니다. 2018 년 베타로 공개됐고 2019 년에 GA 로 옮겨갔습니다.
관측 (observability) 이라는 단어가 풀스택 도입을 떠올리게 만들지만, 작은 시스템부터 풀 스택을 도입하면 운영 비용이 가치를 앞지르기 쉽습니다.
Vitest 는 Vite 생태계에서 자라난 테스트 프레임워크입니다. Jest 와 결을 비슷하게 두고 ESM · TypeScript · 워치 모드를 더 가볍게 다룹니다.
DB·Redis·Kafka 같은 외부 의존이 있는 코드의 테스트는 두 갈래에서 결정합니다. 모킹으로 가짜 의존을 만들거나, 진짜 인스턴스를 띄워 검증하거나. Testcontainers 는 후자의 자리를 단순하게 만든 라이브러리입니다. Docker 위에 테스트 시점에만 임시 컨테이너를 띄우고 자동 정리합니다.