가드레일

스펙에 적은 가드레일이 실제로 테스트되고 있는지 확인합니다. 규약은 가드레일 id = 테스트 이름입니다.

가드레일
231
스펙에 적힌 것
테스트 있음
45
테스트 없음
186
문서로만 있음
critical 미확인
63

확인되고 있는 비율 — 19%

19%

가드레일을 스펙에 적는 것과 그게 지켜지는지 확인하는 것은 다른 일입니다. 이 페이지가 없으면 148개가 전부 지켜지고 있는 것처럼 읽힙니다.

테스트가 있어도 무엇을 겨냥하는지가 중요합니다. 서버 API 를 직접 치는 테스트는 서버가 맞는지만 봅니다 — 화면에서 그 API 까지 이어지는 배선이 끊겨도 통과합니다. 실제로 비밀번호 재설정이 그랬습니다(API 맵 → 받아 줄 곳이 없는 호출).

확인하는 테스트가 없는 가드레일 (186)

심각도가드레일내용화면
criticaladmin-account-no-password-exposure계정 목록 응답에 비밀번호가 실리면 안 된다.관리자 관리
criticaladmin-console-rejects-student수강생 계정으로는 로그인되지 않아야 한다.관리자 로그인
criticaladmin-console-requires-login비로그인 상태로 어떤 관리자 화면에도 머무를 수 없어야 한다.관리자 로그인
criticalapply-flag-whitelist허용 목록(complete · absence · sms) 밖의 이름은 거부해야 한다.상담신청
criticalapply-requires-admin신청자의 연락처와 문의 내용이 들어 있어 관리자만 볼 수 있어야 한다.상담신청
criticalassets-served-locally화면이 원본 사이트로 자산을 요청하지 않는다.전 화면 공통
criticalboard-content-xss-safe본문 HTML 에 스크립트가 들어 있어도 실행되면 안 된다.공지 상세
criticalboard-detail-matches-server-shape상세 화면이 기대하는 응답 구조와 서버가 주는 구조가 같아야 한다.공지 상세
criticalboard-search-injection-safe검색어에 따옴표·SQL 예약어를 넣어도 정상 동작하고 오류가 나면 안 된다.공지사항
criticalboard-sort-whitelist정렬 파라미터에 임의 컬럼명을 넣어도 SQL 에 그대로 들어가면 안 된다.공지사항
criticalbooks-not-servable-by-asset-path교재는 공개 자산 경로로 열리지 않는다.TESOL 강의실
criticalbooks-require-course-access수강 권한이 없는 과정의 교재는 받을 수 없다.TESOL 강의실
criticalbooks-require-login로그인하지 않으면 강의 교재를 받을 수 없다.TESOL 강의실
criticalcatalog-price-matches-order목록에 보이는 판매가와 실제 주문 생성 금액이 같아야 한다.수강신청 안내
criticalcertificate-address-own-only요청에 회원을 담아 보내도 남의 주소를 바꿀 수 없어야 한다.TESOL 학생정보
criticalclassroom-no-quiz-when-closed수강기간이 아니거나 미결제면 응시 버튼이 나오면 안 된다.TESOL 강의실
criticalconsultation-submits-to-server1:1 무료컨설팅 신청은 실제로 접수돼야 한다.전 화면 공통
criticalcounseling-history-requires-admin상담 이력은 관리자만 보고 쓸 수 있어야 한다.상담신청
criticalcounseling-history-server-side-merge지난 이력은 서버가 읽어 이어 붙여야 한다. 화면이 보낸 본문을 그대로 쓰면 안 된다.상담신청
criticaldocument-path-stays-in-kind-dirDB 의 파일 경로가 자료 종류 디렉터리를 벗어나면 읽지 않아야 한다.TESOL 학생정보
criticaldocument-requires-login토큰 없이 자료를 받을 수 없어야 한다.TESOL 학생정보
criticalfind-id-sends-not-returns찾은 아이디를 응답에 실으면 안 된다. 메일 · 문자로만 보낸다.아이디 찾기
criticalfind-pw-screen-reaches-server비밀번호 찾기 화면의 요청이 실제로 서버까지 닿아야 한다. 화면은 /api/identity/auth/find-pw 를 부르는데 그 라우트가 없으면 Auth.js catch-all 이 400 으로 삼켜, 화면에는 그냥 실패로만 보인다.비밀번호 찾기
criticalglobal-no-price-from-client금액은 절대 클라이언트가 보낸 값을 쓰지 않는다. 서버가 product 테이블에서 다시 읽어야 한다.전 화면 공통
criticalglobal-server-side-guard화면 진입을 막는 검사는 제출(서버 액션 · API)에서도 똑같이 한 번 더 해야 한다. 화면 가드만 있으면 직접 POST 로 우회된다.전 화면 공통
criticalhome-loads-without-login비로그인 상태에서 홈이 정상적으로 떠야 한다.
criticaljwt-secret-shared-between-servers인증 서버가 발급한 토큰을 API 서버가 검증할 수 있어야 한다.로그인
criticallegal-links-alive동의를 받는 화면의 약관 링크가 살아 있어야 한다.이용약관
criticallegal-text-matches-origin본문이 원본 PHP 의 <pre> 안 평문과 한 글자도 다르지 않아야 한다.이용약관
criticalleveltest-answer-not-leaked문항 조회 응답에 정답이 절대 실리면 안 된다.레벨테스트
criticalleveltest-exam-input-type-by-number1~10 은 radio, 11~15 는 text 입력이어야 한다. 보기가 없다고 문항을 통째로 빠뜨리면 안 된다.레벨테스트 응시
criticalleveltest-exam-no-answer-in-html렌더된 HTML 어디에도 정답 표시가 없어야 한다.레벨테스트 응시
criticalleveltest-result-no-lookup-api접수번호로 남의 결과를 조회하는 API 를 만들면 안 된다.레벨테스트 결과
criticalleveltest-subjective-graded주관식도 채점 대상이다. 만점이 객관식 개수(10)로 잘리면 안 된다 — 15 여야 한다.레벨테스트
criticalleveltest-subjective-in-answer-table주관식 답안이 level_test_answer.a11~a20 에 저장돼야 한다. level_test_poll_answer 는 설문용이므로 쓰면 안 된다.레벨테스트
criticallogin-success-not-reported-as-failure로그인에 성공하면 실패 메시지가 뜨면 안 된다.로그인
criticallogin-token-has-no-secret토큰 페이로드에 비밀번호 해시 등 민감 정보를 담지 않는다.로그인
criticallogin-works-in-production-build프로덕션 빌드에서도 로그인과 세션 조회가 되어야 한다.로그인
criticalmember-no-credential-fields비밀번호와 아이디를 고치는 길이 없어야 한다.회원 관리
criticalmyclass-shows-only-entitled수강권이 없는 과정은 입구가 열려 보이면 안 된다.내 강의실 홈
criticalorder-amount-requires-admin결제 금액은 관리자만 고칠 수 있어야 한다.결제 관리
criticalpay-fails-loudly-without-config상점키가 없으면 조용히 성공시키지 말고 거부해야 한다.카드 결제
criticalprivacy-text-matches-origin본문이 원본 personalData.php 와 한 글자도 다르지 않아야 한다.개인정보처리방침
criticalprofile-change-requires-login로그인하지 않으면 이름 · 영문 이름을 바꿀 수 없다.TESOL 학생정보
criticalprofile-change-targets-token-owner이름 · 영문 이름은 토큰의 회원 것만 바꾼다.전 화면 공통
criticalprogress-own-only요청에 회원을 담아 보내도 남의 진도를 조작·조회할 수 없어야 한다.강의 영상
criticalprogress-requires-login비로그인은 기록도 조회도 할 수 없어야 한다.강의 영상
criticalqna-write-requires-login비로그인 상태로 작성 화면에 머무를 수 없고, API 직접 호출도 거부돼야 한다.문의 작성
criticalqna-write-requires-login비로그인 상태로 문의 작성 API 를 호출하면 거부돼야 한다.Q&A
criticalqna-writer-from-token작성자를 요청 본문으로 지정할 수 없어야 한다.문의 작성
criticalqna-writer-from-token작성자를 요청 본문으로 지정할 수 없어야 한다. 이름 · 아이디는 토큰에서만 온다.Q&A
criticalquiz-guard-reapplies-on-submit제출 API 는 조회 API 와 같은 자격 검사를 다시 수행해야 한다. 화면을 거치지 않은 직접 호출도 막혀야 한다.TESOL 시험 응시
criticalquiz-no-answer-leak문제지 조회 응답에 정답(correct)이 절대 포함되면 안 된다.TESOL 시험 응시
criticalquiz-tec-uses-tec-flagsTEC 응시 자격은 TESOL 플래그가 아니라 TEC 전용 컬럼으로 판정해야 한다.TEC 시험 응시
criticalresult-own-only남의 응시 결과를 조회할 수 없어야 한다. 항상 로그인한 본인 기록만 나온다.TESOL 시험 결과
criticalresult-tec-own-only남의 결과를 조회할 수 없어야 한다.TEC 시험 결과
criticalsignin-log-long-login-id아이디가 길어도 로그인이 되어야 한다.로그인
criticalsignup-account-usable-after-race경합을 겪은 계정도 로그인·비밀번호 재설정이 되어야 한다.회원가입
criticalsignup-no-duplicate-under-race같은 아이디로 동시에 가입해도 하나만 만들어져야 한다.회원가입
criticalssr-matches-client서버가 그린 화면과 브라우저가 그린 화면이 같아야 한다.전 화면 공통
criticalstudent-own-data-only항상 로그인한 본인 정보만 나와야 한다.TESOL 학생정보
criticalstudent-scan-requires-pass합격 전에는 스캔본 다운로드가 노출되지도, API 로 받아지지도 않아야 한다.TESOL 학생정보
criticalvideo-requires-entitlement수강권이 없는 사용자가 영상 정보를 받아가면 안 된다.강의 영상
highadmin-account-no-self-lockout자기 계정을 스스로 승인 해제할 수 없어야 한다.관리자 관리
highadmin-content-requires-admin세 조회 모두 관리자만 볼 수 있어야 한다.배너 · Unit · 레벨테스트 (조회)
highadmin-login-no-user-enumeration없는 아이디와 틀린 비밀번호의 응답이 같아야 한다. 계정 존재 여부가 드러나면 안 된다.관리자 로그인
highadmin-no-double-refund이미 cancel 인 주문은 다시 환불되면 안 된다.결제 관리
highadmin-refund-no-tid-blockedTID 없는 카드 주문은 환불을 막고 안내해야 한다. 상태를 바꾸면 안 된다.결제 관리
highassets-no-broken-images게시글 본문의 이미지가 실제로 그려져야 한다.전 화면 공통
highboard-detail-404없는 id 로 열면 500 이 아니라 404 여야 한다.공지 상세
highboard-hit-only-on-read게시판 목록을 여는 것만으로 글 상세를 불러오면 안 된다 — 조회수가 오른다.전 화면 공통
highboard-paging-boundspage=0, page=-1, 범위를 넘는 page 에도 오류 없이 빈 목록이나 첫 페이지를 돌려줘야 한다.공지사항
highboard-visible-value-per-tableFAQ 는 소문자 y/n 으로 저장해야 한다. 대문자면 원본 화면에서 안 보인다.게시판 4종 (공지 · 후기 · 합격노트 · FAQ)
highboard-writer-column-per-table수기·후기는 name 칸을 채워야 한다. NOT NULL 이라 비우면 저장이 실패한다.게시판 4종 (공지 · 후기 · 합격노트 · FAQ)
highbooks-download-works수강 중인 과정의 교재는 PDF 로 내려온다.TESOL 강의실
highcatalog-inactive-hiddenis_active 가 false 인 상품은 목록에 나오면 안 된다.수강신청 안내
highcertificate-address-per-courseTESOL 과 TEC 주소가 섞이면 안 된다.TESOL 학생정보
highclassroom-lesson-count-matches-db화면의 레슨 수가 DB 의 레슨 수와 같아야 한다(TESOL 36, TEC 56).TESOL 강의실
highclassroom-next-kind-only-one한 유닛에 응시 버튼이 두 개 이상 보이면 안 된다. 다음 차수 하나만.TESOL 강의실
highclassroom-tec-lesson-countTEC 강의실의 레슨 수가 DB 와 같아야 한다(56).TEC 강의실
highclassroom-video-id-matches-lessonVideo 버튼이 여는 영상이 그 줄의 레슨과 일치해야 한다.TESOL 강의실
highcounseling-history-prepends새 이력이 위에 쌓이고 지난 것이 남아야 한다.상담신청
highcounseling-history-stamped머리말에 날짜와 작성자가 원본 문구 그대로 붙어야 한다.상담신청
highfaq-hidden-not-exposedshow 플래그가 꺼진 FAQ 는 목록에 나오면 안 된다.Q&A
highfind-id-no-direct-disclosure응답 본문에 아이디를 그대로 실어 보내면 안 된다. 존재 여부도 드러나면 안 된다.아이디 찾기
highleveltest-exam-apply-requiredapply 파라미터 없이 접근하면 /tesol-lab/level-test 로 돌려보내야 한다.레벨테스트 응시
highleveltest-exam-subjective-text-shown주관식 문항 텍스트가 화면에 보여야 한다. 안내 이미지로 대체하면 안 된다.레벨테스트 응시
highleveltest-no-login-required비로그인 상태에서 신청과 응시가 모두 가능해야 한다.레벨테스트
highleveltest-no-resubmit같은 접수번호로 두 번째 제출은 거절해야 한다.레벨테스트
highleveltest-question-count-from-db문항 수는 DB 에 채워진 개수를 따른다. 20개 고정으로 렌더해 빈 문항이 나오면 안 된다.레벨테스트
highleveltest-result-no-pass-verdict합격 · 불합격 문구가 나오면 안 된다. 정답 수만 보여 준다.레벨테스트 결과
highleveltest-step2-exists신청 후 실제 문제 풀이 화면으로 이어져야 한다. 신청 폼만 있고 끝나면 안 된다.레벨테스트
highleveltest-whitespace-tolerant주관식 답의 띄어쓰기가 달라도 정답으로 인정해야 한다. 공백을 모두 지우고 비교한다.레벨테스트
highlogin-no-user-enumeration없는 아이디와 틀린 비밀번호의 응답이 같아야 한다.로그인
highmember-change-logged누가 무엇을 바꿨는지 로그와 modid · moddate 에 남아야 한다.회원 관리
highno-php-links화면에 .php 로 끝나는 내부 링크가 남아 있으면 안 된다.이용약관
highnotice-pinned-first고정 공지는 정렬 방식과 무관하게 항상 목록 맨 위에 있어야 한다.공지사항
highorder-amount-not-on-cancelled취소된 주문의 금액은 고칠 수 없어야 한다.결제 관리
highorder-amount-range-checked0 이하이거나 1억을 넘는 금액은 거부해야 한다.결제 관리
highorder-price-single-source신청 화면 가격과 상품 목록 가격이 항상 같아야 한다.TESOL 수강신청
highorder-required-fields성명 · 연락처 · 이메일이 비면 주문이 만들어지면 안 된다.TESOL 수강신청
highorder-tec-price-correctTEC 신청 화면 정가가 1,770,000 이어야 한다.TEC 수강신청
highorphan-records-admin-scoped관리자 조회도 회원 하나씩만 봐야 한다. 없는 회원이면 빈 결과다.전 화면 공통
highorphan-records-not-in-my-data회원이 없는(탈퇴·삭제된) 기록이 내 조회에 섞이면 안 된다.전 화면 공통
highoutline-matches-curriculum커리큘럼 화면의 유닛·레슨 구성이 강의실(DB) 과 어긋나면 안 된다.TESOL 커리큘럼
highoutline-tec-matches-curriculumTEC 커리큘럼 구성이 DB 와 어긋나면 안 된다.TEC 커리큘럼
highpassnote-detail-respects-show숨긴 수기를 id 로 직접 열어도 404 여야 한다.합격수기 상세
highpassnote-hidden-not-exposedshow 가 꺼진 수기는 목록에도 상세에도 나오면 안 된다.합격수기
highpay-disabled-without-keyPG 키가 없으면 결제창을 열지 않고 안내해야 한다. 무통장 흐름은 영향받지 않아야 한다.카드 결제
highpay-no-double-approval이미 결제된 주문을 두 번 승인하면 안 된다.카드 결제
highpoll-choice-separator보기 구분자는 ^ 가 있으면 ^, 없으면 쉼표다.레벨테스트 응시
highpoll-choice-whitelist보기에 없는 값이 오면 거부해야 한다.레벨테스트 응시
highpoll-multi-select한 문항에 여러 개를 고를 수 있어야 한다. 저장은 쉼표로 이어 붙인다.레벨테스트 응시
highpoll-questions-parsed평탄한 q1~q20 이 문항 목록으로 서야 한다. 번호가 겹치거나 보기가 비면 안 된다.레벨테스트 응시
highpoll-required-enforced필수 설문을 비운 채 제출하면 서버가 거부해야 한다.레벨테스트 응시
highpoll-saved-with-answers설문은 답안지와 같은 트랜잭션에서 저장돼야 한다. 재제출은 막힌다.레벨테스트 응시
highprofile-english-name-letters-only영문 이름은 영문자로만 받는다.전 화면 공통
highprofile-english-name-saved영문 이름을 바꾸면 저장되고 학생정보에 그대로 보인다.TESOL 학생정보
highprofile-form-saves고친 값은 다시 열어도 남아 있다.TESOL 학생정보
highprofile-form-shown이름과 영문 이름을 화면에서 고칠 수 있다.TESOL 학생정보
highprogress-latest-firstplaydata 배열 맨 앞이 최신이어야 한다. 이어보기가 그 값을 쓴다.강의 영상
highprogress-per-courseTESOL 과 TEC 진도가 섞이면 안 된다.강의 영상
highqna-answer-status-accurate답변이 없는 문의가 답변완료로 표시되면 안 된다.Q&A
highqna-answer-status-follows-answer답이 있으면 답변완료, 비우면 답변대기여야 한다. 둘이 어긋나면 안 된다.질문답변
highqna-category-whitelist분류는 join · tesol 둘뿐이다. 임의 문자열이 저장되면 안 된다.문의 작성
highqna-category-whitelist분류는 join · tesol 둘뿐이다. 임의 문자열이 저장되면 안 된다.Q&A
highqna-detail-404없는 id 는 404 여야 한다.Q&A 상세
highquiz-multi-answer-persist복수정답은 "b,d" 형태로 저장돼야 한다. 첫 글자만 남으면 안 된다.TESOL 시험 응시
highquiz-no-retake-after-pass이미 통과한 유닛은 남은 차수가 있어도 응시가 거부돼야 한다.TESOL 시험 응시
highquiz-tec-only-two-kindsTEC 에 kind=C 를 요청하면 거부해야 한다.TEC 시험 응시
highresult-kind-level-verdict0점인 차수가 PASS 로 보이면 안 된다. 배지는 그 차수 점수 기준이어야 한다.TESOL 시험 결과
highresult-tec-multi-answer-display복수정답 문항의 내 답안이 "b, d" 처럼 모두 보여야 한다. 하나만 보이면 안 된다.TEC 시험 결과
highscore-no-passed-units-is-zero합격 유닛이 하나도 없으면 평균이 0 이어야 한다(0 나누기 금지).TESOL 성적표
highscore-picks-latest-passing-kindA 불합격 후 B 합격이면 B 점수가 잡혀야 한다.TESOL 성적표
highscore-tec-14-rowsTEC 성적표는 14행이어야 한다.TEC 성적표
highsignin-log-does-not-break-login이력을 못 남겨도 로그인은 되어야 한다.로그인
highsignin-log-no-record-on-failure실패한 로그인은 이력에 남기지 않고, 통과시키지도 않아야 한다.로그인
highsignup-sequential-duplicate-rejected순차로 같은 아이디를 넣어도 거절돼야 한다.회원가입
highuniversity-register-content안내 문구와 신청서 · 환불규정 링크가 원본과 같고, 이미지가 실제로 그려진다.입학신청서 작성 안내
highuniversity-register-linked강의실에서 입학신청서 화면으로 갈 수 있다.입학신청서 작성 안내
highunknown-path-is-404없는 경로는 404 다. 500 이면 장애로 오해한다.공지 상세
normaladmin-dashboard-hides-nothing아직 옮기지 않은 메뉴를 목록에서 감추면 안 된다.대시보드
normaladmin-dashboard-shows-progress옮긴 화면 수와 전체 수가 보여야 한다.대시보드
normaladmin-no-account-creation계정 생성 폼이 없어야 한다 — 권한 체계를 확인하기 전까지.관리자 관리
normalapply-shows-level-test-score레벨테스트 신청은 목록에서 점수나 "미응시"가 보여야 한다.상담신청
normalbanner-list-all-types배너 목록이 타입 하나로 걸러지면 안 된다. 전체가 보여야 한다.배너 · Unit · 레벨테스트 (조회)
normalboard-crud-roundtrip네 게시판 모두 생성 → 수정 → 노출 토글 → 삭제가 왕복해야 한다.게시판 4종 (공지 · 후기 · 합격노트 · FAQ)
normalboard-hit-increments-once상세 조회 시 조회수가 정확히 1 올라야 한다.공지 상세
normalbooks-unknown-unit-404없는 차수를 지목하면 404 다.TESOL 강의실
normalcertificate-address-form-shape주소 입력칸이 폼 안에 있어야 한다.TESOL 학생정보
normalcertificate-address-hidden-without-issue자격이 없으면 화면에 폼이 아예 나오지 않아야 한다.TESOL 학생정보
normalcertificate-address-roundtrip저장한 주소가 다시 읽혀야 하고, 두 번째 저장은 새 행이 아니라 갱신이어야 한다.TESOL 학생정보
normalconsultation-time-options상담 가능 시간대가 원본과 같아야 한다 — 평일 10~22시, 주말 10~18시.전 화면 공통
normalcounseling-history-not-empty빈 내용은 저장하지 않아야 한다.상담신청
normalcounseling-history-ui상세 화면에서 이력을 남기면 본문에 쌓여야 한다.상담신청
normalglobal-error-response-shape모든 API 오류는 같은 형태로 응답한다: { code, message, fieldErrors? }.전 화면 공통
normalhardcoded-screens-render박아 둔 데이터로 그리는 화면들이 오류 없이 떠야 한다.전 화면 공통
normalhome-no-legacy-host-assets이미지·링크가 원본 사이트(wvctesol.com)를 가리키면 안 된다. 이관 대상이다.
normallegal-page-loads두 화면 모두 비로그인으로 오류 없이 떠야 한다.이용약관
normalleveltest-exam-all-required한 문항이라도 비면 제출되지 않고 몇 번인지 알려야 한다.레벨테스트 응시
normalleveltest-result-next-step결과 화면에서 다음 행동(상담 · 수강신청)으로 갈 수 있어야 한다.레벨테스트 결과
normalmarketing-about-loads비로그인으로 정상 조회돼야 한다.대학 소개
normalmarketing-cta-links-valid수강신청 · 레벨테스트 링크가 실제 존재하는 화면으로 연결돼야 한다.TESOL 과정 소개
normalmarketing-tec-loads비로그인으로 정상 조회돼야 한다.TEC 과정 소개
normalmember-progress-empty기록이 없으면 빈칸이 아니라 없다고 말해야 한다.회원 관리
normalmember-progress-shown회원 상세에서 그 학생의 시청 기록과 학습일을 볼 수 있어야 한다.회원 관리
normalorder-amount-editor-shown결제 목록에서 금액을 바로 고칠 수 있어야 한다.결제 관리
normalorder-amount-updates고치면 금액만 바뀌고 상태·결제수단은 그대로여야 한다.결제 관리
normalorphan-records-member-list-clean회원 수 집계는 member 표만 세야 한다. 고아 기록이 수를 부풀리면 안 된다.전 화면 공통
normaloutline-tec-titles-match-dbTEC 커리큘럼 제목도 DB 와 같아야 한다.전 화면 공통
normaloutline-titles-match-db화면에 박아 둔 커리큘럼 제목이 DB 와 갈라지면 안 된다.전 화면 공통
normalphonics-no-quiz파닉스 화면에 시험 응시 진입점이 있으면 안 된다.파닉스 강의실
normalpoll-numbers-sent화면이 그린 문항 번호가 함께 전송돼야 한다.레벨테스트 응시
normalpoll-required-blocks-submit설문을 비우고 제출하면 화면에 사유가 보여야 한다.레벨테스트 응시
normalpoll-result-shown레벨테스트 신청 상세에서 그 사람의 설문 답을 볼 수 있어야 한다.상담신청
normalpoll-shown-on-exam응시 화면에 설문이 함께 나와야 하고 보기는 체크박스여야 한다.레벨테스트 응시
normalprofile-form-shows-server-message거절된 값은 서버가 준 문구를 그대로 보여 준다.TESOL 학생정보
normalprogress-not-shown-when-unseen안 본 레슨에 0% 를 띄우면 안 된다.강의 영상
normalprogress-player-loads영상 화면이 오류 없이 떠야 한다.강의 영상
normalprogress-resume-position영상 화면이 마지막 위치를 들고 와야 한다.강의 영상
normalprogress-shown-in-classroom본 레슨에는 강의실에 진도가 보여야 한다.강의 영상
normalqna-admin-cannot-write관리자가 문의를 새로 쓸 수 없어야 한다.질문답변
normalqna-write-validates제목 · 내용 · 분류가 비면 등록되지 않아야 한다.Q&A
normalreview-list-loads목록이 페이징과 함께 정상 조회돼야 한다.수강후기
normalscore-tec-label-moduleTEC 성적표 행 라벨이 Module 이어야 한다.TEC 성적표
normalsignin-log-logout-always-ok로그아웃은 아이디가 없거나 이상해도 500 을 내면 안 된다.로그인

