시험 환경에서는 일부러 느리게 만든 것을 끈다
비밀번호 해셔는 MD5, Postgres는 tmpfs와 fsync=off, Redis는 저장 끔, 배경 작업 주기는 짧게, YAML은 C 로더. 운영 설정에는 두지 않는다.
시험이 느린데 코드를 아무리 봐도 느린 곳이 없다면, 운영에서 일부러 느리게 만든 장치를 의심한다. 안전과 내구성을 위해 넣은 비용이 시험 수천 번에 그대로 곱해진다.
대표적인 것들과 시험용 설정:
- 비밀번호 해셔: 운영 해셔는 한 번에 0.8초를 쓴다. 가입·로그인이 든 시험이 모두 그만큼 느려진다. 시험·E2E 설정에서만 MD5 해셔로 바꾼다.
- Postgres 내구성: 데이터 디렉터리를 tmpfs에 두고
fsync·synchronous_commit·full_page_writes를 끈다. - Redis 저장: RDB·AOF를 끈다.
- 배경 작업 주기: 아웃박스나 배경 적용기의 주기(예: 1초)는 E2E 화면 대기에 그대로 더해진다. E2E 설정에서는 0.05초 정도로 줄인다.
- YAML 로더: 순수 파이썬 로더는 작은 파일 하나에 0.5초를 넘게 썼다.
yaml.CSafeLoader/CSafeDumper를 쓴다. - 값 검사기:
pydantic.TypeAdapter같은 검사기는 형식마다 한 번만 만들어 캐시한다.
# settings/test.py — 운영 설정에는 두지 않는다
PASSWORD_HASHERS = ["django.contrib.auth.hashers.MD5PasswordHasher"]
docker run -d -e POSTGRES_PASSWORD=test --tmpfs /var/lib/postgresql/data postgres:17 \
-c fsync=off -c synchronous_commit=off -c full_page_writes=off
docker run -d redis:7 redis-server --save '' --appendonly no
반대로 끄면 안 되는 것도 있다. 연결 풀은 시험에서도 켜 둔다. 운영과 다른 연결 수명으로 시험하면 풀 고갈 같은 문제를 시험이 잡지 못한다.