Skip to content

[ Test ] 스키마·접근제어 회귀를 CI 가 잡도록 계약 테스트 추가 #72

Description

@RosieOh

🧑‍💻 오늘의 개발하면서 생긴 크고 작은 이슈사항을 기록해주세요

💚 어떤 기능인가요?

#70 에서 찾은 문제들(테이블 누락, 병원 조회가 전부 로그인 필수)을 CI 가 구조적으로 잡을 수 없는 상태입니다.

왜 못 잡았나

통합 테스트 4개가 전부 ddl-auto=create-drop 입니다. Hibernate 가 엔티티로부터 스키마를 만들어 내니까,
Flyway 마이그레이션이 엔티티와 아무리 어긋나도 테스트는 100% 통과합니다.

정책 북마크는 테이블 없이 API 와 리포지토리까지 있었고 조회수는 컬럼이 없어 저장된 적이 없었는데,
그 상태로 모든 테스트가 초록불이었습니다.

접근제어도 같습니다. SecurityConfig 는 선언 순서에 따라 앞선 규칙이 뒤를 덮는데, 규칙 자체는 멀쩡해
보여서 병원 조회가 통째로 막혀 있는 걸 아무도 눈치채지 못했습니다.

어떻게 막을 것인가

  • 스키마: 운영과 같은 방식(Flyway 전체 적용 + validate)으로 띄우는 테스트를 추가합니다.
    엔티티에 필드를 넣고 마이그레이션을 안 쓰면 기동 단계에서 깨집니다.
  • 접근제어: 규칙을 읽는 대신 실제 응답 코드를 확인합니다. 공개여야 할 경로와 막혀야 할 경로를
    표로 고정하고 MockMvc 로 상태코드를 검증합니다. H2 라 Docker 없이도 돕니다.
  • 조용한 skip 방지: Testcontainers 테스트는 Docker 가 없으면 skip 되고 빌드는 초록불이 됩니다.
    스키마 검증이 그렇게 빠지면 의미가 없으므로 CI 에서 실제 실행 여부를 확인합니다.

✅ To Dos

  • Flyway + validate 스키마 정합성 테스트 (Testcontainers MariaDB)
  • 접근제어 계약 테스트 (공개/보호 경로 응답 코드)
  • CI 에서 스키마 테스트가 skip 되면 실패 처리
  • Testcontainers 버전 정리

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions