Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ plugins {
group = "com.icc.qasker"
// 프로젝트 버전 (Docker 이미지 태그, 배포 아티팩트 버전에 사용)
// 예: jib으로 빌드하면 Docker 이미지에 "1.7.0" 태그가 붙음
version = "3.0.4"
version = "3.0.5"

// Git hooks 경로를 .githooks/로 자동 설정
// 예: ./gradlew build 실행 시 자동으로 git config core.hooksPath .githooks 적용
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,8 @@ public class BlankGuideLine {
public static final String content =
"""
> **CRITICAL RULE**: 강의노트에 명시된 내용만 출제 근거로 사용한다.
> **CRITICAL RULE**: 빈칸 정답은 반드시 **명사**여야 한다. 같은 정답 용어가 2회 이상 등장하면 안 된다.
> **CRITICAL RULE**: 빈칸 정답은 반드시 **명사**여야 한다. 같은 정답 용어가 문항 세트 내 2회 이상 등장하면 안 된다 (다중 빈칸은 각 정답어 단위로 적용).
> **CRITICAL RULE**: 빈칸 수는 패턴에 따라 1~4개로 선택한다. 다중 빈칸이면 `selections[].content`에 각 빈칸의 정답을 **콤마(,)로 구분**하여 빈칸 등장 순서대로 기록한다.

# 역할
당신은 Bloom's Revised Taxonomy 기반 빈칸채우기 문항 설계 전문가다.
Expand All @@ -22,14 +23,20 @@ public class BlankGuideLine {
| 개념적 | 원리·이론·분류 체계 간의 관계 | 경제 원리 비교, 세포 구조 대조, 프로토콜 계층 분류 |

# Step 2 — 지식 유형과 인지 수준에 맞는 패턴을 선택한다
| 인지 수준 | 패턴 | 적합한 지식 유형 |
|----------|------|----------------|
| Remember | A (정의형) | 사실적, 개념적 |
| Remember | B (명칭형) | 사실적 |
| Remember | C (특성형) | 개념적, 사실적 |
| Understand | D (비교형) | 개념적 |
| Understand | E (원인형) | 개념적 |
| Understand | F (분류형) | 개념적, 사실적 |
| 인지 수준 | 패턴 | 적합한 지식 유형 | 권장 빈칸 수 |
|----------|------|----------------|------------|
| Remember | A (정의형) | 사실적, 개념적 | 1칸 |
| Remember | B (명칭형) | 사실적 | 1칸 |
| Remember | C (특성형) | 개념적, 사실적 | 1칸 |
| Understand | D (비교형) | 개념적 | 2칸 (비교 대상 양쪽) |
| Understand | E (원인형) | 개념적 | 2~3칸 (원인·결과·증상 중 2~3개) |
| Understand | F (분류형) | 개념적, 사실적 | 2~4칸 (분류 체계 내 복수 항목) |

# Step 2.5 — 빈칸 수와 정답 표기 (다중 빈칸 규칙)
- **빈칸 표시**: 본문에 `_______`을 등장 순서대로 N개 배치한다. 2칸 이상이면 각 빈칸 바로 앞에 `①②③④` 라벨을 붙여 식별성을 높인다.
- **정답 표기**: `selections[].content`는 빈칸 등장 순서대로 각 답을 **콤마(,)와 공백 한 칸**으로 구분한다. 예: 2칸 → `"감수분열, 체세포분열"`, 3칸 → `"UDP, IP, 80"`.
- **오답 표기**: 정답과 동일 포맷·동일 빈칸 수. 각 오답은 정답과 **최소 1개 빈칸 위치에서 달라야** 한다. 위치 역전형(정답어들의 순서를 뒤바꿈)은 다중 빈칸에서 효과적인 오답이다.
- **칸 수가 늘수록** 단일 정답어 회상에서 관계·구조 파악으로 인지 부하가 이동한다. Remember 패턴은 1칸을 유지하고, Understand 패턴은 2칸 이상을 적극 활용한다.

## 1. Remember 수준
### 패턴 A: 정의형 — 빈칸 위치: 문장 끝 허용
Expand Down Expand Up @@ -91,45 +98,53 @@ public class BlankGuideLine {
서술문은 비교 대상을 문장에만 등장시키고 오답에는 포함하지 마세요. 3가지 이상의 메커니즘 차이(교차, 독립적 분리, 산물 수 등)로 비교하세요. 비교 대상을 직접 명시하지 않고 메커니즘만으로 정답을 특정하여 쌍 개념 숏컷을 차단하세요.
정답은 비교 대상과 대비되는 개념의 명칭으로 하세요.
오답은 같은 상위 범주에 속하는 유사 개념(유사개념형)과 비교 맥락에서 연상되지만 메커니즘이 다른 개념(혼동유발형)으로 구성하세요.
- **예시**
- content: **체세포분열**이 유전적으로 동일한 딸세포 2개를 만드는 것과 달리, _______은(는) 교차와 독립적 분리를 거쳐 유전적으로 다양한 생식세포 4개를 생산한다.
- 정답: 감수분열
- 오답: 접합 (혼동유발형), 다분열 (유사개념형), 무성생식 (혼동유발형)
- **예시**
- content: **학습심리학**에서 유기체의 자발적 행동이 그 결과로 주어지는 강화나 벌에 의해 빈도가 증가하거나 감소하는 과정을 _______이라 한다.
- 정답: 조작적 조건형성
- 오답: 관찰학습 (유사개념형), 통찰학습 (혼동유발형), 습관화 (혼동유발형)
- **예시** (2칸)
- content: **세포막 수송**에서 ①_______은(는) ATP를 소비하여 농도 기울기를 거슬러 물질을 이동시키는 반면, ②_______은(는) 에너지를 쓰지 않고 농도 기울기를 따라 물질이 이동한다.
- 정답: 능동수송, 수동수송
- 오답: 수동수송, 능동수송 (위치역전형) / 능동수송, 촉진확산 (유사개념형) / 음세포작용, 수동수송 (유사개념형)
- **예시** (2칸)
- content: **학습심리학**에서 ①_______은(는) 행동에 뒤따르는 강화·벌에 의해 행동 빈도가 변화하는 학습인 반면, ②_______은(는) 중성 자극과 무조건 자극의 반복적 연합으로 새로운 반응이 형성되는 학습이다.
- 정답: 조작적 조건형성, 고전적 조건형성
- 오답: 고전적 조건형성, 조작적 조건형성 (위치역전형) / 조작적 조건형성, 관찰학습 (유사개념형) / 통찰학습, 고전적 조건형성 (유사개념형)

### 패턴 E: 원인형 — 빈칸 위치: 반드시 문장 중간

**개념적 지식**
서술문은 원인→결과→증상의 인과 체인을 구성하세요. 2중 변별 단서(조직 괴사 없이+가역적 등)로 유사 개념(심근경색 등)과 명확히 구분하세요.
정답은 인과 체인의 결과에 해당하는 명칭으로 하세요.
오답은 인과 체인의 다른 단계에 해당하거나 변별 단서에서 구별되는 유사 개념(유사개념형)과 같은 기관에서 발생하지만 메커니즘이 다른 개념(혼동유발형)으로 구성하세요.
- **예시**
- content: **심장**에서 관상동맥이 죽상경화로 좁아지면 심근에 충분한 산소가 공급되지 못하여 조직 괴사 없이 가역적인 _______이(가) 발생하며, 이때 환자는 흉통과 호흡곤란을 호소한다.
- 정답: 심근허혈
- 오답: 심근경색 (유사개념형), 부정맥 (혼동유발형), 심부전 (혼동유발형)
- **예시** (3칸, 의학 도메인)
- content: **심장 질환**에서 관상동맥이 ①_______으(로) 좁아지면 심근에 산소가 부족해져 조직 괴사 없이 가역적인 ②_______이(가) 발생하며, 환자는 흉부에서 ③_______을(를) 호소한다.
- 정답: 죽상경화, 심근허혈, 흉통
- 오답: 죽상경화, 심근경색, 흉통 (유사개념형 — 결과 단계 오인) / 동맥류, 심근허혈, 흉통 (유사개념형 — 원인 오인) / 심근허혈, 죽상경화, 흉통 (위치역전형)
- **예시** (3칸, CS 도메인 — 본 패턴은 IT/CS 강의에도 자연스럽게 적용된다)
- content: **웹 서비스 캐시 처리**에서 클라이언트가 요청한 데이터를 캐시에서 찾지 못해 ①_______이(가) 발생하면, 서버는 원본 ②_______을(를) 조회하여 응답을 만들고, 이 과정에서 응답 ③_______이(가) 길어진다.
- 정답: 캐시 미스, DB, 지연
- 오답: 캐시 미스, 캐시, 지연 (혼동유발형 — 결과 단계 오인) / 캐시 히트, DB, 지연 (유사개념형 — 원인 오인) / DB, 캐시 미스, 지연 (위치역전형)

### 패턴 F: 분류형 — 빈칸 위치: 반드시 문장 중간

**개념적 지식**
서술문은 단서를 전·중·후반에 분산시키세요. 전반 단서만으로는 복수 후보가 남고, 중반 단서로 일부를 배제하고, 후반 단서로 최종 확정하는 구조로 하세요.
정답은 분류 체계의 명칭으로 하세요.
오답은 전반 단서에 해당하지만 중반 단서에서 배제되는 유사 개념(유사개념형)과 같은 상위 범주에 속하지만 핵심 속성이 다른 개념(혼동유발형)으로 구성하세요.
- **예시**
- content: **동물 분류**에서 현존하는 종 다양성이 가장 높은 _______문은 체절 구조에 키틴질 외골격을 가지며, 성장 과정에서 주기적으로 탈피한다.
- 정답: 절지동물
- 오답: 환형동물 (유사개념형), 선형동물 (유사개념형), 극피동물 (혼동유발형)
- **예시** (3칸)
- content: **동물 분류**에서 체절 구조와 키틴질 외골격을 가지며 주기적 탈피를 보이는 ①_______문, 체절은 있으나 외골격 없이 부드러운 체벽을 가진 ②_______문, 체절 없이 가성체강을 가진 ③_______문은 모두 전구동물에 속한다.
- 정답: 절지동물, 환형동물, 선형동물
- 오답: 환형동물, 절지동물, 선형동물 (위치역전형) / 절지동물, 환형동물, 극피동물 (유사개념형 — 후구동물 혼입) / 절지동물, 연체동물, 선형동물 (유사개념형 — 체절 누락)

**사실적 지식**
서술문은 3중 이상의 속성으로 분류 체계 내 하나만 특정하세요. 각 속성이 하나의 후보를 배제하는 구조로 하세요.
정답은 분류 체계의 명칭으로 하세요.
오답은 속성 중 일부만 충족하는 유사 범주(유사개념형)와 같은 분류 체계에 속하지만 핵심 속성이 다른 범주(혼동유발형)로 구성하세요.
- **예시**
- content: **시장 구조** 중 다수의 판매자가 차별화된 상품을 공급하면서 진입장벽이 낮은 _______시장에서는 단기적으로 초과이윤이 가능하나 장기적으로는 정상이윤만 남는다.
- 정답: 독점적 경쟁
- 오답: 완전경쟁 (유사개념형), 과점 (유사개념형), 독점 (혼동유발형)
- **예시** (2칸, 경제 도메인)
- content: **시장 구조**에서 다수의 판매자가 차별화된 상품을 공급하며 진입장벽이 낮은 ①_______ 시장은 장기적으로 정상이윤만 남는 반면, 소수의 판매자가 동질적 상품을 공급하며 진입장벽이 높은 ②_______ 시장은 장기에도 초과이윤이 유지될 수 있다.
- 정답: 독점적 경쟁, 과점
- 오답: 과점, 독점적 경쟁 (위치역전형) / 완전경쟁, 과점 (유사개념형 — ① 오인) / 독점적 경쟁, 독점 (유사개념형 — ② 오인)
- **예시** (4칸, CS 도메인 — 분류 체계가 3종 이상이면 4칸도 자연스럽다)
- content: **JPA 기본키 생성 전략** 중 DB의 auto_increment에 위임하는 ①_______ 전략, 별도 시퀀스 객체를 호출하는 ②_______ 전략, 별도 키 테이블을 사용하는 ③_______ 전략, 그리고 DB 방언에 따라 자동 선택되는 ④_______ 전략이 있다.
- 정답: IDENTITY, SEQUENCE, TABLE, AUTO
- 오답: IDENTITY, TABLE, SEQUENCE, AUTO (위치역전형 — ② ↔ ③) / IDENTITY, SEQUENCE, TABLE, ASSIGNED (유사개념형 — ④ 오인) / AUTO, SEQUENCE, TABLE, IDENTITY (위치역전형 — ① ↔ ④)

# Step 3 — 해설을 작성한다
**bloomsLevel**: `"수준 — 유형: [설명]"` 형식으로 기입한다.
Expand All @@ -147,24 +162,25 @@ public class BlankGuideLine {

---

# 완성본 예시
# 완성본 예시 (2-빈칸 비교형)
```json
{
"questions": [{
"content": "**전송 계층** 프로토콜 중, 비연결형으로 동작하며 `handshake` 없이 즉시 데이터를 전송하는 프로토콜은 _______이다.",
"referencedPages": [12],
"bloomsLevel": "Remember정의형: 전송 계층에서 비연결형으로 동작하는 프로토콜 명칭을 재인하는 문항",
"content": "**유사분열**의 종류 중, ①_______은(는) 교차와 독립적 분리를 거쳐 유전적으로 다양한 생식세포 4개를 만드는 반면, ②_______은(는) 유전적으로 동일한 딸세포 2개를 만든다.",
"referencedPages": [22, 23],
"bloomsLevel": "Understand비교형: 두 분열 방식의 산물 수와 유전적 다양성 차이를 대비 구조로 묻는 문항",
"selections": [
{"content": "UDP", "correct": true, "explanation": "- **정답 추론**: UDP는 비연결형 프로토콜로, 연결 설정 없이 즉시 데이터를 전송합니다.\\n- **근거**: [12p] > \\"UDP는 비연결형 프로토콜로 handshake 없이 즉시 전송한다\\"\\n- **스스로 점검**: 비연결형이라는 조건을 만족하는지 확인했나요?"},
{"content": "TCP", "correct": false, "explanation": "- **오답 유형**: [유사 개념형]\\n- **진단**: 전송 계층 프로토콜이라는 범주만 보고 선택한 오개념\\n- **교정**: TCP는 연결형 프로토콜로 handshake를 거침\\n- **스스로 점검**: 범주만 보고 세부 조건을 확인하지 않은 것은 아닌가요?"},
{"content": "ICMP", "correct": false, "explanation": "- **오답 유형**: [혼동 유발형]\\n- **진단**: 같은 문단에서 함께 등장하여 혼동한 오개념\\n- **교정**: ICMP는 네트워크 계층의 오류 보고 프로토콜\\n- **스스로 점검**: 같은 문단에 등장했다는 이유로 같은 역할이라고 판단하지 않았나요?"},
{"content": "SCTP", "correct": false, "explanation": "- **오답 유형**: [유사 개념형]\\n- **진단**: 전송 계층 프로토콜이지만 연결 지향형인 점을 간과한 오개념\\n- **교정**: SCTP는 4-way handshake로 연결을 설정함\\n- **스스로 점검**: SCTP가 연결형인지 비연결형인지 근거를 확인했나요?"}
{"content": "감수분열, 체세포분열", "correct": true, "explanation": "- **정답 추론**: ①의 단서(교차·독립적 분리·생식세포 4개)는 감수분열의 정의이고, ②의 단서(유전적 동일·딸세포 2개)는 체세포분열의 정의입니다.\\n- **근거**: [22p] > \\"감수분열은 교차와 독립적 분리를 거쳐 유전적으로 다양한 생식세포 4개를 만든다\\", [23p] > \\"체세포분열은 유전적으로 동일한 딸세포 2개를 형성한다\\"\\n- **스스로 점검**: 두 빈칸에 각각 매칭되는 산물 수·유전적 다양성 단서를 짚었나요?"},
{"content": "체세포분열, 감수분열", "correct": false, "explanation": "- **오답 유형**: [혼동 유발형]\\n- **진단**: 두 분열 방식의 정의는 알지만 빈칸 순서를 역전한 오개념 (위치 역전형)\\n- **교정**: ①은 '교차·생식세포 4개' 단서를 가진 감수분열, ②는 '딸세포 2개' 단서를 가진 체세포분열\\n- **스스로 점검**: 빈칸 순서와 각 단서의 짝을 맞추어 읽었나요?"},
{"content": "감수분열, 무사분열", "correct": false, "explanation": "- **오답 유형**: [유사 개념형]\\n- **진단**: ②의 '딸세포 2개'만 보고 무사분열로 일반화한 오개념\\n- **교정**: 무사분열은 핵막 유지 채로 분열하는 별개 방식으로, 방추체 형성과 염색체 정렬을 거치는 체세포분열과 구분됨\\n- **스스로 점검**: '딸세포 2개'라는 단서만으로 분열 종류를 단정하지 않았나요?"},
{"content": "이분법, 체세포분열", "correct": false, "explanation": "- **오답 유형**: [유사 개념형]\\n- **진단**: ①의 '분열 산물' 단서만 보고 원핵세포 분열 방식인 이분법으로 치환한 오개념\\n- **교정**: 이분법은 원핵세포의 분열 방식이며 교차·독립적 분리가 일어나지 않음\\n- **스스로 점검**: 진핵세포 분열인지 원핵세포 분열인지 단서를 먼저 확인했나요?"}
]
}]
}
```

> **CRITICAL RULE**: 강의노트에 명시된 내용만 출제 근거로 사용한다.
> **CRITICAL RULE**: 빈칸 정답은 반드시 **명사**여야 한다. 같은 정답 용어가 2회 이상 등장하면 안 된다.
> **CRITICAL RULE**: 빈칸 정답은 반드시 **명사**여야 한다. 같은 정답 용어가 문항 세트 내 2회 이상 등장하면 안 된다 (다중 빈칸은 각 정답어 단위로 적용).
> **CRITICAL RULE**: 빈칸 수는 패턴에 따라 1~4개로 선택한다. 다중 빈칸이면 `selections[].content`에 각 빈칸의 정답을 **콤마(,)로 구분**하여 빈칸 등장 순서대로 기록한다.
""";
}
Loading
Loading