확인되고 있는 가드레일 (45)

심각도가드레일확인하는 테스트
criticalglobal-ddl-auto-validateservers/wvctesol-api/src/test/java/com/wvctesol/api/bootstrap/ApplicationConfigTest.java
criticalglobal-no-secret-in-sourceservers/wvctesol-api/src/test/java/com/wvctesol/api/bootstrap/ApplicationConfigTest.java
highglobal-domain-purityshared/common-domain/src/test/java/com/wvctesol/common/domain/ArchitectureTest.java
highglobal-legacy-format-at-edgeshared/common-domain/src/test/java/com/wvctesol/common/domain/ArchitectureTest.java
normalsignin-log-recordeddomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/LoginUseCaseTest.java
criticallogin-empty-password-account-blockeddomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/LoginUseCaseTest.java
highjoin-duplicate-blockeddomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/SignUpUseCaseTest.java
criticaljoin-password-hasheddomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/SignUpUseCaseTest.java
criticaljoin-no-entitlement-on-signupdomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/SignUpUseCaseTest.java
criticalreset-link-only-by-maildomains/notification/notification-app/src/test/java/com/wvctesol/notification/app/AccountNotificationsTest.java
highnotification-failure-does-not-break-flowdomains/notification/notification-app/src/test/java/com/wvctesol/notification/app/AccountNotificationsTest.java
criticalreset-token-single-usedomains/identity/identity-security/src/test/java/com/wvctesol/identity/security/PasswordResetTokenTest.java
criticalreset-token-expiresdomains/identity/identity-security/src/test/java/com/wvctesol/identity/security/PasswordResetTokenTest.java
criticalscore-average-excludes-faileddomains/learning/learning-domain/src/test/java/com/wvctesol/learning/domain/ScoreReportTest.java
criticalcertificate-address-requires-issueddomains/learning/learning-domain/src/test/java/com/wvctesol/learning/domain/model/CertificateAddressTest.java
highcertificate-address-validateddomains/learning/learning-domain/src/test/java/com/wvctesol/learning/domain/model/CertificateAddressTest.java
criticalprogress-percent-from-serverdomains/learning/learning-domain/src/test/java/com/wvctesol/learning/domain/model/LectureProgressTest.java
highprogress-rejects-bad-valuesdomains/learning/learning-domain/src/test/java/com/wvctesol/learning/domain/model/LectureProgressTest.java
normalprogress-completed-thresholddomains/learning/learning-domain/src/test/java/com/wvctesol/learning/domain/model/LectureProgressTest.java
criticalclassroom-tec-uses-tec-flagsshared/common-domain/src/test/java/com/wvctesol/common/domain/EntitlementsTest.java
criticalstudent-tec-uses-tec-columnsshared/common-domain/src/test/java/com/wvctesol/common/domain/EntitlementsTest.java
criticalphonics-requires-own-flagshared/common-domain/src/test/java/com/wvctesol/common/domain/EntitlementsTest.java
criticalteaching-requires-own-flagshared/common-domain/src/test/java/com/wvctesol/common/domain/EntitlementsTest.java
criticalquiz-pass-score-70domains/assessment/assessment-domain/src/test/java/com/wvctesol/assessment/domain/GraderTest.java
criticalquiz-sequential-unit-lockdomains/assessment/assessment-domain/src/test/java/com/wvctesol/assessment/domain/ExamEligibilityTest.java
criticalquiz-kind-orderdomains/assessment/assessment-domain/src/test/java/com/wvctesol/assessment/domain/ExamEligibilityTest.java
criticalquiz-multi-answer-exact-matchdomains/assessment/assessment-domain/src/test/java/com/wvctesol/assessment/domain/GraderTest.java
highquiz-all-questions-requireddomains/assessment/assessment-domain/src/test/java/com/wvctesol/assessment/domain/GraderTest.java
criticalorder-amount-from-serverdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/PlaceOrderUseCaseTest.java
criticalorder-bank-stays-readydomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/PlaceOrderUseCaseTest.java
criticalorder-no-entitlement-before-paymentdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/PlaceOrderUseCaseTest.java
criticalpay-verify-signaturedomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/ApprovePaymentUseCaseTest.java
criticalpay-amount-matchdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/ApprovePaymentUseCaseTest.java
criticalpay-store-tiddomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/ApprovePaymentUseCaseTest.java
criticaladmin-requires-admin-roledomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/AdminOrderUseCaseTest.java
criticaladmin-confirm-opens-entitlementdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/AdminOrderUseCaseTest.java
criticaladmin-refund-revokes-entitlementdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/AdminOrderUseCaseTest.java
criticaladmin-refund-requires-pg-successdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/AdminOrderUseCaseTest.java
normaladmin-login-legacy-hash-upgradedomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/AdminLoginUseCaseTest.java
highadmin-login-approval-requireddomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/AdminLoginUseCaseTest.java
criticalorder-no-default-price-fallbackdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/PlaceOrderUseCaseTest.java
criticalorder-bundle-opens-bothdomains/commerce/commerce-app/src/test/java/com/wvctesol/commerce/app/AdminOrderUseCaseTest.java
highadmin-login-no-account-enumerationdomains/identity/identity-app/src/test/java/com/wvctesol/identity/app/AdminLoginUseCaseTest.java
criticalmember-field-whitelistdomains/identity/identity-domain/src/test/java/com/wvctesol/identity/domain/model/MemberFieldTest.java
highmember-value-formatdomains/identity/identity-domain/src/test/java/com/wvctesol/identity/domain/model/MemberFieldTest.java