기술 심사
기술 심사는 TQS 인증 절차의 3단계로, TQS 위원회가 제출된 산출물과 프로젝트 소스코드를 기반으로 TQS 규격 충족 여부를 검증하는 핵심 과정입니다. 본 장은 심사 방법, 항목별 검증 방법, 판정 기준, 보완 요청 절차, 결과 통보에 대해 정의합니다.
31.4.1. 심사 방법
TQS 기술 심사는 자동 검증과 수동 리뷰를 병행하여 수행합니다. 두 방법을 결합함으로써 도구로 정량화 가능한 항목과 인간의 판단이 필요한 항목을 모두 검증할 수 있습니다.
31.4.1.1. 자동 검증
자동 검증은 CI/CD 파이프라인 실행 결과와 자동화 도구의 검증 결과를 확인하는 방식입니다. 자동 검증은 전체 심사의 60% 비중을 차지합니다.
자동 검증의 대상과 도구는 다음과 같습니다.
| 검증 항목 | 도구 | 기준 | 검증 방법 |
|---|---|---|---|
| 백엔드 코드 포매팅 | Spotless (Google Java Format) | 위반 0건 | mvn spotless:check 실행 결과 확인 |
| 프론트엔드 린트 | ESLint (Flat Config) | 에러 0건 | npx eslint . 실행 결과 확인 |
| 프론트엔드 포매팅 | Prettier | 위반 0건 | npx prettier --check . 실행 결과 확인 |
| 백엔드 테스트 커버리지 | JaCoCo | 라인 80%, 브랜치 70% | JaCoCo HTML 리포트 수치 확인 |
| 프론트엔드 테스트 커버리지 | Vitest coverage | 라인 80%, 브랜치 70% | 커버리지 리포트 수치 확인 |
| 프론트엔드 성능 | Lighthouse | 성능 90점 이상 | Lighthouse 리포트 점수 확인 |
| 의존성 보안 취약점 | OWASP Dependency-Check | CVSS 7 이상 0건 | 스캔 리포트 결과 확인 |
| CI/CD 파이프라인 | CircleCI | 최근 5회 성공 | 빌드 이력 확인 |
자동 검증은 TQS 위원회가 직접 도구를 실행하거나, 프로젝트 팀이 제출한 결과물을 검토하는 방식으로 수행합니다. CI/CD 파이프라인이 정상 구동되는 프로젝트의 경우, TQS 위원회가 파이프라인을 직접 트리거하여 결과를 확인할 수 있습니다.
31.4.1.2. 수동 리뷰
수동 리뷰는 TQS 위원회의 심사위원이 소스코드와 프로젝트 구조를 직접 확인하는 방식입니다. 수동 리뷰는 전체 심사의 40% 비중을 차지합니다.
수동 리뷰의 대상은 다음과 같습니다.
- 코드 컨벤션: 네이밍 규칙 준수 여부, 코드 가독성, 주석 적정성
- 아키텍처 패턴: 기능별 패키지 구조 적용, 계층 분리, 의존성 방향
- 보안 구현: Spring Security 설정, 인증/인가 로직, SQL 파라미터 바인딩, 입력 검증
- 테스트 품질: Given-When-Then 패턴 적용, 테스트 케이스의 의미성, 경계값 테스트 포함 여부
- 프로젝트 구조: 디렉토리 구조의 표준 준수, 설정 파일 관리, 환경별 프로파일 분리
- 프론트엔드 설계: 컴포넌트 설계 원칙, Composition API 활용, 상태 관리 패턴
수동 리뷰는 최소 2인의 심사위원이 독립적으로 수행합니다. 각 심사위원은 담당 영역에 대해 리뷰 결과를 작성하며, 최종 판정은 심사위원 간의 합의를 통해 결정합니다.
31.4.1.3. 심사 비율
자동 검증과 수동 리뷰의 비율은 심사 유형에 따라 다릅니다.
| 심사 유형 | 자동 검증 | 수동 리뷰 | 비고 |
|---|---|---|---|
| 최초 심사 | 60% | 40% | 전체 항목 대상 |
| 갱신 심사 | 70% | 30% | 변경 사항 + 핵심 항목 |
| 변경 심사 | 변동 | 변동 | 변경 범위에 따라 결정 |
자동 검증의 비율이 높은 이유는 TQS 규격의 상당 부분이 도구를 통해 정량적으로 검증 가능하기 때문입니다. 다만, 수동 리뷰를 통해 도구로 포착할 수 없는 설계 품질, 코드의 의도, 보안 로직의 적정성을 함께 검증합니다.
31.4.2. 심사 항목별 검증 방법
TQS 기술 심사의 세부 영역별 자동 검증 도구와 수동 리뷰 항목을 정의합니다.
31.4.2.1. 검증 매트릭스
| 심사 영역 | 자동 검증 도구 | 수동 리뷰 항목 |
|---|---|---|
| 코드 컨벤션 | Spotless, ESLint, Prettier | 네이밍 규칙 준수, 코드 가독성, 주석 적정성 |
| 테스트 | JaCoCo, Vitest coverage | 테스트 품질, Given-When-Then 패턴, 경계값 테스트 |
| 보안 | OWASP Dependency-Check | Spring Security 설정, SQL 파라미터 바인딩, 입력 검증, 시크릿 관리 |
| 성능 | Lighthouse | 번들 크기 최적화, 이미지 최적화, 코드 스플리팅 |
| 프로젝트 구조 | — | 패키지 구조, 디렉토리 구조, 설정 파일 관리 |
| CI/CD | CircleCI 빌드 로그 | 파이프라인 단계 구성, 환경 분리, 빌드 안정성 |
| 형상관리 | — | 브랜치 전략, 커밋 메시지 형식, PR 프로세스 |
| API 설계 | SpringDoc (Swagger UI) | RESTful 규칙, 에러 응답 형식, 날짜 형식 |
31.4.2.2. 영역별 세부 검증 기준
코드 컨벤션 영역
코드 컨벤션 영역은 소스코드의 일관성과 가독성을 검증합니다. 자동 검증으로 포매팅 규칙 준수를 확인하고, 수동 리뷰로 네이밍 규칙과 코드 품질을 확인합니다.
| 검증 항목 | 검증 방법 | 합격 기준 |
|---|---|---|
| Google Java Format 적용 | mvn spotless:check | 위반 0건 |
| ESLint 규칙 적용 | npx eslint . | 에러 0건, 경고 최소화 |
| Prettier 적용 | npx prettier --check . | 위반 0건 |
| Java 네이밍 규칙 | 수동 리뷰 | 클래스(PascalCase), 메서드(camelCase), 상수(UPPER_SNAKE_CASE) |
| Vue 컴포넌트 네이밍 | 수동 리뷰 | PascalCase 파일명, 다중 단어 컴포넌트명 |
| TypeScript strict 모드 | tsconfig.json 확인 | strict: true 설정 |
테스트 영역
테스트 영역은 테스트의 충분성과 품질을 검증합니다. 커버리지 수치와 함께 테스트 코드의 작성 패턴과 의미성을 함께 평가합니다.
| 검증 항목 | 검증 방법 | 합격 기준 |
|---|---|---|
| 백엔드 라인 커버리지 | JaCoCo 리포트 | 80% 이상 |
| 백엔드 브랜치 커버리지 | JaCoCo 리포트 | 70% 이상 |
| 프론트엔드 라인 커버리지 | Vitest coverage | 80% 이상 |
| 프론트엔드 브랜치 커버리지 | Vitest coverage | 70% 이상 |
| Given-When-Then 패턴 | 수동 리뷰 | JUnit 5 테스트 전체 적용 |
| 컴포넌트 테스트 | 수동 리뷰 | 주요 컴포넌트 테스트 작성 |
| 컴포저블 테스트 | 수동 리뷰 | 비즈니스 로직 포함 컴포저블 테스트 작성 |
보안 영역
보안 영역은 프로젝트의 보안 구현 수준을 검증합니다. 보안 항목은 다른 영역보다 엄격한 기준을 적용하며, Critical 항목의 미충족은 즉시 불합격 사유에 해당합니다.
| 검증 항목 | 검증 방법 | 합격 기준 | 중요도 |
|---|---|---|---|
| TLS 1.2 이상 적용 | 설정 파일 확인 | 적용 완료 | Critical |
| 비밀번호 BCrypt 해시 | 수동 리뷰 | 적용 완료 | Critical |
| Spring Security 적용 | 수동 리뷰 | 인증/인가 설정 완료 | Critical |
| SQL 파라미터 바인딩 | 수동 리뷰 | jOOQ 바인딩 사용, 문자열 연결 미사용 | Critical |
| 소스코드 내 시크릿 | 수동 리뷰 | 하드코딩 0건 | Critical |
| Bean Validation 적용 | 수동 리뷰 | 요청 DTO에 검증 어노테이션 적용 | High |
v-html 미사용 | 수동 리뷰 | 미사용 또는 DOMPurify 적용 | High |
| OWASP 스캔 | 리포트 확인 | CVSS 7 이상 0건 | High |
31.4.3. 심사 판정 기준
기술 심사의 판정은 통과, 조건부 통과, 불합격의 3가지로 구분됩니다. 판정 기준은 필수 항목의 충족률과 보안 Critical 항목의 충족 여부에 따라 결정됩니다.
31.4.3.1. 판정 기준표
| 판정 | 필수 항목 충족률 | 보안 Critical | 조건 |
|---|---|---|---|
| 통과 | 100% | 전체 충족 | 필수 항목을 모두 충족한 경우 |
| 조건부 통과 | 90% 이상 100% 미만 | 전체 충족 | 미충족 항목 2주 내 보완 조건 |
| 불합격 | 90% 미만 | — | 필수 항목 충족률 90% 미만 |
| 불합격 | — | 1건 이상 미충족 | 보안 Critical 항목 미충족 |
31.4.3.2. 통과
통과는 모든 필수 항목을 충족한 경우에 부여되는 판정입니다. 통과 판정을 받은 프로젝트는 즉시 인증 발급 단계(4단계)로 진행합니다.
통과 판정 시 인증 등급이 함께 결정됩니다. 등급은 권장 항목의 충족률에 따라 기본, 우수, 최우수로 구분됩니다.
| 등급 | 필수 항목 | 권장 항목 충족률 |
|---|---|---|
| 기본 | 100% 충족 | 80% 미만 |
| 우수 | 100% 충족 | 80% 이상 100% 미만 |
| 최우수 | 100% 충족 | 100% |
31.4.3.3. 조건부 통과
조건부 통과는 필수 항목 충족률이 90% 이상이지만 100%에 미달하는 경우에 부여되는 판정입니다. 보안 Critical 항목은 반드시 전체 충족 상태여야 합니다.
조건부 통과 판정 시 다음 조건이 부여됩니다.
- 미충족 항목에 대한 보완 요청서가 발급됩니다.
- 보완 기한은 판정일로부터 2주(10영업일) 입니다.
- 보완 기한 내에 미충족 항목을 모두 해소해야 합니다.
- 보완 완료 후 재확인 심사를 받아야 합니다.
보완 기한 내에 보완을 완료하지 못한 경우, 조건부 통과는 불합격으로 전환됩니다. 보완 기한은 연장할 수 없습니다.
31.4.3.4. 불합격
불합격은 필수 항목 충족률이 90% 미만이거나 보안 Critical 항목이 미충족인 경우에 부여되는 판정입니다.
불합격 판정을 받은 프로젝트는 다음 절차를 따릅니다.
- 심사 리포트를 통해 미충족 항목의 상세 내역을 확인합니다.
- 미충족 항목에 대한 보완 작업을 수행합니다.
- 보완 작업 완료 후 1단계(사전 검토)부터 다시 진행합니다.
- 재심사 요청 시 이전 심사에서 지적된 항목의 보완 내역을 명시해야 합니다.
불합격 후 재심사까지의 최소 대기 기간은 없습니다. 프로젝트 팀은 보완 작업 완료 즉시 재심사를 요청할 수 있습니다.
31.4.4. 보완 요청 절차
조건부 통과 판정 시 보완 요청 절차가 시작됩니다. 보완 요청은 미충족 항목을 명확히 전달하고, 보완 완료 여부를 확인하는 체계적인 프로세스입니다.
31.4.4.1. 보완 절차 흐름
각 단계의 상세 내용은 다음과 같습니다.
| 단계 | 수행 주체 | 활동 | 소요 기간 |
|---|---|---|---|
| 보완 요청서 발급 | TQS 위원회 | 미충족 항목, 보완 기준, 기한 명시 | 판정 후 즉시 |
| 보완 작업 수행 | 프로젝트 팀 | 미충족 항목 해소, 코드 수정, 설정 변경 | 최대 2주 |
| 보완 완료 보고 | 프로젝트 팀 | 보완 내역 및 근거 자료 제출 | — |
| 재확인 심사 | TQS 위원회 | 보완 항목에 한정하여 재검증 | 3영업일 |
| 최종 판정 | TQS 위원회 | 통과 또는 불합격 판정 | 즉시 |
31.4.4.2. 보완 요청서 내용
보완 요청서에는 다음 정보가 포함됩니다.
| 항목 | 내용 |
|---|---|
| 심사 번호 | 해당 심사의 고유 식별 번호 |
| 프로젝트명 및 버전 | 심사 대상 프로젝트 정보 |
| 판정 결과 | 조건부 통과 |
| 미충족 항목 목록 | 항목 번호, 항목명, 미충족 사유, 보완 기준 |
| 보완 기한 | 판정일로부터 2주(10영업일) |
| 보완 완료 보고 방법 | 제출 양식 및 제출 경로 |
| 담당 심사위원 | 재확인 심사를 수행할 위원 |
31.4.4.3. 재확인 심사
재확인 심사는 보완 요청된 항목에 한정하여 수행됩니다. 기존 심사에서 충족으로 판정된 항목은 재확인 대상에 포함되지 않습니다.
재확인 심사 결과는 통과 또는 불합격만 존재합니다. 재확인 심사에서 조건부 통과는 부여되지 않습니다. 보완 항목을 모두 충족하면 통과, 하나라도 미충족이면 불합격으로 판정됩니다.
31.4.5. 심사 결과 통보
심사 완료 후 TQS 위원회는 프로젝트 팀에 심사 결과를 공식적으로 통보합니다.
31.4.5.1. 통보 기한
심사 완료일로부터 3영업일 이내에 결과를 통보해야 합니다. 통보는 프로젝트 리드에게 공식 문서(심사 리포트)와 함께 전달됩니다.
31.4.5.2. 심사 리포트
심사 리포트는 심사 과정과 결과를 종합적으로 기록한 공식 문서입니다. 심사 리포트에는 다음 정보가 포함됩니다.
| 리포트 항목 | 내용 |
|---|---|
| 심사 기본 정보 | 심사 번호, 프로젝트명, 버전, 심사 유형, 심사 기간 |
| 심사위원 정보 | 심사에 참여한 위원 목록 |
| 영역별 심사 결과 | 코드 컨벤션, 테스트, 보안, 성능, 구조, CI/CD 영역별 결과 |
| 항목별 충족 현황 | 전체 항목의 충족/미충족 상세 현황 |
| 자동 검증 결과 요약 | 각 도구별 실행 결과 요약 |
| 수동 리뷰 소견 | 심사위원의 코드 리뷰 의견 및 개선 권고 사항 |
| 최종 판정 | 통과/조건부 통과/불합격 및 사유 |
| 인증 등급 (통과 시) | 기본/우수/최우수 및 산정 근거 |
31.4.5.3. 심사 결과에 대한 이의 제기
프로젝트 팀은 심사 결과에 대해 이의를 제기할 수 있습니다. 이의 제기는 결과 통보일로부터 5영업일 이내에 서면으로 제출해야 합니다.
이의 제기 시 다음 사항을 명시해야 합니다.
- 이의 대상 항목 (심사 리포트의 항목 번호)
- 이의 사유 (구체적인 근거 포함)
- 프로젝트 팀의 주장을 뒷받침하는 증거 자료
TQS 위원회는 이의 제기를 접수한 후 5영업일 이내에 검토 결과를 통보합니다. 이의가 수용될 경우 심사 결과가 변경되며, 기각될 경우 기존 판정이 유지됩니다. 이의 제기는 1회에 한하여 가능합니다.