type BonusQuestionSeed = {
  id: string;
  examId?: string;
  subjectId: string;
  setId: string;
  body: string;
  answerValue: string;
  explanation: string;
  difficulty: 'easy' | 'medium' | 'hard';
  tags: string[];
  correctRate: number;
  choices: [string, string, string, string];
  sourceLabel?: string;
};

export const CBT_BONUS_QUESTION_SEEDS: BonusQuestionSeed[] = [
  {
    id: 'algo-core-7',
    subjectId: 'algo',
    setId: 'algo-core',
    body: '요구사항 추적표(Traceability Matrix)를 유지하는 주된 목적은 무엇인가요?',
    answerValue: '2',
    explanation: '요구사항이 설계, 구현, 테스트까지 빠짐없이 연결됐는지 확인하려고 사용합니다.',
    difficulty: 'medium',
    tags: ['요구사항', '관리'],
    correctRate: 0.64,
    choices: ['배포 서버를 자동 증설하려고', '요구사항과 산출물의 연결 상태를 검증하려고', '소스 코드를 난독화하려고', '화면 시안을 압축하려고'],
  },
  {
    id: 'algo-core-8',
    subjectId: 'algo',
    setId: 'algo-core',
    body: '타당성 검토에서 기술적 타당성을 확인할 때 가장 먼저 보는 관점은 무엇인가요?',
    answerValue: '3',
    explanation: '현 기술 스택과 인력으로 요구 기능을 구현 가능한지 확인하는 것이 기술적 타당성의 핵심입니다.',
    difficulty: 'medium',
    tags: ['타당성', '분석'],
    correctRate: 0.71,
    choices: ['사무실 좌석 배치를 바꾸는 비용', '광고 문구의 완성도', '현재 기술과 인력으로 구현 가능한지 여부', '배경 이미지 해상도'],
  },
  {
    id: 'algo-pattern-7',
    subjectId: 'algo',
    setId: 'algo-pattern',
    body: '기존 인터페이스와 호환되지 않는 클래스를 현재 구조에 맞게 연결할 때 적절한 패턴은 무엇인가요?',
    answerValue: '1',
    explanation: 'Adapter 패턴은 기존 클래스를 원하는 인터페이스로 감싸 호환되게 만듭니다.',
    difficulty: 'medium',
    tags: ['패턴', '설계'],
    correctRate: 0.59,
    choices: ['Adapter', 'Iterator', 'Memento', 'Visitor'],
  },
  {
    id: 'algo-pattern-8',
    subjectId: 'algo',
    setId: 'algo-pattern',
    body: '부분-전체 계층 구조를 동일한 방식으로 다뤄야 할 때 적절한 패턴은 무엇인가요?',
    answerValue: '4',
    explanation: 'Composite 패턴은 개별 객체와 복합 객체를 같은 인터페이스로 다룰 수 있게 합니다.',
    difficulty: 'hard',
    tags: ['패턴', '구조'],
    correctRate: 0.47,
    choices: ['Proxy', 'State', 'Interpreter', 'Composite'],
  },
  {
    id: 'algo-quality-7',
    subjectId: 'algo',
    setId: 'algo-quality',
    body: '기능적 관련 요소가 하나의 모듈에 모여 있는 상태를 설명하는 응집도는 무엇인가요?',
    answerValue: '2',
    explanation: '기능적 응집도는 모듈이 하나의 명확한 기능만 수행하도록 묶인 가장 바람직한 형태입니다.',
    difficulty: 'medium',
    tags: ['품질', '응집도'],
    correctRate: 0.56,
    choices: ['우연적 응집도', '기능적 응집도', '시간적 응집도', '논리적 응집도'],
  },
  {
    id: 'algo-quality-8',
    subjectId: 'algo',
    setId: 'algo-quality',
    body: '가용성(Availability) 품질 속성을 수치로 확인할 때 가장 직접적인 지표는 무엇인가요?',
    answerValue: '3',
    explanation: '정상 서비스 시간 비율이나 SLA 충족률은 가용성을 대표하는 지표입니다.',
    difficulty: 'medium',
    tags: ['품질', '가용성'],
    correctRate: 0.63,
    choices: ['화면 전환 애니메이션 수', '개발자 수', '정상 서비스 시간 비율', 'ERD 컬럼 수'],
  },
  {
    id: 'dev-core-7',
    subjectId: 'dev',
    setId: 'dev-core',
    body: '나선형(Spiral) 모델의 핵심 특징으로 가장 적절한 것은 무엇인가요?',
    answerValue: '1',
    explanation: '반복 개발과 위험 분석을 함께 수행하는 것이 나선형 모델의 핵심입니다.',
    difficulty: 'medium',
    tags: ['프로세스', '개발방법론'],
    correctRate: 0.62,
    choices: ['반복 개발 단계마다 위험을 분석한다', '요구사항 변경을 절대 허용하지 않는다', '테스트를 배포 후에만 수행한다', '모든 산출물을 한 번에 작성한다'],
  },
  {
    id: 'dev-core-8',
    subjectId: 'dev',
    setId: 'dev-core',
    body: 'DevOps 도입의 직접적인 목표로 가장 적절한 것은 무엇인가요?',
    answerValue: '4',
    explanation: '개발과 운영 협업을 강화해 배포 속도와 안정성을 함께 높이는 것이 목적입니다.',
    difficulty: 'medium',
    tags: ['DevOps', '협업'],
    correctRate: 0.74,
    choices: ['운영팀을 없앤다', '테스트를 생략한다', '문서를 금지한다', '개발과 운영의 피드백 주기를 단축한다'],
  },
  {
    id: 'dev-test-7',
    subjectId: 'dev',
    setId: 'dev-test',
    body: '기존 기능 수정 후 주변 기능이 깨지지 않았는지 확인하는 테스트는 무엇인가요?',
    answerValue: '2',
    explanation: '회귀 테스트는 변경 이후 기존 기능의 정상 동작을 다시 확인하는 테스트입니다.',
    difficulty: 'medium',
    tags: ['테스트', '회귀'],
    correctRate: 0.77,
    choices: ['인수 테스트', '회귀 테스트', '알파 테스트', '베타 테스트'],
  },
  {
    id: 'dev-test-8',
    subjectId: 'dev',
    setId: 'dev-test',
    body: '입력 구간의 경계값에서 오류가 자주 발생한다는 점에 착안한 테스트 기법은 무엇인가요?',
    answerValue: '3',
    explanation: '경계값 분석은 최소값, 최대값, 바로 인접한 값에서 결함을 찾는 기법입니다.',
    difficulty: 'medium',
    tags: ['테스트', '기법'],
    correctRate: 0.68,
    choices: ['원인-결과 그래프', '오류 추정', '경계값 분석', '상태 전이 테스트'],
  },
  {
    id: 'dev-release-7',
    subjectId: 'dev',
    setId: 'dev-release',
    body: 'Blue-Green 배포의 장점으로 가장 적절한 것은 무엇인가요?',
    answerValue: '1',
    explanation: '신구 환경을 분리해 두고 전환하므로 롤백이 빠르고 서비스 중단을 줄일 수 있습니다.',
    difficulty: 'medium',
    tags: ['배포', '운영'],
    correctRate: 0.58,
    choices: ['문제 발생 시 빠르게 이전 환경으로 전환할 수 있다', '데이터베이스가 자동 정규화된다', '보안 취약점이 모두 사라진다', '테스트 코드가 필요 없어진다'],
  },
  {
    id: 'dev-release-8',
    subjectId: 'dev',
    setId: 'dev-release',
    body: '시맨틱 버저닝에서 `2.4.1`의 마지막 숫자가 증가하는 일반적인 경우는 무엇인가요?',
    answerValue: '4',
    explanation: '패치 버전은 하위 호환 가능한 버그 수정이 있을 때 증가합니다.',
    difficulty: 'medium',
    tags: ['배포', '버전관리'],
    correctRate: 0.72,
    choices: ['대규모 구조 개편이 있을 때', '하위 호환이 깨지는 변경일 때', '새로운 주요 기능 묶음을 추가할 때', '하위 호환 가능한 버그 수정일 때'],
  },
  {
    id: 'db-core-7',
    subjectId: 'db',
    setId: 'db-core',
    body: '제2정규형(2NF)을 만족시키기 위해 제거해야 하는 대표적 문제는 무엇인가요?',
    answerValue: '2',
    explanation: '부분 함수 종속을 제거해야 제2정규형을 만족합니다.',
    difficulty: 'medium',
    tags: ['정규화', '모델링'],
    correctRate: 0.57,
    choices: ['이행 함수 종속', '부분 함수 종속', '후보키 중복 정의', '색인 누락'],
  },
  {
    id: 'db-core-8',
    subjectId: 'db',
    setId: 'db-core',
    body: '약한 엔터티가 강한 엔터티의 기본키 일부를 상속받아 식별될 때 필요한 관계는 무엇인가요?',
    answerValue: '3',
    explanation: '식별 관계는 부모 엔터티의 키가 자식 엔터티 식별자에 포함되는 관계입니다.',
    difficulty: 'hard',
    tags: ['ERD', '모델링'],
    correctRate: 0.45,
    choices: ['비식별 관계', '순환 관계', '식별 관계', '자기 관계'],
  },
  {
    id: 'db-sql-7',
    subjectId: 'db',
    setId: 'db-sql',
    body: '집계 결과에 조건을 적용할 때 `WHERE` 대신 주로 사용하는 절은 무엇인가요?',
    answerValue: '4',
    explanation: '집계 이후의 그룹 조건은 HAVING 절에서 처리합니다.',
    difficulty: 'medium',
    tags: ['SQL', '집계'],
    correctRate: 0.79,
    choices: ['ORDER BY', 'LIMIT', 'GROUP SETS', 'HAVING'],
  },
  {
    id: 'db-sql-8',
    subjectId: 'db',
    setId: 'db-sql',
    body: '공통 키가 있는 행만 결과로 가져오려면 어떤 조인을 사용해야 하나요?',
    answerValue: '1',
    explanation: 'INNER JOIN은 양쪽 테이블에서 조건이 일치하는 행만 반환합니다.',
    difficulty: 'medium',
    tags: ['SQL', '조인'],
    correctRate: 0.81,
    choices: ['INNER JOIN', 'LEFT OUTER JOIN', 'CROSS JOIN', 'SELF JOIN'],
  },
  {
    id: 'db-ops-7',
    subjectId: 'db',
    setId: 'db-ops',
    body: '다른 트랜잭션이 아직 커밋하지 않은 값을 읽는 현상은 무엇인가요?',
    answerValue: '2',
    explanation: 'Dirty Read는 미커밋 데이터를 읽는 이상 현상입니다.',
    difficulty: 'medium',
    tags: ['트랜잭션', '격리수준'],
    correctRate: 0.61,
    choices: ['Phantom Read', 'Dirty Read', 'Deadlock', 'Lost Update'],
  },
  {
    id: 'db-ops-8',
    subjectId: 'db',
    setId: 'db-ops',
    body: '교착상태(Deadlock)를 줄이기 위한 방법으로 가장 적절한 것은 무엇인가요?',
    answerValue: '3',
    explanation: '잠금 순서를 일관되게 유지하면 교착상태 가능성을 낮출 수 있습니다.',
    difficulty: 'medium',
    tags: ['운영', '동시성'],
    correctRate: 0.55,
    choices: ['모든 인덱스를 삭제한다', '트랜잭션 시간을 무조건 늘린다', '잠금 획득 순서를 일관되게 맞춘다', '커밋을 금지한다'],
  },
  {
    id: 'programming-core-7',
    subjectId: 'programming',
    setId: 'programming-core',
    body: '재귀 함수가 무한 호출되지 않도록 반드시 갖춰야 하는 요소는 무엇인가요?',
    answerValue: '1',
    explanation: '재귀 종료 조건(base case)이 있어야 반복 호출이 멈춥니다.',
    difficulty: 'medium',
    tags: ['기초', '재귀'],
    correctRate: 0.82,
    choices: ['종료 조건', '전역 변수', '배열 정렬', 'GUI 이벤트'],
  },
  {
    id: 'programming-core-8',
    subjectId: 'programming',
    setId: 'programming-core',
    body: '값에 의한 호출(Call by Value)의 특징으로 가장 적절한 것은 무엇인가요?',
    answerValue: '4',
    explanation: '매개변수에 값의 복사본이 전달되므로 원본 값은 직접 바뀌지 않습니다.',
    difficulty: 'medium',
    tags: ['기초', '함수'],
    correctRate: 0.66,
    choices: ['항상 원본 객체가 즉시 수정된다', '메모리가 전혀 사용되지 않는다', '참조형을 사용할 수 없다', '원본 대신 복사본을 전달한다'],
  },
  {
    id: 'programming-oo-7',
    subjectId: 'programming',
    setId: 'programming-oo',
    body: '같은 메시지 호출에 대해 객체마다 다른 동작을 수행하게 하는 객체지향 특성은 무엇인가요?',
    answerValue: '2',
    explanation: '다형성은 동일한 인터페이스에 대해 서로 다른 구현이 반응하도록 합니다.',
    difficulty: 'medium',
    tags: ['객체지향', '다형성'],
    correctRate: 0.63,
    choices: ['상속', '다형성', '직렬화', '토큰화'],
  },
  {
    id: 'programming-oo-8',
    subjectId: 'programming',
    setId: 'programming-oo',
    body: '데이터와 메서드를 하나의 단위로 묶고 외부 접근을 제한하는 개념은 무엇인가요?',
    answerValue: '3',
    explanation: '캡슐화는 내부 구현을 숨기고 필요한 인터페이스만 노출합니다.',
    difficulty: 'medium',
    tags: ['객체지향', '캡슐화'],
    correctRate: 0.78,
    choices: ['오버로딩', '추상화', '캡슐화', '가비지 컬렉션'],
  },
  {
    id: 'programming-script-7',
    subjectId: 'programming',
    setId: 'programming-script',
    body: '선입선출(FIFO) 구조로 동작하는 자료구조는 무엇인가요?',
    answerValue: '2',
    explanation: 'Queue는 먼저 들어온 데이터가 먼저 나가는 FIFO 구조입니다.',
    difficulty: 'medium',
    tags: ['자료구조', '큐'],
    correctRate: 0.8,
    choices: ['Stack', 'Queue', 'Tree', 'Graph'],
  },
  {
    id: 'programming-script-8',
    subjectId: 'programming',
    setId: 'programming-script',
    body: '해시 테이블에서 서로 다른 키가 같은 해시 값을 갖는 현상을 무엇이라고 하나요?',
    answerValue: '1',
    explanation: 'Collision은 해시 함수 결과가 겹치는 현상이며 체이닝, 개방 주소법 등으로 대응합니다.',
    difficulty: 'medium',
    tags: ['자료구조', '해시'],
    correctRate: 0.6,
    choices: ['충돌(Collision)', '정렬(Sort)', '병합(Merge)', '순회(Traversal)'],
  },
  {
    id: 'system-core-7',
    subjectId: 'system',
    setId: 'system-core',
    body: '변경관리(Change Management)의 핵심 목적은 무엇인가요?',
    answerValue: '4',
    explanation: '변경 요청을 통제해 서비스 영향과 위험을 줄이려는 것이 핵심입니다.',
    difficulty: 'medium',
    tags: ['운영', '변경관리'],
    correctRate: 0.73,
    choices: ['문서 작성을 금지한다', '모든 변경을 즉시 반영한다', '개발 서버만 유지한다', '변경 영향과 승인 절차를 관리한다'],
  },
  {
    id: 'system-core-8',
    subjectId: 'system',
    setId: 'system-core',
    body: '재해복구 계획에서 RTO가 의미하는 것은 무엇인가요?',
    answerValue: '2',
    explanation: 'RTO는 장애 후 서비스를 복구해야 하는 목표 시간입니다.',
    difficulty: 'medium',
    tags: ['DR', '복구'],
    correctRate: 0.58,
    choices: ['허용 가능한 데이터 손실량', '목표 복구 시간', '백업 파일 크기', '암호화 키 길이'],
  },
  {
    id: 'system-security-7',
    subjectId: 'system',
    setId: 'system-security',
    body: '최소 권한 원칙(Principle of Least Privilege)의 설명으로 가장 적절한 것은 무엇인가요?',
    answerValue: '1',
    explanation: '업무 수행에 필요한 최소한의 권한만 부여해야 보안 위험을 줄일 수 있습니다.',
    difficulty: 'medium',
    tags: ['보안', '권한'],
    correctRate: 0.76,
    choices: ['필요한 최소 권한만 부여한다', '관리자 권한을 기본값으로 준다', '모든 로그를 삭제한다', '암호를 화면에 표시한다'],
  },
  {
    id: 'system-security-8',
    subjectId: 'system',
    setId: 'system-security',
    body: '비밀번호 해시 저장 시 솔트(salt)를 함께 사용하는 주된 이유는 무엇인가요?',
    answerValue: '3',
    explanation: '같은 비밀번호라도 서로 다른 해시가 되게 해 사전 계산 공격을 어렵게 만듭니다.',
    difficulty: 'medium',
    tags: ['보안', '인증'],
    correctRate: 0.62,
    choices: ['패스워드를 평문으로 복구하려고', '로그인을 생략하려고', '레인보우 테이블 공격을 어렵게 하려고', '세션 쿠키를 없애려고'],
  },
  {
    id: 'system-infra-7',
    subjectId: 'system',
    setId: 'system-infra',
    body: '로드밸런서의 헬스 체크(Health Check)를 두는 가장 직접적인 이유는 무엇인가요?',
    answerValue: '2',
    explanation: '정상 응답하지 않는 인스턴스를 트래픽 분산 대상에서 제외하기 위해 사용합니다.',
    difficulty: 'medium',
    tags: ['인프라', '로드밸런서'],
    correctRate: 0.64,
    choices: ['CPU 모델명을 확인하려고', '비정상 서버로 트래픽이 가지 않게 하려고', '소스 코드를 압축하려고', '브라우저 캐시를 비우려고'],
  },
  {
    id: 'system-infra-8',
    subjectId: 'system',
    setId: 'system-infra',
    body: '카나리 배포(Canary Release)의 장점으로 가장 적절한 것은 무엇인가요?',
    answerValue: '4',
    explanation: '일부 사용자에게만 먼저 배포해 위험을 제한한 채 반응을 확인할 수 있습니다.',
    difficulty: 'medium',
    tags: ['배포', '인프라'],
    correctRate: 0.57,
    choices: ['항상 전체 서버를 동시에 교체한다', '데이터베이스 스키마를 자동 복구한다', '장애를 완전히 없앤다', '소수 트래픽으로 먼저 검증 후 점진 확장할 수 있다'],
  },
];
