docs: 티켓 풀에 고도화 점검 추가 티켓 14건 (20→34)
고도화 점검(다중 에이전트)에서 생존했으나 배치로 즉시 구현하지 않은 항목을 학생 실습 티켓으로 정식 등록. 기존 20개는 그대로, 새 섹션으로 추가: - OP-01/02: 컨테이너 헬스체크, push 자동 테스트 게이트(Gitea Actions CI) - SEC-01~05: 보안·권한 통합테스트(@WebMvcTest), PII 감사로그, 공개 쓰기 레이트리밋, 개인정보 접근 로그, 의존성 취약점 수동 점검 - QA-05/06: 프론트 첫 테스트(Vitest+gradeSql), 죽은 퀴즈 사본(seed/quiz 71개) 정리 - FE-08~10: 학습센터 진도율 로딩 가드, 멘토 '리뷰 대기' 카운트·정렬, 설치 가이드 진입점 - EDU-01/02: '웹 보안·인증 기초' 코스 신설, 코딩문제·캡스톤 문서 주차별 연결 각 티켓에 무엇을/찾는법/완료조건/멘토준비를 실코드 근거로 기입. 현황판 34행, 헤더 개수 표기 갱신. 배치에서 이미 구현한 4건(다운알림·로그회전·개인정보파기·퀴즈버튼)은 제외. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
0a4c769d00
commit
24ff3320a3
@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>수습용 실전 티켓 풀 20 · AWESOMEDEV</title>
|
||||
<title>수습용 실전 티켓 풀 34 · AWESOMEDEV</title>
|
||||
<style>
|
||||
:root {
|
||||
--paper: #FAFBFD; --card: #FFFFFF; --ink: #101A28; --ink-soft: #46536A;
|
||||
@ -135,10 +135,10 @@
|
||||
|
||||
<header class="mast">
|
||||
<div class="wordmark"><b>AWESOMEDEV</b> · 수습 실전 티켓 풀</div>
|
||||
<h1>실전 티켓 풀 20<br>템플릿 & 아이디어 카탈로그</h1>
|
||||
<p class="lede">5~6주차에 수습생에게 줄 실전 티켓 20개예요. 각 패턴마다 <strong>🎯 우리 건</strong> — 여러분이 매일 쓰는 이 학습 플랫폼(mirim-app)의 실제 코드에서 찾아 둔 구체적인 일감이 붙어 있어요. 여러분이 고치면 이 플랫폼이 정말로 좋아집니다. 파일 경로까지 적어 뒀으니, 배정받으면 바로 코드를 열어 보세요.</p>
|
||||
<h1>실전 티켓 풀 34<br>템플릿 & 아이디어 카탈로그</h1>
|
||||
<p class="lede">5주차부터 수습생에게 줄 실전 티켓 34개예요(기본 20 + 고도화 점검 추가 14). 각 티켓에 <strong>🎯 우리 건</strong> — 여러분이 매일 쓰는 이 학습 플랫폼(mirim-app)의 실제 코드에서 찾아 둔 구체적인 일감이 붙어 있어요. 여러분이 고치면 이 플랫폼이 정말로 좋아집니다. 파일 경로까지 적어 뒀으니, 배정받으면 바로 코드를 열어 보세요.</p>
|
||||
<div class="mast-meta">
|
||||
<span class="chip"><span class="dot"></span>프론트 7 · 백엔드 6 · 품질 4 · 디자인 3</span>
|
||||
<span class="chip"><span class="dot"></span>프론트 10 · 백엔드 6 · 품질 6 · 디자인 3 · 운영 2 · 보안 5 · 교육 2</span>
|
||||
<span class="chip"><span class="dot"></span>난이도 ★(반나절~1일) · ★★(2~3일)</span>
|
||||
<span class="chip"><span class="dot"></span>구체화 완료 · 배정 대기</span>
|
||||
</div>
|
||||
@ -402,6 +402,151 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 고도화 점검 추가 티켓 (2026-07-17) -->
|
||||
<div class="cat-div">
|
||||
<div class="cat-badge be">🔬</div>
|
||||
<div><h2>고도화 점검에서 나온 추가 티켓 (14건)</h2><div class="dm">2026-07-17 다중 에이전트 점검으로 발굴 · 운영·보안·테스트·UX·교육 전반. 위 20개와 같은 방식으로 배정하세요.</div></div>
|
||||
</div>
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">OP-01</div><h3>컨테이너 헬스체크 + 의존성 조건</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">1일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">backend·caddy 컨테이너에 HEALTHCHECK를 넣어 "죽지는 않았지만 응답을 멈춘(hang)" 상태를 감지한다. caddy의 <code>depends_on</code>을 <code>condition: service_healthy</code>로 올린다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">docker-compose.prod.yml에 postgres만 healthcheck가 있음. backend엔 무인증 200 GET이 없으니 actuator 대신 wget/nc로 8080 응답 존재만 확인하는 가벼운 형태로.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">backend·caddy에 healthcheck 추가, <code>docker ps</code>에 (healthy) 표시, 일부러 hang 상황을 만들어 재기동되는지 확인.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">이미 있는 헬스체크 알림(deploy/healthcheck.sh)과 역할이 다름을 설명 — 이건 컨테이너 자동복구, 그건 사람 알림.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">OP-02</div><h3>push 시 자동 테스트 게이트 (Gitea Actions)</h3></div><div class="tk-meta"><span class="diff d2">★★</span><span class="dur">2~3일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">Gitea Actions 러너를 EC2에 등록하고 <code>.gitea/workflows/test.yml</code>로 push마다 <code>mvn -q test</code>(+ 가능하면 vitest)를 돌려, 회귀를 배포 전에 잡는 초록/빨강 체크를 만든다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt"><code>.gitea/workflows</code>·<code>.github/workflows</code>가 전무 — 지금은 사람이 수동으로 mvn test. "CI가 뭘 하는지"를 직접 세워 보는 게 목표.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">러너 등록, 워크플로 작성, 일부러 실패하는 테스트를 push해 빨간 체크가 뜨는 것까지 확인(그다음 고쳐 초록).</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">CI는 교육용으로 일부러 안 만든 항목 — 러너 운영 부담을 설명하고 범위를 test만으로 한정.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">SEC-01</div><h3>보안·권한 계약 통합테스트 (@WebMvcTest)</h3></div><div class="tk-meta"><span class="diff d2">★★</span><span class="dur">2~3일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">SecurityConfig의 URL→권한 규칙을 검증하는 통합테스트를 작성한다: (1) 비로그인 <code>/api/mentor/students</code>→401, (2) STUDENT 세션→403, (3) MENTOR→통과, (4) <code>/api/auth/login·signup</code>→permitAll 도달.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">backend/src/test는 전부 서비스 단위테스트라 컨트롤러/보안 계약 테스트가 0건. 권한은 SecurityConfig 한 곳에만 있고 검증이 없다.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt"><code>@WebMvcTest</code> + <code>spring-security-test</code>로 위 5가지 단언, 전부 초록.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">spring-security-test 의존성 추가, @MockBean으로 서비스 대체하는 패턴 안내.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">SEC-02</div><h3>민감 PII 작업 감사로그</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">1일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">전체 인적사항 CSV 다운로드·멘토 비번 재설정·명단 조회에 "행위자(멘토)+대상 학생 id+시각"을 <code>log.info</code>로 남긴다. 세션 Authentication에서 행위자를 얻는다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">백엔드 log.* 호출은 LoginAttemptService·TelegramNotifier뿐. mentor/auth/profile 경로엔 감사로그가 전무 — 누가 전체 명단을 받았는지 추적 불가.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">위 세 경로에 감사로그 추가, 실제 호출 후 로그에 행위자·대상·시각이 남는지 확인.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">미성년 PII라 추적이 왜 중요한지 설명. TelegramNotifier로 "CSV 전체 다운로드됨" 알림을 함께 보내도 좋음.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">SEC-03</div><h3>공개 쓰기 엔드포인트 레이트리밋</h3></div><div class="tk-meta"><span class="diff d2">★★</span><span class="dur">2일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">이미 있는 LoginAttemptService 패턴(IP+창시간)을 재사용해 <code>POST /api/auth/signup</code>과 <code>PUT /api/profile/me</code>에 분당 상한을 건다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">signup은 무인증으로 DB에 계정을 쓰고 성공마다 텔레그램 알림까지 쏜다 — 남용 시 가짜계정·알림 폭주 표면.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">짧은 시간에 반복 요청 시 429가 나는지 확인, 정상 사용은 영향 없음.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">로그인 잠금(LoginAttemptService) 코드를 먼저 읽게 하고, 재사용/일반화하는 방향으로 안내.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">SEC-04</div><h3>개인정보 열람·내보내기 접근 로그</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">0.5일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt"><code>/api/mentor/students</code>(전체 인적사항)와 <code>/export.csv</code>에 접근 한 줄(사용자·행위·시각) 로그를 남긴다. SEC-02와 짝.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">두 경로 모두 누가·언제 접근했는지 기록이 0. 유출 시 추적 근거가 없다.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">두 경로 접근 시 로그 한 줄이 남는지 확인.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">"접근 감사" 개념 설명. 소규모라 법적 강제성은 낮지만 습관으로 배우는 주제.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">SEC-05</div><h3>의존성 취약점 손으로 점검해 보기</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">0.5일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">backend는 <code>mvn versions:display-dependency-updates</code>(또는 OWASP dependency-check) 1회, frontend는 <code>npm audit</code>를 돌려 결과를 읽고 STUDY.md에 정리한다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">지금 버전은 대체로 최신이라 급한 건 없다 — "취약점이 어떻게 딸려 오는지"와 audit 읽는 법을 배우는 게 목적.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">audit 결과 요약 + "무엇을 언제 올려야 하나" 판단 한 단락을 STUDY.md에 추가.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">CI 자동화가 아니라 "손으로 한 번 돌려 읽기"로 범위 한정.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">QA-05</div><h3>프론트 첫 테스트 — 채점 함수 gradeSql 검증</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">1일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">Vitest를 devDependency로 추가하고 test 스크립트 1줄 + 최소 설정 후, <code>frontend/src/lib/runSql.js</code>의 순수함수 <code>gradeSql</code> 단위테스트를 작성한다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">frontend에 테스트 러너가 아예 없다. gradeSql은 SQL 통과/실패를 결정하는데, 서버는 그 판정을 그대로 믿고 저장한다 — 조용히 깨지면 진도가 잘못 기록된다.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">행 개수 불일치→false, orderMatters=false 순서무시 동등, true일 때 순서 다르면 오답, 값만 비교 — 4케이스 초록.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">runJs/runSql은 Worker·WASM 의존이라 이번 범위 밖(후속 티켓)임을 명시.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">QA-06</div><h3>죽은 퀴즈 사본 정리 (seed/quiz 71개)</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">0.5일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt"><code>seed/quiz/</code> 폴더(코스별 71개 파일)를 제거하거나, 최소한 "실사용은 quizzes.json"이라는 안내를 남겨 단일 출처로 정리한다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">실제 적재는 <code>SeedDataLoader</code>가 <code>seed/quizzes.json</code>(단일 355문항)만 읽는다. quiz/ 폴더는 어디서도 참조 안 됨(grep 0건) — 고쳐도 앱에 반영 안 되는 함정.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">quiz/ 삭제(또는 명확한 주석/README), quizzes.json이 단일 출처임을 확인.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">"편집하기 좋아 보이는 죽은 파일"이 왜 위험한지 — 교재로서 가장 나쁜 함정임을 설명.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">FE-08</div><h3>학습센터 진도율 로딩 가드 (0% 깜빡임)</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">0.5일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt"><code>LearnHubPage</code>에 loading 가드를 추가해, fetch 도착 전 순간적으로 "0% · 모든 코스 미완료"가 보였다 갱신되는 깜빡임을 없앤다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">completedSlugs를 빈 Set으로 두고 즉시 렌더. 대시보드 위젯·CourseShell은 로딩 처리가 있는데 여기만 빠짐(감사에서 지적된 일관성의 남은 사례).</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">느린 네트워크(throttling)에서 0% 깜빡임 없이 로딩→실제 진도로 자연스럽게 전환.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">대시보드 위젯의 로딩 처리를 참고 예시로 알려주기.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">FE-09</div><h3>멘토 '리뷰 대기' 한눈에 보기</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">1일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">멘토 화면 상단에 '리뷰 대기 N건' 카운트와 '미검토(SUBMITTED) 우선' 정렬/필터 토글을 추가한다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">/mentor/submissions·/mentor/coding-submissions가 최신순 평면 목록이라, 미검토 건을 상태 배지로 눈으로 스캔해야 함.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">미검토 건수 표시, 토글 시 미검토가 위로 정렬, 8주 누적돼도 놓치지 않음.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">개별 타임라인/일괄 피드백은 4명 규모엔 과잉 — 카운트·정렬만으로 충분함을 안내.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">FE-10</div><h3>'개발 환경 설치 가이드' 진입점 만들기</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">0.5일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">대시보드에 '처음이라면: 개발 환경 설치 가이드부터' 배너나 nav의 눈에 띄는 링크 하나를 추가한다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">설치 가이드가 학습센터 마지막 카테고리 "부록·도구"의 첫 항목으로만 있고 nav·대시보드에 링크가 없다. 개발 3명이 첫날 스스로 못 찾으면 멘토가 병목.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">첫 로그인 학생이 대시보드/nav에서 설치 가이드로 한 번에 도달.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">온보딩 첫 관문임을 강조. 링크 하나로 해결되는 저비용 개선.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">EDU-01</div><h3>'웹 보안·인증 기초' 코스 신설</h3></div><div class="tk-meta"><span class="diff d2">★★</span><span class="dur">2~3일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">학습센터에 웹/애플리케이션 보안(비밀번호 해싱·세션/쿠키·무차별대입·인가) 코스 1개를 신설한다. 이 앱에 이미 있는 구현(BCrypt·changeSessionId·로그인 잠금·쿠키 플래그·서버측 정답 보관)을 읽고 개념화한다.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">71개 코스에 네트워크 보안(wifi-security·firewall)은 있으나 웹 보안이 없다. 마침 이 저장소가 그 주제의 살아있는 예제다.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">courseCatalog에 코스 등록 + 코스 페이지(courses/) 작성 + 확인 퀴즈, 실제 코드 참조 포함.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">새 이론이 아니라 "있는 코드를 개념으로 잇기"임을 강조. 후반부 실습 티켓감.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="ticket">
|
||||
<div class="tk-head"><div><div class="id">EDU-02</div><h3>코딩 문제·캡스톤 문서를 주차별 교육안에 연결</h3></div><div class="tk-meta"><span class="diff d1">★</span><span class="dur">0.5일</span></div></div>
|
||||
<div class="tk-body">
|
||||
<div class="row what"><span class="lab">무엇을</span><span class="txt">주차별 문서에 교차참조 추가: (1) 관련 주차(3~4주 자립코딩, 5~6주 티켓)에 '학습센터→코딩 문제로 손 풀기' 링크, (2) week7·8 강의안에서 capstone-demoday 문서 링크.</span></div>
|
||||
<div class="row find"><span class="lab">찾는 법</span><span class="txt">코딩 문제 25개와 capstone-demoday 문서가 주차별 교육안·수습 가이드 어디에도 언급 없음 — 좋은 자료가 사장될 위험.</span></div>
|
||||
<div class="row dod"><span class="lab">완료 조건</span><span class="txt">해당 주차 문서에 링크·안내 문장 추가, 1~4주와 5~8주를 잇는 동선이 문서상 연결됨.</span></div>
|
||||
<div class="row prep"><span class="lab">멘토 준비</span><span class="txt">멘토가 "언제 무엇을 시킬지" 안내가 목적임을 설명.</span></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Ticket form -->
|
||||
<section id="form">
|
||||
<div class="eyebrow">구체화 양식</div>
|
||||
@ -456,6 +601,20 @@
|
||||
<tr><td class="num">DZ-01</td><td>빈 상태·오류 화면 디자인 세트</td><td>☑</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">DZ-02</td><td>퀴즈 결과 화면 UX 관찰·개선 제안</td><td>☑</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">DZ-03</td><td>미니 디자인 시스템 정리표</td><td>☑</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">OP-01</td><td>컨테이너 헬스체크 + 의존성 조건</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">OP-02</td><td>push 시 자동 테스트 게이트 (Gitea Actions)</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">SEC-01</td><td>보안·권한 계약 통합테스트 (@WebMvcTest)</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">SEC-02</td><td>민감 PII 작업 감사로그</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">SEC-03</td><td>공개 쓰기 엔드포인트 레이트리밋</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">SEC-04</td><td>개인정보 열람·내보내기 접근 로그</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">SEC-05</td><td>의존성 취약점 손으로 점검해 보기</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">QA-05</td><td>프론트 첫 테스트 — 채점 함수 gradeSql 검증</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">QA-06</td><td>죽은 퀴즈 사본 정리 (seed/quiz 71개)</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">FE-08</td><td>학습센터 진도율 로딩 가드 (0% 깜빡임)</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">FE-09</td><td>멘토 '리뷰 대기' 한눈에 보기</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">FE-10</td><td>'개발 환경 설치 가이드' 진입점 만들기</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">EDU-01</td><td>'웹 보안·인증 기초' 코스 신설</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
<tr><td class="num">EDU-02</td><td>코딩 문제·캡스톤 문서를 주차별 교육안에 연결</td><td>☐</td><td><span class="fill"></span></td><td><span class="fill"></span></td><td><span class="fill"></span></td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user