From b20c4f933b2850935f85612e95f5e5e2537f6a22 Mon Sep 17 00:00:00 2001 From: Hyungi Ahn Date: Wed, 29 Apr 2026 14:39:02 +0900 Subject: [PATCH] =?UTF-8?q?feat(study):=20exam=5Fround=20=ED=95=84?= =?UTF-8?q?=ED=84=B0=20+=20=EC=9D=BC=EA=B4=84=20import=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A6=BD=ED=8A=B8=20=E2=80=94=201=EC=B2=9C+=20?= =?UTF-8?q?=EB=AC=B8=EC=A0=9C=20=EB=8C=80=EB=B9=84=20(P0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 문제: 1천+ 문항 토픽에서 보기 페이지 prev/next 가 page_size=200 cap 으로 회차 외 문항만 받아 같은 회차 prev/next 누락 회귀. 해결: - /study-topics/{tid}/questions 에 exam_round Query 파라미터 추가 (exact match). - StudyQuestionSummary 응답에 exam_question_number 필드 추가. - exam_round 필터 시 정렬 = exam_question_number asc NULLS LAST, created_at asc. - 보기 페이지 loadRoundSiblings 가 ?exam_round= 로 한 회차만 fetch. - 토스트 문구 "토픽 200문제 초과" → "이 회차에 200문항 초과" (의미 일치). 추가 — 가스기사 기출 일괄 import 스크립트: - scripts/import_gas_questions.py: md 파서 + dry-run + apply. · exam_question_number 3소스 (파일명/제목/메타) 일치 검증. · subject 정규화 (괄호 세부분류는 scope 로 이동, 5과목 통일). · 이미지 4케이스 판정 + import_reports/{회차}_image_required.md 생성. · 첫 실패 abort 기본, --skip-existing/--continue-on-error 옵션. · 토큰 사전 검사 (GET /study-topics/{tid}). - import_reports/: 2019년 1~3회 + 2020년 1~2회 리포트. - 운영: 4회분 360문항 자동 import 완료 (이미지 4건 자동 첨부). Co-Authored-By: Claude Opus 4.7 (1M context) --- app/api/study_questions.py | 17 +- .../topics/[id]/questions/[qid]/+page.svelte | 24 +- import_reports/2019년_1회_image_required.md | 255 +++++++ import_reports/2019년_2회_image_required.md | 615 +++++++++++++++ import_reports/2019년_3회_image_required.md | 615 +++++++++++++++ import_reports/2020년_1회_image_required.md | 615 +++++++++++++++ import_reports/2020년_2회_image_required.md | 613 +++++++++++++++ scripts/import_gas_questions.py | 722 ++++++++++++++++++ 8 files changed, 3467 insertions(+), 9 deletions(-) create mode 100644 import_reports/2019년_1회_image_required.md create mode 100644 import_reports/2019년_2회_image_required.md create mode 100644 import_reports/2019년_3회_image_required.md create mode 100644 import_reports/2020년_1회_image_required.md create mode 100644 import_reports/2020년_2회_image_required.md create mode 100644 scripts/import_gas_questions.py diff --git a/app/api/study_questions.py b/app/api/study_questions.py index ce19e2c..9c96b43 100644 --- a/app/api/study_questions.py +++ b/app/api/study_questions.py @@ -150,6 +150,7 @@ class StudyQuestionSummary(BaseModel): scope: str | None exam_name: str | None exam_round: str | None + exam_question_number: int | None = None # PR-11/12 보기 페이지 prev/next 용 is_active: bool has_images: bool = False attempt_count: int @@ -363,6 +364,7 @@ async def list_questions_in_topic( session: Annotated[AsyncSession, Depends(get_session)], subject: str | None = Query(None), scope: str | None = Query(None), + exam_round: str | None = Query(None, description="회차 필터 — 보기 페이지 prev/next 같은 단일 회차 한정 조회"), page: int = Query(1, ge=1), page_size: int = Query(50, ge=1, le=200), ): @@ -379,14 +381,26 @@ async def list_questions_in_topic( base = base.where(StudyQuestion.subject == subject) if scope is not None: base = base.where(StudyQuestion.scope == scope) + if exam_round is not None: + base = base.where(StudyQuestion.exam_round == exam_round) total = ( await session.execute(select(func.count()).select_from(base.subquery())) ).scalar() or 0 + # 정렬: exam_round 필터 시 회차 안 prev/next 안정화 (exam_question_number asc NULLS LAST, + # created_at asc fallback). 미필터 시 기존 created_at desc 유지. + if exam_round is not None: + order_clause = ( + StudyQuestion.exam_question_number.asc().nulls_last(), + StudyQuestion.created_at.asc(), + StudyQuestion.id.asc(), + ) + else: + order_clause = (StudyQuestion.created_at.desc(), StudyQuestion.id.desc()) rows = ( await session.execute( - base.order_by(StudyQuestion.created_at.desc(), StudyQuestion.id.desc()) + base.order_by(*order_clause) .offset((page - 1) * page_size) .limit(page_size) ) @@ -458,6 +472,7 @@ async def list_questions_in_topic( scope=q.scope, exam_name=q.exam_name, exam_round=q.exam_round, + exam_question_number=q.exam_question_number, is_active=q.is_active, attempt_count=stats_map.get(q.id, (0, 0))[0], last_correct=last_correct_map.get(q.id), diff --git a/frontend/src/routes/study/topics/[id]/questions/[qid]/+page.svelte b/frontend/src/routes/study/topics/[id]/questions/[qid]/+page.svelte index 43a0e1a..fb8a4e8 100644 --- a/frontend/src/routes/study/topics/[id]/questions/[qid]/+page.svelte +++ b/frontend/src/routes/study/topics/[id]/questions/[qid]/+page.svelte @@ -57,19 +57,27 @@ } catch {} } - /** 같은 회차 prev/next 후보 fetch. exam_round 가 truthy 일 때만. */ + /** 같은 회차 prev/next 후보 fetch. exam_round 가 truthy 일 때만. + * + * 백엔드의 ?exam_round= 필터로 한 회차만 받음 (1천+ 토픽 환경 대비). + * 한 회차가 200문항 초과 특수 케이스에서만 토스트 경고. + */ async function loadRoundSiblings() { roundSiblings = []; - if (!q?.exam_round) return; // 원본 값 truthy 체크 (표시 문자열과 분리) + if (!q?.exam_round) return; // null/empty → prev/next 비활성 try { - const res = await api(`/study-topics/${topicId}/questions?page_size=200`); + const params = new URLSearchParams({ + page_size: '200', + exam_round: q.exam_round, + }); + const res = await api(`/study-topics/${topicId}/questions?${params}`); const items = res.items ?? []; - // 백엔드 max=200. 200건 만땅 + total>200 이면 회차 안 일부가 누락될 수 있음 → 안내. + // 한 회차 200+ 특수 케이스 — 일반적으로 100문항이라 안 나옴. if (items.length === 200 && (res.total ?? 0) > 200) { - addToast('info', '이 토픽에 200문제 초과 — 회차 prev/next 가 일부 누락될 수 있습니다'); + addToast('info', '이 회차에 200문항 초과 — 이전/다음 문제가 일부 누락될 수 있습니다'); } - const siblings = items.filter((it) => it.exam_round === q.exam_round); - siblings.sort((a, b) => { + // 백엔드도 정렬되어 오지만 클라이언트도 안정성 위해 명시. + items.sort((a, b) => { const an = a.exam_question_number; const bn = b.exam_question_number; if (an != null && bn != null) return an - bn; @@ -77,7 +85,7 @@ if (bn != null) return 1; return new Date(a.created_at).getTime() - new Date(b.created_at).getTime(); }); - roundSiblings = siblings; + roundSiblings = items; } catch { roundSiblings = []; } diff --git a/import_reports/2019년_1회_image_required.md b/import_reports/2019년_1회_image_required.md new file mode 100644 index 0000000..c916202 --- /dev/null +++ b/import_reports/2019년_1회_image_required.md @@ -0,0 +1,255 @@ +# 2019년 1회 — 이미지 필요 문항 리포트 + +## 사용자가 확인할 것 + +- missing_png — 0건 +- **placeholder_skipped — 39건** (마커 없는데 png 있음 — 실제 도식이면 md 첫 줄에 `**⚠ 이미지 별도 업로드 필요**` 마커 추가 검토) + - 41번 / 가스설비 + - 42번 / 가스설비 + - 43번 / 가스설비 + - 44번 / 가스설비 + - 45번 / 가스설비 + - 46번 / 가스설비 + - 47번 / 가스설비 + - 48번 / 가스설비 + - 49번 / 가스설비 + - 50번 / 가스설비 + - 51번 / 가스설비 + - 52번 / 가스설비 + - 53번 / 가스설비 + - 54번 / 가스설비 + - 55번 / 가스설비 + - 56번 / 가스설비 + - 57번 / 가스설비 + - 58번 / 가스설비 + - 59번 / 가스설비 + - 60번 / 가스설비 + - 81번 / 가스계측기기 + - 82번 / 가스계측기기 + - 83번 / 가스계측기기 + - 85번 / 가스계측기기 + - 86번 / 가스계측기기 + - 87번 / 가스계측기기 + - 88번 / 가스계측기기 + - 89번 / 가스계측기기 + - 90번 / 가스계측기기 + - 91번 / 가스계측기기 + - 92번 / 가스계측기기 + - 93번 / 가스계측기기 + - 94번 / 가스계측기기 + - 95번 / 가스계측기기 + - 96번 / 가스계측기기 + - 97번 / 가스계측기기 + - 98번 / 가스계측기기 + - 99번 / 가스계측기기 + - 100번 / 가스계측기기 +- **attach_planned — 1건** (apply 시 자동 첨부 예정) + +--- + +## 첨부 예정 (attach_planned) — 1건 + +### 84번 / 가스계측기기 / 혼합 가스 발열량 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/84.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/84.png +- 설명: 발열량 표 (메탄 9520 / 에탄 16850 / 프로판 24160). +- 상태: attach_planned (apply 시 자동 첨부) + +## OCR placeholder (참고) — 39건 + +마커는 없지만 png 가 존재 — OCR 원본일 가능성. 마커 누락 실수인지 검토. + +### 41번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/41.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/41.png +- 마커: 없음 — 첨부 안 함 + +### 42번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/42.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/42.png +- 마커: 없음 — 첨부 안 함 + +### 43번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/43.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/43.png +- 마커: 없음 — 첨부 안 함 + +### 44번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/44.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/44.png +- 마커: 없음 — 첨부 안 함 + +### 45번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/45.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/45.png +- 마커: 없음 — 첨부 안 함 + +### 46번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/46.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/46.png +- 마커: 없음 — 첨부 안 함 + +### 47번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/47.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/47.png +- 마커: 없음 — 첨부 안 함 + +### 48번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/48.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/48.png +- 마커: 없음 — 첨부 안 함 + +### 49번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/49.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/49.png +- 마커: 없음 — 첨부 안 함 + +### 50번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/50.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/50.png +- 마커: 없음 — 첨부 안 함 + +### 51번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/51.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/51.png +- 마커: 없음 — 첨부 안 함 + +### 52번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/52.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/52.png +- 마커: 없음 — 첨부 안 함 + +### 53번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/53.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/53.png +- 마커: 없음 — 첨부 안 함 + +### 54번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/54.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/54.png +- 마커: 없음 — 첨부 안 함 + +### 55번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/55.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/55.png +- 마커: 없음 — 첨부 안 함 + +### 56번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/56.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/56.png +- 마커: 없음 — 첨부 안 함 + +### 57번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/57.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/57.png +- 마커: 없음 — 첨부 안 함 + +### 58번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/58.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/58.png +- 마커: 없음 — 첨부 안 함 + +### 59번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/59.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/59.png +- 마커: 없음 — 첨부 안 함 + +### 60번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/60.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/03 가스설비/60.png +- 마커: 없음 — 첨부 안 함 + +### 81번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/81.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/81.png +- 마커: 없음 — 첨부 안 함 + +### 82번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/82.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/82.png +- 마커: 없음 — 첨부 안 함 + +### 83번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/83.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/83.png +- 마커: 없음 — 첨부 안 함 + +### 85번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/85.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/85.png +- 마커: 없음 — 첨부 안 함 + +### 86번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/86.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/86.png +- 마커: 없음 — 첨부 안 함 + +### 87번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/87.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/87.png +- 마커: 없음 — 첨부 안 함 + +### 88번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/88.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/88.png +- 마커: 없음 — 첨부 안 함 + +### 89번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/89.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/89.png +- 마커: 없음 — 첨부 안 함 + +### 90번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/90.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/90.png +- 마커: 없음 — 첨부 안 함 + +### 91번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/91.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/91.png +- 마커: 없음 — 첨부 안 함 + +### 92번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/92.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/92.png +- 마커: 없음 — 첨부 안 함 + +### 93번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/93.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/93.png +- 마커: 없음 — 첨부 안 함 + +### 94번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/94.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/94.png +- 마커: 없음 — 첨부 안 함 + +### 95번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/95.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/95.png +- 마커: 없음 — 첨부 안 함 + +### 96번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/96.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/96.png +- 마커: 없음 — 첨부 안 함 + +### 97번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/97.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/97.png +- 마커: 없음 — 첨부 안 함 + +### 98번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/98.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/98.png +- 마커: 없음 — 첨부 안 함 + +### 99번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/99.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/99.png +- 마커: 없음 — 첨부 안 함 + +### 100번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/100.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 1회/05 가스계측기기/100.png +- 마커: 없음 — 첨부 안 함 diff --git a/import_reports/2019년_2회_image_required.md b/import_reports/2019년_2회_image_required.md new file mode 100644 index 0000000..99015f7 --- /dev/null +++ b/import_reports/2019년_2회_image_required.md @@ -0,0 +1,615 @@ +# 2019년 2회 — 이미지 필요 문항 리포트 + +## 사용자가 확인할 것 + +- missing_png — 0건 +- **placeholder_skipped — 95건** (마커 없는데 png 있음 — 실제 도식이면 md 첫 줄에 `**⚠ 이미지 별도 업로드 필요**` 마커 추가 검토) + - 1번 / 가스유체역학 + - 2번 / 가스유체역학 + - 3번 / 가스유체역학 + - 5번 / 가스유체역학 + - 6번 / 가스유체역학 + - 7번 / 가스유체역학 + - 9번 / 가스유체역학 + - 10번 / 가스유체역학 + - 11번 / 가스유체역학 + - 13번 / 가스유체역학 + - 14번 / 가스유체역학 + - 15번 / 가스유체역학 + - 16번 / 가스유체역학 + - 17번 / 가스유체역학 + - 19번 / 가스유체역학 + - 20번 / 가스유체역학 + - 22번 / 연소공학 + - 23번 / 연소공학 + - 24번 / 연소공학 + - 25번 / 연소공학 + - 26번 / 연소공학 + - 27번 / 연소공학 + - 28번 / 연소공학 + - 29번 / 연소공학 + - 30번 / 연소공학 + - 31번 / 연소공학 + - 32번 / 연소공학 + - 33번 / 연소공학 + - 34번 / 연소공학 + - 35번 / 연소공학 + - 36번 / 연소공학 + - 37번 / 연소공학 + - 38번 / 연소공학 + - 39번 / 연소공학 + - 40번 / 연소공학 + - 41번 / 가스설비 + - 42번 / 가스설비 + - 43번 / 가스설비 + - 44번 / 가스설비 + - 45번 / 가스설비 + - 46번 / 가스설비 + - 47번 / 가스설비 + - 48번 / 가스설비 + - 49번 / 가스설비 + - 50번 / 가스설비 + - 51번 / 가스설비 + - 52번 / 가스설비 + - 53번 / 가스설비 + - 54번 / 가스설비 + - 55번 / 가스설비 + - 56번 / 가스설비 + - 57번 / 가스설비 + - 58번 / 가스설비 + - 59번 / 가스설비 + - 60번 / 가스설비 + - 61번 / 가스안전관리 + - 62번 / 가스안전관리 + - 63번 / 가스안전관리 + - 64번 / 가스안전관리 + - 65번 / 가스안전관리 + - 66번 / 가스안전관리 + - 67번 / 가스안전관리 + - 68번 / 가스안전관리 + - 69번 / 가스안전관리 + - 70번 / 가스안전관리 + - 71번 / 가스안전관리 + - 72번 / 가스안전관리 + - 73번 / 가스안전관리 + - 74번 / 가스안전관리 + - 75번 / 가스안전관리 + - 76번 / 가스안전관리 + - 77번 / 가스안전관리 + - 78번 / 가스안전관리 + - 79번 / 가스안전관리 + - 80번 / 가스안전관리 + - 81번 / 가스계측기기 + - 82번 / 가스계측기기 + - 83번 / 가스계측기기 + - 84번 / 가스계측기기 + - 85번 / 가스계측기기 + - 86번 / 가스계측기기 + - 87번 / 가스계측기기 + - 88번 / 가스계측기기 + - 89번 / 가스계측기기 + - 90번 / 가스계측기기 + - 91번 / 가스계측기기 + - 92번 / 가스계측기기 + - 93번 / 가스계측기기 + - 94번 / 가스계측기기 + - 95번 / 가스계측기기 + - 96번 / 가스계측기기 + - 97번 / 가스계측기기 + - 98번 / 가스계측기기 + - 99번 / 가스계측기기 + - 100번 / 가스계측기기 +- **attach_planned — 5건** (apply 시 자동 첨부 예정) + +--- + +## 첨부 예정 (attach_planned) — 5건 + +### 4번 / 가스유체역학 / 액주계 (`01_fluid/04_statics/04_액주계_마노미터.md` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/4.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/4.png +- 설명: 3-fluid U-tube 마노미터 그림 (A 왼쪽, B 오른쪽, γ1·γ2·γ3 fluid 영역, a·b·c 수직 거리 표시) +- 상태: attach_planned (apply 시 자동 첨부) + +### 8번 / 가스유체역학 / 압축성 유동·노즐/디퓨저 (`01_fluid/09_compressible/` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/8.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/8.png +- 설명: 단면이 점진적으로 좁아지는 수렴 덕트 그림 (양쪽 벽이 안쪽으로 기울어진 노즐, 화살표는 흐름 방향) +- 상태: attach_planned (apply 시 자동 첨부) + +### 12번 / 가스유체역학 / 압축성 유동·드라발 노즐 (`01_fluid/09_compressible/` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/12.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/12.png +- 설명: 면적 변화 도관 P/P₀ vs L 그래프 (드라발 노즐 확산부 압력 분포 곡선군 a~k, throat 위치, gg'·hh' 충격파 표시) +- 상태: attach_planned (apply 시 자동 첨부) + +### 18번 / 가스유체역학 / 비뉴턴 유체 (`01_fluid/03_viscosity/` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/18.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/18.png +- 설명: 전단응력 vs 속도구배 그래프, 4개 곡선 (1)~(4): 의사소성·뉴턴·다일레이턴트·빙햄플라스틱 비교 +- 상태: attach_planned (apply 시 자동 첨부) + +### 21번 / 연소공학 / 열역학 사이클 · 카르노 사이클 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/21.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/21.png +- 설명: 카르노 사이클 T-S 선도 (1→2 등온팽창 Q1@T1, 2→3 단열팽창, 3→4 등온압축 Q2@T2, 4→1 단열압축) +- 상태: attach_planned (apply 시 자동 첨부) + +## OCR placeholder (참고) — 95건 + +마커는 없지만 png 가 존재 — OCR 원본일 가능성. 마커 누락 실수인지 검토. + +### 1번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/1.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/1.png +- 마커: 없음 — 첨부 안 함 + +### 2번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/2.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/2.png +- 마커: 없음 — 첨부 안 함 + +### 3번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/3.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/3.png +- 마커: 없음 — 첨부 안 함 + +### 5번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/5.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/5.png +- 마커: 없음 — 첨부 안 함 + +### 6번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/6.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/6.png +- 마커: 없음 — 첨부 안 함 + +### 7번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/7.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/7.png +- 마커: 없음 — 첨부 안 함 + +### 9번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/9.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/9.png +- 마커: 없음 — 첨부 안 함 + +### 10번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/10.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/10.png +- 마커: 없음 — 첨부 안 함 + +### 11번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/11.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/11.png +- 마커: 없음 — 첨부 안 함 + +### 13번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/13.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/13.png +- 마커: 없음 — 첨부 안 함 + +### 14번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/14.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/14.png +- 마커: 없음 — 첨부 안 함 + +### 15번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/15.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/15.png +- 마커: 없음 — 첨부 안 함 + +### 16번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/16.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/16.png +- 마커: 없음 — 첨부 안 함 + +### 17번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/17.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/17.png +- 마커: 없음 — 첨부 안 함 + +### 19번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/19.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/19.png +- 마커: 없음 — 첨부 안 함 + +### 20번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/20.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/01 가스유체역학/20.png +- 마커: 없음 — 첨부 안 함 + +### 22번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/22.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/22.png +- 마커: 없음 — 첨부 안 함 + +### 23번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/23.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/23.png +- 마커: 없음 — 첨부 안 함 + +### 24번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/24.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/24.png +- 마커: 없음 — 첨부 안 함 + +### 25번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/25.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/25.png +- 마커: 없음 — 첨부 안 함 + +### 26번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/26.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/26.png +- 마커: 없음 — 첨부 안 함 + +### 27번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/27.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/27.png +- 마커: 없음 — 첨부 안 함 + +### 28번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/28.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/28.png +- 마커: 없음 — 첨부 안 함 + +### 29번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/29.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/29.png +- 마커: 없음 — 첨부 안 함 + +### 30번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/30.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/30.png +- 마커: 없음 — 첨부 안 함 + +### 31번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/31.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/31.png +- 마커: 없음 — 첨부 안 함 + +### 32번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/32.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/32.png +- 마커: 없음 — 첨부 안 함 + +### 33번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/33.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/33.png +- 마커: 없음 — 첨부 안 함 + +### 34번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/34.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/34.png +- 마커: 없음 — 첨부 안 함 + +### 35번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/35.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/35.png +- 마커: 없음 — 첨부 안 함 + +### 36번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/36.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/36.png +- 마커: 없음 — 첨부 안 함 + +### 37번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/37.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/37.png +- 마커: 없음 — 첨부 안 함 + +### 38번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/38.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/38.png +- 마커: 없음 — 첨부 안 함 + +### 39번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/39.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/39.png +- 마커: 없음 — 첨부 안 함 + +### 40번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/40.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/02 연소공학/40.png +- 마커: 없음 — 첨부 안 함 + +### 41번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/41.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/41.png +- 마커: 없음 — 첨부 안 함 + +### 42번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/42.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/42.png +- 마커: 없음 — 첨부 안 함 + +### 43번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/43.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/43.png +- 마커: 없음 — 첨부 안 함 + +### 44번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/44.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/44.png +- 마커: 없음 — 첨부 안 함 + +### 45번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/45.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/45.png +- 마커: 없음 — 첨부 안 함 + +### 46번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/46.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/46.png +- 마커: 없음 — 첨부 안 함 + +### 47번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/47.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/47.png +- 마커: 없음 — 첨부 안 함 + +### 48번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/48.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/48.png +- 마커: 없음 — 첨부 안 함 + +### 49번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/49.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/49.png +- 마커: 없음 — 첨부 안 함 + +### 50번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/50.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/50.png +- 마커: 없음 — 첨부 안 함 + +### 51번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/51.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/51.png +- 마커: 없음 — 첨부 안 함 + +### 52번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/52.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/52.png +- 마커: 없음 — 첨부 안 함 + +### 53번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/53.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/53.png +- 마커: 없음 — 첨부 안 함 + +### 54번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/54.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/54.png +- 마커: 없음 — 첨부 안 함 + +### 55번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/55.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/55.png +- 마커: 없음 — 첨부 안 함 + +### 56번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/56.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/56.png +- 마커: 없음 — 첨부 안 함 + +### 57번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/57.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/57.png +- 마커: 없음 — 첨부 안 함 + +### 58번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/58.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/58.png +- 마커: 없음 — 첨부 안 함 + +### 59번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/59.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/59.png +- 마커: 없음 — 첨부 안 함 + +### 60번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/60.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/03 가스설비/60.png +- 마커: 없음 — 첨부 안 함 + +### 61번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/61.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/61.png +- 마커: 없음 — 첨부 안 함 + +### 62번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/62.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/62.png +- 마커: 없음 — 첨부 안 함 + +### 63번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/63.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/63.png +- 마커: 없음 — 첨부 안 함 + +### 64번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/64.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/64.png +- 마커: 없음 — 첨부 안 함 + +### 65번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/65.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/65.png +- 마커: 없음 — 첨부 안 함 + +### 66번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/66.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/66.png +- 마커: 없음 — 첨부 안 함 + +### 67번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/67.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/67.png +- 마커: 없음 — 첨부 안 함 + +### 68번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/68.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/68.png +- 마커: 없음 — 첨부 안 함 + +### 69번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/69.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/69.png +- 마커: 없음 — 첨부 안 함 + +### 70번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/70.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/70.png +- 마커: 없음 — 첨부 안 함 + +### 71번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/71.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/71.png +- 마커: 없음 — 첨부 안 함 + +### 72번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/72.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/72.png +- 마커: 없음 — 첨부 안 함 + +### 73번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/73.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/73.png +- 마커: 없음 — 첨부 안 함 + +### 74번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/74.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/74.png +- 마커: 없음 — 첨부 안 함 + +### 75번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/75.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/75.png +- 마커: 없음 — 첨부 안 함 + +### 76번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/76.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/76.png +- 마커: 없음 — 첨부 안 함 + +### 77번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/77.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/77.png +- 마커: 없음 — 첨부 안 함 + +### 78번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/78.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/78.png +- 마커: 없음 — 첨부 안 함 + +### 79번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/79.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/79.png +- 마커: 없음 — 첨부 안 함 + +### 80번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/80.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/04 가스안전관리/80.png +- 마커: 없음 — 첨부 안 함 + +### 81번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/81.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/81.png +- 마커: 없음 — 첨부 안 함 + +### 82번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/82.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/82.png +- 마커: 없음 — 첨부 안 함 + +### 83번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/83.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/83.png +- 마커: 없음 — 첨부 안 함 + +### 84번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/84.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/84.png +- 마커: 없음 — 첨부 안 함 + +### 85번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/85.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/85.png +- 마커: 없음 — 첨부 안 함 + +### 86번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/86.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/86.png +- 마커: 없음 — 첨부 안 함 + +### 87번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/87.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/87.png +- 마커: 없음 — 첨부 안 함 + +### 88번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/88.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/88.png +- 마커: 없음 — 첨부 안 함 + +### 89번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/89.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/89.png +- 마커: 없음 — 첨부 안 함 + +### 90번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/90.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/90.png +- 마커: 없음 — 첨부 안 함 + +### 91번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/91.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/91.png +- 마커: 없음 — 첨부 안 함 + +### 92번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/92.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/92.png +- 마커: 없음 — 첨부 안 함 + +### 93번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/93.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/93.png +- 마커: 없음 — 첨부 안 함 + +### 94번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/94.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/94.png +- 마커: 없음 — 첨부 안 함 + +### 95번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/95.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/95.png +- 마커: 없음 — 첨부 안 함 + +### 96번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/96.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/96.png +- 마커: 없음 — 첨부 안 함 + +### 97번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/97.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/97.png +- 마커: 없음 — 첨부 안 함 + +### 98번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/98.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/98.png +- 마커: 없음 — 첨부 안 함 + +### 99번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/99.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/99.png +- 마커: 없음 — 첨부 안 함 + +### 100번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/100.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 2회/05 가스계측기기/100.png +- 마커: 없음 — 첨부 안 함 diff --git a/import_reports/2019년_3회_image_required.md b/import_reports/2019년_3회_image_required.md new file mode 100644 index 0000000..c11bdda --- /dev/null +++ b/import_reports/2019년_3회_image_required.md @@ -0,0 +1,615 @@ +# 2019년 3회 — 이미지 필요 문항 리포트 + +## 사용자가 확인할 것 + +- missing_png — 0건 +- **placeholder_skipped — 99건** (마커 없는데 png 있음 — 실제 도식이면 md 첫 줄에 `**⚠ 이미지 별도 업로드 필요**` 마커 추가 검토) + - 1번 / 가스유체역학 + - 2번 / 가스유체역학 + - 3번 / 가스유체역학 + - 4번 / 가스유체역학 + - 5번 / 가스유체역학 + - 6번 / 가스유체역학 + - 7번 / 가스유체역학 + - 8번 / 가스유체역학 + - 9번 / 가스유체역학 + - 11번 / 가스유체역학 + - 12번 / 가스유체역학 + - 13번 / 가스유체역학 + - 14번 / 가스유체역학 + - 15번 / 가스유체역학 + - 16번 / 가스유체역학 + - 17번 / 가스유체역학 + - 18번 / 가스유체역학 + - 19번 / 가스유체역학 + - 20번 / 가스유체역학 + - 21번 / 연소공학 + - 22번 / 연소공학 + - 23번 / 연소공학 + - 24번 / 연소공학 + - 25번 / 연소공학 + - 26번 / 연소공학 + - 27번 / 연소공학 + - 28번 / 연소공학 + - 29번 / 연소공학 + - 30번 / 연소공학 + - 31번 / 연소공학 + - 32번 / 연소공학 + - 33번 / 연소공학 + - 34번 / 연소공학 + - 35번 / 연소공학 + - 36번 / 연소공학 + - 37번 / 연소공학 + - 38번 / 연소공학 + - 39번 / 연소공학 + - 40번 / 연소공학 + - 41번 / 가스설비 + - 42번 / 가스설비 + - 43번 / 가스설비 + - 44번 / 가스설비 + - 45번 / 가스설비 + - 46번 / 가스설비 + - 47번 / 가스설비 + - 48번 / 가스설비 + - 49번 / 가스설비 + - 50번 / 가스설비 + - 51번 / 가스설비 + - 52번 / 가스설비 + - 53번 / 가스설비 + - 54번 / 가스설비 + - 55번 / 가스설비 + - 56번 / 가스설비 + - 57번 / 가스설비 + - 58번 / 가스설비 + - 59번 / 가스설비 + - 60번 / 가스설비 + - 61번 / 가스안전관리 + - 62번 / 가스안전관리 + - 63번 / 가스안전관리 + - 64번 / 가스안전관리 + - 65번 / 가스안전관리 + - 66번 / 가스안전관리 + - 67번 / 가스안전관리 + - 68번 / 가스안전관리 + - 69번 / 가스안전관리 + - 70번 / 가스안전관리 + - 71번 / 가스안전관리 + - 72번 / 가스안전관리 + - 73번 / 가스안전관리 + - 74번 / 가스안전관리 + - 75번 / 가스안전관리 + - 76번 / 가스안전관리 + - 77번 / 가스안전관리 + - 78번 / 가스안전관리 + - 79번 / 가스안전관리 + - 80번 / 가스안전관리 + - 81번 / 가스계측기기 + - 82번 / 가스계측기기 + - 83번 / 가스계측기기 + - 84번 / 가스계측기기 + - 85번 / 가스계측기기 + - 86번 / 가스계측기기 + - 87번 / 가스계측기기 + - 88번 / 가스계측기기 + - 89번 / 가스계측기기 + - 90번 / 가스계측기기 + - 91번 / 가스계측기기 + - 92번 / 가스계측기기 + - 93번 / 가스계측기기 + - 94번 / 가스계측기기 + - 95번 / 가스계측기기 + - 96번 / 가스계측기기 + - 97번 / 가스계측기기 + - 98번 / 가스계측기기 + - 99번 / 가스계측기기 + - 100번 / 가스계측기기 +- **attach_planned — 1건** (apply 시 자동 첨부 예정) + +--- + +## 첨부 예정 (attach_planned) — 1건 + +### 10번 / 가스유체역학 / 경사 마노메터 (`01_fluid/04_statics/04_액주계_마노미터.md` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/10.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/10.png +- 설명: 경사 마노메터 그림 (큰 단면 A₁ 좌측, 경사 R 길이 액주, 작은 단면 A₂ 우측, 각도 θ=30°) +- 상태: attach_planned (apply 시 자동 첨부) + +## OCR placeholder (참고) — 99건 + +마커는 없지만 png 가 존재 — OCR 원본일 가능성. 마커 누락 실수인지 검토. + +### 1번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/1.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/1.png +- 마커: 없음 — 첨부 안 함 + +### 2번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/2.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/2.png +- 마커: 없음 — 첨부 안 함 + +### 3번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/3.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/3.png +- 마커: 없음 — 첨부 안 함 + +### 4번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/4.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/4.png +- 마커: 없음 — 첨부 안 함 + +### 5번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/5.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/5.png +- 마커: 없음 — 첨부 안 함 + +### 6번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/6.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/6.png +- 마커: 없음 — 첨부 안 함 + +### 7번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/7.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/7.png +- 마커: 없음 — 첨부 안 함 + +### 8번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/8.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/8.png +- 마커: 없음 — 첨부 안 함 + +### 9번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/9.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/9.png +- 마커: 없음 — 첨부 안 함 + +### 11번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/11.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/11.png +- 마커: 없음 — 첨부 안 함 + +### 12번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/12.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/12.png +- 마커: 없음 — 첨부 안 함 + +### 13번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/13.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/13.png +- 마커: 없음 — 첨부 안 함 + +### 14번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/14.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/14.png +- 마커: 없음 — 첨부 안 함 + +### 15번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/15.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/15.png +- 마커: 없음 — 첨부 안 함 + +### 16번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/16.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/16.png +- 마커: 없음 — 첨부 안 함 + +### 17번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/17.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/17.png +- 마커: 없음 — 첨부 안 함 + +### 18번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/18.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/18.png +- 마커: 없음 — 첨부 안 함 + +### 19번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/19.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/19.png +- 마커: 없음 — 첨부 안 함 + +### 20번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/20.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/01 가스유체역학/20.png +- 마커: 없음 — 첨부 안 함 + +### 21번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/21.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/21.png +- 마커: 없음 — 첨부 안 함 + +### 22번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/22.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/22.png +- 마커: 없음 — 첨부 안 함 + +### 23번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/23.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/23.png +- 마커: 없음 — 첨부 안 함 + +### 24번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/24.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/24.png +- 마커: 없음 — 첨부 안 함 + +### 25번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/25.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/25.png +- 마커: 없음 — 첨부 안 함 + +### 26번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/26.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/26.png +- 마커: 없음 — 첨부 안 함 + +### 27번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/27.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/27.png +- 마커: 없음 — 첨부 안 함 + +### 28번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/28.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/28.png +- 마커: 없음 — 첨부 안 함 + +### 29번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/29.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/29.png +- 마커: 없음 — 첨부 안 함 + +### 30번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/30.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/30.png +- 마커: 없음 — 첨부 안 함 + +### 31번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/31.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/31.png +- 마커: 없음 — 첨부 안 함 + +### 32번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/32.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/32.png +- 마커: 없음 — 첨부 안 함 + +### 33번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/33.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/33.png +- 마커: 없음 — 첨부 안 함 + +### 34번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/34.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/34.png +- 마커: 없음 — 첨부 안 함 + +### 35번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/35.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/35.png +- 마커: 없음 — 첨부 안 함 + +### 36번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/36.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/36.png +- 마커: 없음 — 첨부 안 함 + +### 37번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/37.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/37.png +- 마커: 없음 — 첨부 안 함 + +### 38번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/38.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/38.png +- 마커: 없음 — 첨부 안 함 + +### 39번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/39.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/39.png +- 마커: 없음 — 첨부 안 함 + +### 40번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/40.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/02 연소공학/40.png +- 마커: 없음 — 첨부 안 함 + +### 41번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/41.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/41.png +- 마커: 없음 — 첨부 안 함 + +### 42번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/42.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/42.png +- 마커: 없음 — 첨부 안 함 + +### 43번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/43.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/43.png +- 마커: 없음 — 첨부 안 함 + +### 44번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/44.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/44.png +- 마커: 없음 — 첨부 안 함 + +### 45번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/45.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/45.png +- 마커: 없음 — 첨부 안 함 + +### 46번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/46.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/46.png +- 마커: 없음 — 첨부 안 함 + +### 47번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/47.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/47.png +- 마커: 없음 — 첨부 안 함 + +### 48번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/48.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/48.png +- 마커: 없음 — 첨부 안 함 + +### 49번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/49.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/49.png +- 마커: 없음 — 첨부 안 함 + +### 50번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/50.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/50.png +- 마커: 없음 — 첨부 안 함 + +### 51번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/51.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/51.png +- 마커: 없음 — 첨부 안 함 + +### 52번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/52.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/52.png +- 마커: 없음 — 첨부 안 함 + +### 53번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/53.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/53.png +- 마커: 없음 — 첨부 안 함 + +### 54번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/54.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/54.png +- 마커: 없음 — 첨부 안 함 + +### 55번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/55.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/55.png +- 마커: 없음 — 첨부 안 함 + +### 56번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/56.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/56.png +- 마커: 없음 — 첨부 안 함 + +### 57번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/57.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/57.png +- 마커: 없음 — 첨부 안 함 + +### 58번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/58.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/58.png +- 마커: 없음 — 첨부 안 함 + +### 59번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/59.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/59.png +- 마커: 없음 — 첨부 안 함 + +### 60번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/60.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/03 가스설비/60.png +- 마커: 없음 — 첨부 안 함 + +### 61번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/61.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/61.png +- 마커: 없음 — 첨부 안 함 + +### 62번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/62.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/62.png +- 마커: 없음 — 첨부 안 함 + +### 63번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/63.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/63.png +- 마커: 없음 — 첨부 안 함 + +### 64번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/64.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/64.png +- 마커: 없음 — 첨부 안 함 + +### 65번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/65.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/65.png +- 마커: 없음 — 첨부 안 함 + +### 66번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/66.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/66.png +- 마커: 없음 — 첨부 안 함 + +### 67번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/67.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/67.png +- 마커: 없음 — 첨부 안 함 + +### 68번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/68.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/68.png +- 마커: 없음 — 첨부 안 함 + +### 69번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/69.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/69.png +- 마커: 없음 — 첨부 안 함 + +### 70번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/70.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/70.png +- 마커: 없음 — 첨부 안 함 + +### 71번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/71.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/71.png +- 마커: 없음 — 첨부 안 함 + +### 72번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/72.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/72.png +- 마커: 없음 — 첨부 안 함 + +### 73번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/73.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/73.png +- 마커: 없음 — 첨부 안 함 + +### 74번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/74.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/74.png +- 마커: 없음 — 첨부 안 함 + +### 75번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/75.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/75.png +- 마커: 없음 — 첨부 안 함 + +### 76번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/76.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/76.png +- 마커: 없음 — 첨부 안 함 + +### 77번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/77.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/77.png +- 마커: 없음 — 첨부 안 함 + +### 78번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/78.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/78.png +- 마커: 없음 — 첨부 안 함 + +### 79번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/79.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/79.png +- 마커: 없음 — 첨부 안 함 + +### 80번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/80.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/04 가스안전관리/80.png +- 마커: 없음 — 첨부 안 함 + +### 81번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/81.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/81.png +- 마커: 없음 — 첨부 안 함 + +### 82번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/82.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/82.png +- 마커: 없음 — 첨부 안 함 + +### 83번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/83.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/83.png +- 마커: 없음 — 첨부 안 함 + +### 84번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/84.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/84.png +- 마커: 없음 — 첨부 안 함 + +### 85번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/85.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/85.png +- 마커: 없음 — 첨부 안 함 + +### 86번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/86.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/86.png +- 마커: 없음 — 첨부 안 함 + +### 87번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/87.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/87.png +- 마커: 없음 — 첨부 안 함 + +### 88번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/88.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/88.png +- 마커: 없음 — 첨부 안 함 + +### 89번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/89.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/89.png +- 마커: 없음 — 첨부 안 함 + +### 90번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/90.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/90.png +- 마커: 없음 — 첨부 안 함 + +### 91번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/91.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/91.png +- 마커: 없음 — 첨부 안 함 + +### 92번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/92.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/92.png +- 마커: 없음 — 첨부 안 함 + +### 93번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/93.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/93.png +- 마커: 없음 — 첨부 안 함 + +### 94번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/94.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/94.png +- 마커: 없음 — 첨부 안 함 + +### 95번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/95.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/95.png +- 마커: 없음 — 첨부 안 함 + +### 96번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/96.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/96.png +- 마커: 없음 — 첨부 안 함 + +### 97번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/97.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/97.png +- 마커: 없음 — 첨부 안 함 + +### 98번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/98.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/98.png +- 마커: 없음 — 첨부 안 함 + +### 99번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/99.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/99.png +- 마커: 없음 — 첨부 안 함 + +### 100번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/100.md +- png: /Users/hyungiahn/Desktop/가스기사/2019년 3회/05 가스계측기기/100.png +- 마커: 없음 — 첨부 안 함 diff --git a/import_reports/2020년_1회_image_required.md b/import_reports/2020년_1회_image_required.md new file mode 100644 index 0000000..c0b0794 --- /dev/null +++ b/import_reports/2020년_1회_image_required.md @@ -0,0 +1,615 @@ +# 2020년 1회 — 이미지 필요 문항 리포트 + +## 사용자가 확인할 것 + +- missing_png — 0건 +- **placeholder_skipped — 97건** (마커 없는데 png 있음 — 실제 도식이면 md 첫 줄에 `**⚠ 이미지 별도 업로드 필요**` 마커 추가 검토) + - 1번 / 가스유체역학 + - 2번 / 가스유체역학 + - 3번 / 가스유체역학 + - 4번 / 가스유체역학 + - 6번 / 가스유체역학 + - 7번 / 가스유체역학 + - 8번 / 가스유체역학 + - 9번 / 가스유체역학 + - 10번 / 가스유체역학 + - 12번 / 가스유체역학 + - 13번 / 가스유체역학 + - 14번 / 가스유체역학 + - 15번 / 가스유체역학 + - 16번 / 가스유체역학 + - 18번 / 가스유체역학 + - 19번 / 가스유체역학 + - 20번 / 가스유체역학 + - 21번 / 연소공학 + - 22번 / 연소공학 + - 23번 / 연소공학 + - 24번 / 연소공학 + - 25번 / 연소공학 + - 26번 / 연소공학 + - 27번 / 연소공학 + - 28번 / 연소공학 + - 29번 / 연소공학 + - 30번 / 연소공학 + - 31번 / 연소공학 + - 32번 / 연소공학 + - 33번 / 연소공학 + - 34번 / 연소공학 + - 35번 / 연소공학 + - 36번 / 연소공학 + - 37번 / 연소공학 + - 38번 / 연소공학 + - 39번 / 연소공학 + - 40번 / 연소공학 + - 41번 / 가스설비 + - 42번 / 가스설비 + - 43번 / 가스설비 + - 44번 / 가스설비 + - 45번 / 가스설비 + - 46번 / 가스설비 + - 47번 / 가스설비 + - 48번 / 가스설비 + - 49번 / 가스설비 + - 50번 / 가스설비 + - 51번 / 가스설비 + - 52번 / 가스설비 + - 53번 / 가스설비 + - 54번 / 가스설비 + - 55번 / 가스설비 + - 56번 / 가스설비 + - 57번 / 가스설비 + - 58번 / 가스설비 + - 59번 / 가스설비 + - 60번 / 가스설비 + - 61번 / 가스안전관리 + - 62번 / 가스안전관리 + - 63번 / 가스안전관리 + - 64번 / 가스안전관리 + - 65번 / 가스안전관리 + - 66번 / 가스안전관리 + - 67번 / 가스안전관리 + - 68번 / 가스안전관리 + - 69번 / 가스안전관리 + - 70번 / 가스안전관리 + - 71번 / 가스안전관리 + - 72번 / 가스안전관리 + - 73번 / 가스안전관리 + - 74번 / 가스안전관리 + - 75번 / 가스안전관리 + - 76번 / 가스안전관리 + - 77번 / 가스안전관리 + - 78번 / 가스안전관리 + - 79번 / 가스안전관리 + - 80번 / 가스안전관리 + - 81번 / 가스계측기기 + - 82번 / 가스계측기기 + - 83번 / 가스계측기기 + - 84번 / 가스계측기기 + - 85번 / 가스계측기기 + - 86번 / 가스계측기기 + - 87번 / 가스계측기기 + - 88번 / 가스계측기기 + - 89번 / 가스계측기기 + - 90번 / 가스계측기기 + - 91번 / 가스계측기기 + - 92번 / 가스계측기기 + - 93번 / 가스계측기기 + - 94번 / 가스계측기기 + - 95번 / 가스계측기기 + - 96번 / 가스계측기기 + - 97번 / 가스계측기기 + - 98번 / 가스계측기기 + - 99번 / 가스계측기기 + - 100번 / 가스계측기기 +- **attach_planned — 3건** (apply 시 자동 첨부 예정) + +--- + +## 첨부 예정 (attach_planned) — 3건 + +### 5번 / 가스유체역학 / 압축성 유동·노즐/디퓨저 (`01_fluid/09_compressible/` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/5.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/5.png +- 설명: 단면이 점점 커지는 확산기 (Diffuser) 그림, Ma > 1 표시 +- 상태: attach_planned (apply 시 자동 첨부) + +### 11번 / 가스유체역학 / 연속방정식 (`01_fluid/05_kinematics/` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/11.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/11.png +- 설명: 관내 흐름 그림 (입구 5cm·20cm 두 갈래, 출구 10cm·40cm; A점·B점 위치 표시) +- 상태: attach_planned (apply 시 자동 첨부) + +### 17번 / 가스유체역학 / U자 마노미터·차압 (`01_fluid/04_statics/04_액주계_마노미터.md` 참고) +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/17.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/17.png +- 설명: 관에 U자 수은 마노미터 설치, A·B 점 사이 수은 높이차 h=0.7m 표시 +- 상태: attach_planned (apply 시 자동 첨부) + +## OCR placeholder (참고) — 97건 + +마커는 없지만 png 가 존재 — OCR 원본일 가능성. 마커 누락 실수인지 검토. + +### 1번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/1.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/1.png +- 마커: 없음 — 첨부 안 함 + +### 2번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/2.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/2.png +- 마커: 없음 — 첨부 안 함 + +### 3번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/3.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/3.png +- 마커: 없음 — 첨부 안 함 + +### 4번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/4.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/4.png +- 마커: 없음 — 첨부 안 함 + +### 6번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/6.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/6.png +- 마커: 없음 — 첨부 안 함 + +### 7번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/7.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/7.png +- 마커: 없음 — 첨부 안 함 + +### 8번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/8.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/8.png +- 마커: 없음 — 첨부 안 함 + +### 9번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/9.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/9.png +- 마커: 없음 — 첨부 안 함 + +### 10번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/10.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/10.png +- 마커: 없음 — 첨부 안 함 + +### 12번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/12.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/12.png +- 마커: 없음 — 첨부 안 함 + +### 13번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/13.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/13.png +- 마커: 없음 — 첨부 안 함 + +### 14번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/14.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/14.png +- 마커: 없음 — 첨부 안 함 + +### 15번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/15.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/15.png +- 마커: 없음 — 첨부 안 함 + +### 16번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/16.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/16.png +- 마커: 없음 — 첨부 안 함 + +### 18번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/18.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/18.png +- 마커: 없음 — 첨부 안 함 + +### 19번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/19.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/19.png +- 마커: 없음 — 첨부 안 함 + +### 20번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/20.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/01 가스유체역학/20.png +- 마커: 없음 — 첨부 안 함 + +### 21번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/21.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/21.png +- 마커: 없음 — 첨부 안 함 + +### 22번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/22.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/22.png +- 마커: 없음 — 첨부 안 함 + +### 23번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/23.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/23.png +- 마커: 없음 — 첨부 안 함 + +### 24번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/24.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/24.png +- 마커: 없음 — 첨부 안 함 + +### 25번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/25.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/25.png +- 마커: 없음 — 첨부 안 함 + +### 26번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/26.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/26.png +- 마커: 없음 — 첨부 안 함 + +### 27번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/27.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/27.png +- 마커: 없음 — 첨부 안 함 + +### 28번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/28.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/28.png +- 마커: 없음 — 첨부 안 함 + +### 29번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/29.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/29.png +- 마커: 없음 — 첨부 안 함 + +### 30번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/30.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/30.png +- 마커: 없음 — 첨부 안 함 + +### 31번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/31.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/31.png +- 마커: 없음 — 첨부 안 함 + +### 32번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/32.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/32.png +- 마커: 없음 — 첨부 안 함 + +### 33번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/33.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/33.png +- 마커: 없음 — 첨부 안 함 + +### 34번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/34.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/34.png +- 마커: 없음 — 첨부 안 함 + +### 35번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/35.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/35.png +- 마커: 없음 — 첨부 안 함 + +### 36번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/36.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/36.png +- 마커: 없음 — 첨부 안 함 + +### 37번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/37.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/37.png +- 마커: 없음 — 첨부 안 함 + +### 38번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/38.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/38.png +- 마커: 없음 — 첨부 안 함 + +### 39번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/39.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/39.png +- 마커: 없음 — 첨부 안 함 + +### 40번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/40.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/02 연소공학/40.png +- 마커: 없음 — 첨부 안 함 + +### 41번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/41.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/41.png +- 마커: 없음 — 첨부 안 함 + +### 42번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/42.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/42.png +- 마커: 없음 — 첨부 안 함 + +### 43번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/43.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/43.png +- 마커: 없음 — 첨부 안 함 + +### 44번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/44.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/44.png +- 마커: 없음 — 첨부 안 함 + +### 45번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/45.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/45.png +- 마커: 없음 — 첨부 안 함 + +### 46번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/46.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/46.png +- 마커: 없음 — 첨부 안 함 + +### 47번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/47.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/47.png +- 마커: 없음 — 첨부 안 함 + +### 48번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/48.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/48.png +- 마커: 없음 — 첨부 안 함 + +### 49번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/49.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/49.png +- 마커: 없음 — 첨부 안 함 + +### 50번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/50.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/50.png +- 마커: 없음 — 첨부 안 함 + +### 51번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/51.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/51.png +- 마커: 없음 — 첨부 안 함 + +### 52번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/52.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/52.png +- 마커: 없음 — 첨부 안 함 + +### 53번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/53.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/53.png +- 마커: 없음 — 첨부 안 함 + +### 54번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/54.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/54.png +- 마커: 없음 — 첨부 안 함 + +### 55번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/55.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/55.png +- 마커: 없음 — 첨부 안 함 + +### 56번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/56.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/56.png +- 마커: 없음 — 첨부 안 함 + +### 57번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/57.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/57.png +- 마커: 없음 — 첨부 안 함 + +### 58번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/58.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/58.png +- 마커: 없음 — 첨부 안 함 + +### 59번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/59.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/59.png +- 마커: 없음 — 첨부 안 함 + +### 60번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/60.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/03 가스설비/60.png +- 마커: 없음 — 첨부 안 함 + +### 61번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/61.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/61.png +- 마커: 없음 — 첨부 안 함 + +### 62번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/62.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/62.png +- 마커: 없음 — 첨부 안 함 + +### 63번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/63.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/63.png +- 마커: 없음 — 첨부 안 함 + +### 64번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/64.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/64.png +- 마커: 없음 — 첨부 안 함 + +### 65번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/65.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/65.png +- 마커: 없음 — 첨부 안 함 + +### 66번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/66.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/66.png +- 마커: 없음 — 첨부 안 함 + +### 67번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/67.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/67.png +- 마커: 없음 — 첨부 안 함 + +### 68번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/68.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/68.png +- 마커: 없음 — 첨부 안 함 + +### 69번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/69.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/69.png +- 마커: 없음 — 첨부 안 함 + +### 70번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/70.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/70.png +- 마커: 없음 — 첨부 안 함 + +### 71번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/71.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/71.png +- 마커: 없음 — 첨부 안 함 + +### 72번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/72.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/72.png +- 마커: 없음 — 첨부 안 함 + +### 73번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/73.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/73.png +- 마커: 없음 — 첨부 안 함 + +### 74번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/74.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/74.png +- 마커: 없음 — 첨부 안 함 + +### 75번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/75.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/75.png +- 마커: 없음 — 첨부 안 함 + +### 76번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/76.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/76.png +- 마커: 없음 — 첨부 안 함 + +### 77번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/77.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/77.png +- 마커: 없음 — 첨부 안 함 + +### 78번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/78.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/78.png +- 마커: 없음 — 첨부 안 함 + +### 79번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/79.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/79.png +- 마커: 없음 — 첨부 안 함 + +### 80번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/80.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/04 가스안전관리/80.png +- 마커: 없음 — 첨부 안 함 + +### 81번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/81.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/81.png +- 마커: 없음 — 첨부 안 함 + +### 82번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/82.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/82.png +- 마커: 없음 — 첨부 안 함 + +### 83번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/83.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/83.png +- 마커: 없음 — 첨부 안 함 + +### 84번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/84.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/84.png +- 마커: 없음 — 첨부 안 함 + +### 85번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/85.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/85.png +- 마커: 없음 — 첨부 안 함 + +### 86번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/86.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/86.png +- 마커: 없음 — 첨부 안 함 + +### 87번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/87.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/87.png +- 마커: 없음 — 첨부 안 함 + +### 88번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/88.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/88.png +- 마커: 없음 — 첨부 안 함 + +### 89번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/89.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/89.png +- 마커: 없음 — 첨부 안 함 + +### 90번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/90.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/90.png +- 마커: 없음 — 첨부 안 함 + +### 91번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/91.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/91.png +- 마커: 없음 — 첨부 안 함 + +### 92번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/92.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/92.png +- 마커: 없음 — 첨부 안 함 + +### 93번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/93.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/93.png +- 마커: 없음 — 첨부 안 함 + +### 94번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/94.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/94.png +- 마커: 없음 — 첨부 안 함 + +### 95번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/95.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/95.png +- 마커: 없음 — 첨부 안 함 + +### 96번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/96.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/96.png +- 마커: 없음 — 첨부 안 함 + +### 97번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/97.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/97.png +- 마커: 없음 — 첨부 안 함 + +### 98번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/98.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/98.png +- 마커: 없음 — 첨부 안 함 + +### 99번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/99.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/99.png +- 마커: 없음 — 첨부 안 함 + +### 100번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/100.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 1회/05 가스계측기기/100.png +- 마커: 없음 — 첨부 안 함 diff --git a/import_reports/2020년_2회_image_required.md b/import_reports/2020년_2회_image_required.md new file mode 100644 index 0000000..e8df261 --- /dev/null +++ b/import_reports/2020년_2회_image_required.md @@ -0,0 +1,613 @@ +# 2020년 2회 — 이미지 필요 문항 리포트 + +## 사용자가 확인할 것 + +- missing_png — 0건 +- **placeholder_skipped — 100건** (마커 없는데 png 있음 — 실제 도식이면 md 첫 줄에 `**⚠ 이미지 별도 업로드 필요**` 마커 추가 검토) + - 1번 / 가스유체역학 + - 2번 / 가스유체역학 + - 3번 / 가스유체역학 + - 4번 / 가스유체역학 + - 5번 / 가스유체역학 + - 6번 / 가스유체역학 + - 7번 / 가스유체역학 + - 8번 / 가스유체역학 + - 9번 / 가스유체역학 + - 10번 / 가스유체역학 + - 11번 / 가스유체역학 + - 12번 / 가스유체역학 + - 13번 / 가스유체역학 + - 14번 / 가스유체역학 + - 15번 / 가스유체역학 + - 16번 / 가스유체역학 + - 17번 / 가스유체역학 + - 18번 / 가스유체역학 + - 19번 / 가스유체역학 + - 20번 / 가스유체역학 + - 21번 / 연소공학 + - 22번 / 연소공학 + - 23번 / 연소공학 + - 24번 / 연소공학 + - 25번 / 연소공학 + - 26번 / 연소공학 + - 27번 / 연소공학 + - 28번 / 연소공학 + - 29번 / 연소공학 + - 30번 / 연소공학 + - 31번 / 연소공학 + - 32번 / 연소공학 + - 33번 / 연소공학 + - 34번 / 연소공학 + - 35번 / 연소공학 + - 36번 / 연소공학 + - 37번 / 연소공학 + - 38번 / 연소공학 + - 39번 / 연소공학 + - 40번 / 연소공학 + - 41번 / 가스설비 + - 42번 / 가스설비 + - 43번 / 가스설비 + - 44번 / 가스설비 + - 45번 / 가스설비 + - 46번 / 가스설비 + - 47번 / 가스설비 + - 48번 / 가스설비 + - 49번 / 가스설비 + - 50번 / 가스설비 + - 51번 / 가스설비 + - 52번 / 가스설비 + - 53번 / 가스설비 + - 54번 / 가스설비 + - 55번 / 가스설비 + - 56번 / 가스설비 + - 57번 / 가스설비 + - 58번 / 가스설비 + - 59번 / 가스설비 + - 60번 / 가스설비 + - 61번 / 가스안전관리 + - 62번 / 가스안전관리 + - 63번 / 가스안전관리 + - 64번 / 가스안전관리 + - 65번 / 가스안전관리 + - 66번 / 가스안전관리 + - 67번 / 가스안전관리 + - 68번 / 가스안전관리 + - 69번 / 가스안전관리 + - 70번 / 가스안전관리 + - 71번 / 가스안전관리 + - 72번 / 가스안전관리 + - 73번 / 가스안전관리 + - 74번 / 가스안전관리 + - 75번 / 가스안전관리 + - 76번 / 가스안전관리 + - 77번 / 가스안전관리 + - 78번 / 가스안전관리 + - 79번 / 가스안전관리 + - 80번 / 가스안전관리 + - 81번 / 가스계측기기 + - 82번 / 가스계측기기 + - 83번 / 가스계측기기 + - 84번 / 가스계측기기 + - 85번 / 가스계측기기 + - 86번 / 가스계측기기 + - 87번 / 가스계측기기 + - 88번 / 가스계측기기 + - 89번 / 가스계측기기 + - 90번 / 가스계측기기 + - 91번 / 가스계측기기 + - 92번 / 가스계측기기 + - 93번 / 가스계측기기 + - 94번 / 가스계측기기 + - 95번 / 가스계측기기 + - 96번 / 가스계측기기 + - 97번 / 가스계측기기 + - 98번 / 가스계측기기 + - 99번 / 가스계측기기 + - 100번 / 가스계측기기 +- **attach_planned — 0건** (apply 시 자동 첨부 예정) + +--- + +## OCR placeholder (참고) — 100건 + +마커는 없지만 png 가 존재 — OCR 원본일 가능성. 마커 누락 실수인지 검토. + +### 1번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/1.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/1.png +- 마커: 없음 — 첨부 안 함 + +### 2번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/2.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/2.png +- 마커: 없음 — 첨부 안 함 + +### 3번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/3.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/3.png +- 마커: 없음 — 첨부 안 함 + +### 4번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/4.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/4.png +- 마커: 없음 — 첨부 안 함 + +### 5번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/5.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/5.png +- 마커: 없음 — 첨부 안 함 + +### 6번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/6.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/6.png +- 마커: 없음 — 첨부 안 함 + +### 7번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/7.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/7.png +- 마커: 없음 — 첨부 안 함 + +### 8번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/8.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/8.png +- 마커: 없음 — 첨부 안 함 + +### 9번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/9.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/9.png +- 마커: 없음 — 첨부 안 함 + +### 10번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/10.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/10.png +- 마커: 없음 — 첨부 안 함 + +### 11번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/11.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/11.png +- 마커: 없음 — 첨부 안 함 + +### 12번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/12.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/12.png +- 마커: 없음 — 첨부 안 함 + +### 13번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/13.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/13.png +- 마커: 없음 — 첨부 안 함 + +### 14번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/14.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/14.png +- 마커: 없음 — 첨부 안 함 + +### 15번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/15.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/15.png +- 마커: 없음 — 첨부 안 함 + +### 16번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/16.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/16.png +- 마커: 없음 — 첨부 안 함 + +### 17번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/17.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/17.png +- 마커: 없음 — 첨부 안 함 + +### 18번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/18.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/18.png +- 마커: 없음 — 첨부 안 함 + +### 19번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/19.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/19.png +- 마커: 없음 — 첨부 안 함 + +### 20번 / 가스유체역학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/20.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/01 가스유체역학/20.png +- 마커: 없음 — 첨부 안 함 + +### 21번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/21.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/21.png +- 마커: 없음 — 첨부 안 함 + +### 22번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/22.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/22.png +- 마커: 없음 — 첨부 안 함 + +### 23번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/23.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/23.png +- 마커: 없음 — 첨부 안 함 + +### 24번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/24.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/24.png +- 마커: 없음 — 첨부 안 함 + +### 25번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/25.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/25.png +- 마커: 없음 — 첨부 안 함 + +### 26번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/26.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/26.png +- 마커: 없음 — 첨부 안 함 + +### 27번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/27.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/27.png +- 마커: 없음 — 첨부 안 함 + +### 28번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/28.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/28.png +- 마커: 없음 — 첨부 안 함 + +### 29번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/29.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/29.png +- 마커: 없음 — 첨부 안 함 + +### 30번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/30.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/30.png +- 마커: 없음 — 첨부 안 함 + +### 31번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/31.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/31.png +- 마커: 없음 — 첨부 안 함 + +### 32번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/32.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/32.png +- 마커: 없음 — 첨부 안 함 + +### 33번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/33.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/33.png +- 마커: 없음 — 첨부 안 함 + +### 34번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/34.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/34.png +- 마커: 없음 — 첨부 안 함 + +### 35번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/35.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/35.png +- 마커: 없음 — 첨부 안 함 + +### 36번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/36.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/36.png +- 마커: 없음 — 첨부 안 함 + +### 37번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/37.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/37.png +- 마커: 없음 — 첨부 안 함 + +### 38번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/38.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/38.png +- 마커: 없음 — 첨부 안 함 + +### 39번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/39.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/39.png +- 마커: 없음 — 첨부 안 함 + +### 40번 / 연소공학 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/40.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/02 연소공학/40.png +- 마커: 없음 — 첨부 안 함 + +### 41번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/41.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/41.png +- 마커: 없음 — 첨부 안 함 + +### 42번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/42.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/42.png +- 마커: 없음 — 첨부 안 함 + +### 43번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/43.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/43.png +- 마커: 없음 — 첨부 안 함 + +### 44번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/44.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/44.png +- 마커: 없음 — 첨부 안 함 + +### 45번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/45.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/45.png +- 마커: 없음 — 첨부 안 함 + +### 46번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/46.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/46.png +- 마커: 없음 — 첨부 안 함 + +### 47번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/47.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/47.png +- 마커: 없음 — 첨부 안 함 + +### 48번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/48.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/48.png +- 마커: 없음 — 첨부 안 함 + +### 49번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/49.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/49.png +- 마커: 없음 — 첨부 안 함 + +### 50번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/50.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/50.png +- 마커: 없음 — 첨부 안 함 + +### 51번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/51.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/51.png +- 마커: 없음 — 첨부 안 함 + +### 52번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/52.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/52.png +- 마커: 없음 — 첨부 안 함 + +### 53번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/53.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/53.png +- 마커: 없음 — 첨부 안 함 + +### 54번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/54.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/54.png +- 마커: 없음 — 첨부 안 함 + +### 55번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/55.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/55.png +- 마커: 없음 — 첨부 안 함 + +### 56번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/56.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/56.png +- 마커: 없음 — 첨부 안 함 + +### 57번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/57.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/57.png +- 마커: 없음 — 첨부 안 함 + +### 58번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/58.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/58.png +- 마커: 없음 — 첨부 안 함 + +### 59번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/59.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/59.png +- 마커: 없음 — 첨부 안 함 + +### 60번 / 가스설비 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/60.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/03 가스설비/60.png +- 마커: 없음 — 첨부 안 함 + +### 61번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/61.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/61.png +- 마커: 없음 — 첨부 안 함 + +### 62번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/62.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/62.png +- 마커: 없음 — 첨부 안 함 + +### 63번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/63.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/63.png +- 마커: 없음 — 첨부 안 함 + +### 64번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/64.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/64.png +- 마커: 없음 — 첨부 안 함 + +### 65번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/65.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/65.png +- 마커: 없음 — 첨부 안 함 + +### 66번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/66.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/66.png +- 마커: 없음 — 첨부 안 함 + +### 67번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/67.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/67.png +- 마커: 없음 — 첨부 안 함 + +### 68번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/68.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/68.png +- 마커: 없음 — 첨부 안 함 + +### 69번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/69.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/69.png +- 마커: 없음 — 첨부 안 함 + +### 70번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/70.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/70.png +- 마커: 없음 — 첨부 안 함 + +### 71번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/71.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/71.png +- 마커: 없음 — 첨부 안 함 + +### 72번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/72.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/72.png +- 마커: 없음 — 첨부 안 함 + +### 73번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/73.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/73.png +- 마커: 없음 — 첨부 안 함 + +### 74번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/74.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/74.png +- 마커: 없음 — 첨부 안 함 + +### 75번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/75.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/75.png +- 마커: 없음 — 첨부 안 함 + +### 76번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/76.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/76.png +- 마커: 없음 — 첨부 안 함 + +### 77번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/77.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/77.png +- 마커: 없음 — 첨부 안 함 + +### 78번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/78.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/78.png +- 마커: 없음 — 첨부 안 함 + +### 79번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/79.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/79.png +- 마커: 없음 — 첨부 안 함 + +### 80번 / 가스안전관리 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/80.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/04 가스안전관리/80.png +- 마커: 없음 — 첨부 안 함 + +### 81번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/81.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/81.png +- 마커: 없음 — 첨부 안 함 + +### 82번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/82.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/82.png +- 마커: 없음 — 첨부 안 함 + +### 83번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/83.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/83.png +- 마커: 없음 — 첨부 안 함 + +### 84번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/84.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/84.png +- 마커: 없음 — 첨부 안 함 + +### 85번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/85.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/85.png +- 마커: 없음 — 첨부 안 함 + +### 86번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/86.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/86.png +- 마커: 없음 — 첨부 안 함 + +### 87번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/87.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/87.png +- 마커: 없음 — 첨부 안 함 + +### 88번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/88.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/88.png +- 마커: 없음 — 첨부 안 함 + +### 89번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/89.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/89.png +- 마커: 없음 — 첨부 안 함 + +### 90번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/90.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/90.png +- 마커: 없음 — 첨부 안 함 + +### 91번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/91.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/91.png +- 마커: 없음 — 첨부 안 함 + +### 92번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/92.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/92.png +- 마커: 없음 — 첨부 안 함 + +### 93번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/93.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/93.png +- 마커: 없음 — 첨부 안 함 + +### 94번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/94.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/94.png +- 마커: 없음 — 첨부 안 함 + +### 95번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/95.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/95.png +- 마커: 없음 — 첨부 안 함 + +### 96번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/96.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/96.png +- 마커: 없음 — 첨부 안 함 + +### 97번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/97.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/97.png +- 마커: 없음 — 첨부 안 함 + +### 98번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/98.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/98.png +- 마커: 없음 — 첨부 안 함 + +### 99번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/99.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/99.png +- 마커: 없음 — 첨부 안 함 + +### 100번 / 가스계측기기 +- md: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/100.md +- png: /Users/hyungiahn/Desktop/가스기사/2020년 2회/05 가스계측기기/100.png +- 마커: 없음 — 첨부 안 함 diff --git a/scripts/import_gas_questions.py b/scripts/import_gas_questions.py new file mode 100644 index 0000000..70c736e --- /dev/null +++ b/scripts/import_gas_questions.py @@ -0,0 +1,722 @@ +"""scripts/import_gas_questions.py — 가스기사 기출 md 일괄 import. + +usage: + export STUDY_IMPORT_TOKEN=eyJ... # /api/auth/login 으로 발급 + python scripts/import_gas_questions.py "~/Desktop/가스기사/2019년 2회" + python scripts/import_gas_questions.py "~/Desktop/가스기사/2019년 2회" --apply + python scripts/import_gas_questions.py "~/Desktop/가스기사/2019년 2회" --apply --skip-existing + +규칙 (plan crispy-petting-dijkstra.md 기준): +- exam_question_number 는 파일명/제목/메타 3소스 일치 의무. 불일치 시 dry-run 실패. +- 이미지: 첫 줄 "**⚠ 이미지 별도 업로드 필요**" 마커 + {N}.png 매트릭스 4종. + · marker yes + png yes → attach_planned (apply 시 첨부) + · marker yes + png no → missing_png (dry-run 실패) + · marker no + png yes → placeholder_skipped (참고) + · marker no + png no → 텍스트 문항 (정상) +- outer fence only strip: terminated wrap 또는 unterminated (백틱 그룹 1). +- apply 기본 = 첫 실패에서 abort. --continue-on-error / --skip-existing 옵션. +- dry-run 시 import_reports/{exam_round}_image_required.md 항상 생성. +""" + +from __future__ import annotations + +import argparse +import os +import re +import sys +from dataclasses import dataclass, field +from pathlib import Path +from typing import Optional + +import httpx + + +API_BASE = os.environ.get("STUDY_IMPORT_API", "https://document.hyungi.net/api") +TOPIC_ID = int(os.environ.get("STUDY_IMPORT_TOPIC_ID", "4")) +TOKEN = os.environ.get("STUDY_IMPORT_TOKEN", "") + +# 폴더명 → subject 매핑 (NN 접두 + 공백 또는 _ 분리 모두 허용). +SUBJECT_MAP = { + "01 가스유체역학": "가스유체역학", + "01_가스유체역학": "가스유체역학", + "01 가스유체": "가스유체역학", + "02 연소공학": "연소공학", + "02_연소공학": "연소공학", + "03 가스설비": "가스설비", + "03_가스설비": "가스설비", + "04 가스안전관리": "가스안전관리", + "04_가스안전관리": "가스안전관리", + "05 가스계측기기": "가스계측기기", + "05_가스계측기기": "가스계측기기", + "05 가스계측": "가스계측기기", +} + +CIRCLED = {"①": 1, "②": 2, "③": 3, "④": 4} +IMAGE_MARKER = "⚠ 이미지 별도 업로드 필요" + +# subject 정규화: 5개 시험 과목으로 고정. md 가 "연소공학 (열역학)" 같이 +# 괄호 세부 분류를 가지면 subject 는 head 만, 괄호 안은 scope 앞에 붙임. +CANONICAL_SUBJECTS = { + "가스유체역학", + "연소공학", + "가스설비", + "가스안전관리", + "가스계측기기", +} + + +def normalize_subject( + raw_subject: str, raw_scope: Optional[str] +) -> tuple[str, Optional[str]]: + """('연소공학 (열역학)', 'X') → ('연소공학', '열역학 · X').""" + s = (raw_subject or "").strip() + if not s or s in CANONICAL_SUBJECTS: + return s, raw_scope + m = re.match(r"^(.+?)\s*\(\s*([^()]+?)\s*\)\s*$", s) + if not m: + return s, raw_scope + head = m.group(1).strip() + detail = m.group(2).strip() + if head not in CANONICAL_SUBJECTS: + # 정규 5과목 외면 정규화 안 함 (사용자 검토 대상) + return s, raw_scope + if raw_scope: + new_scope = f"{detail} · {raw_scope}" + else: + new_scope = detail + return head, new_scope + + +# ─── outer fence strip (PR-12 stripOuterFence 와 동일 룰) ─── + +TERM_RE = re.compile(r"^```[A-Za-z0-9_-]*[ \t]*\n([\s\S]*?)\n```$") +UNTERM_RE = re.compile(r"^```[A-Za-z0-9_-]*[ \t]*\n([\s\S]*)$") + + +def strip_outer_fence(text: str) -> str: + """전체 텍스트가 단일 fenced block 으로 감싸진 경우만 unwrap. 아니면 원본.""" + if not text: + return text + trimmed = text.strip() + # (1) terminated + m = TERM_RE.match(trimmed) + if m: + inner = m.group(1) + if "```" not in inner: + return inner + return text + # (2) unterminated (백틱 그룹 == 1) + if trimmed.count("```") == 1: + m2 = UNTERM_RE.match(trimmed) + if m2: + return m2.group(1) + return text + + +# ─── md 파서 ─── + + +@dataclass +class ParsedQuestion: + file_path: Path + exam_round: str # 메타에서 추출 + exam_question_number: int # 파일명/제목/메타 일치 후 + subject: str + scope: Optional[str] + source_note: Optional[str] + question_text: str + choice_1: str + choice_2: str + choice_3: str + choice_4: str + correct_choice: int # 1~4 + explanation: Optional[str] + image_marker: bool + image_description: Optional[str] + png_path: Optional[Path] # 존재하면 path, 없으면 None + parse_errors: list[str] = field(default_factory=list) + + +@dataclass +class ImageStatus: + """4 케이스: attach_planned / missing_png / placeholder_skipped / text_only.""" + state: str + description: Optional[str] = None + + +def classify_image(p: ParsedQuestion) -> ImageStatus: + if p.image_marker and p.png_path and p.png_path.exists(): + return ImageStatus("attach_planned", p.image_description) + if p.image_marker and (not p.png_path or not p.png_path.exists()): + return ImageStatus("missing_png", p.image_description) + if not p.image_marker and p.png_path and p.png_path.exists(): + return ImageStatus("placeholder_skipped") + return ImageStatus("text_only") + + +def _extract_section_fence(md: str, header: str) -> Optional[str]: + """### {header} 다음 fenced block 본문. 없으면 None. + + fenced block 이 없으면 다음 ### 또는 EOF 까지 plain 텍스트 가져옴 (fallback). + """ + pat_fenced = re.compile( + rf"^### {re.escape(header)}\s*$\s*\n```[A-Za-z0-9_-]*[ \t]*\n([\s\S]*?)\n```", + re.MULTILINE, + ) + m = pat_fenced.search(md) + if m: + return m.group(1).rstrip() + # fallback — fence 없는 경우 + pat_plain = re.compile( + rf"^### {re.escape(header)}\s*$\s*\n([\s\S]*?)(?=^###|\Z)", + re.MULTILINE, + ) + m = pat_plain.search(md) + if m: + return m.group(1).strip() + return None + + +def _extract_meta(md: str) -> dict[str, str]: + """### 메타 섹션의 - **키**: 값 항목 dict.""" + out: dict[str, str] = {} + section = re.search(r"^### 메타\s*$\s*\n([\s\S]*?)(?=^###|\Z)", md, re.MULTILINE) + if not section: + return out + body = section.group(1) + for line in body.splitlines(): + m = re.match(r"^\s*-\s*\*\*([^*]+)\*\*\s*:\s*(.+?)\s*$", line) + if m: + out[m.group(1).strip()] = m.group(2).strip() + return out + + +def _parse_choices(raw: str) -> tuple[str, str, str, str]: + """보기 fenced block → 4개 텍스트. + + 한 줄당 "{N}번: ..." 형태. 멀티라인 보기는 다음 N번 보기 직전까지 합침. + """ + lines = raw.splitlines() + buckets: dict[int, list[str]] = {1: [], 2: [], 3: [], 4: []} + current: Optional[int] = None + for line in lines: + m = re.match(r"^\s*(\d)번\s*:\s*(.*)$", line) + if m: + current = int(m.group(1)) + if 1 <= current <= 4: + buckets[current].append(m.group(2).rstrip()) + else: + current = None + elif current is not None: + stripped = line.rstrip() + if stripped: + buckets[current].append(stripped) + result: list[str] = [] + for i in (1, 2, 3, 4): + joined = "\n".join(buckets[i]).strip() + result.append(joined) + return tuple(result) # type: ignore + + +def _parse_correct(raw: str) -> Optional[int]: + """### 정답 본문에서 1~4 추출. **N** 우선, ①~④ 폴백.""" + if not raw: + return None + text = raw.strip() + m = re.search(r"\*\*\s*([1-4])\s*\*\*", text) + if m: + return int(m.group(1)) + for ch, n in CIRCLED.items(): + if ch in text: + return n + m2 = re.search(r"\b([1-4])\b", text) + if m2: + return int(m2.group(1)) + return None + + +def parse_md(file_path: Path) -> ParsedQuestion: + """단일 md 파싱. parse_errors 비어있으면 OK, 있으면 dry-run 실패 사유.""" + md = file_path.read_text(encoding="utf-8") + errors: list[str] = [] + + # 첫 줄 + 이미지 마커 + lines = md.splitlines() + title_line = lines[0] if lines else "" + image_marker = False + image_desc: Optional[str] = None + for line in lines[1:6]: + if IMAGE_MARKER in line: + image_marker = True + mdesc = re.search(r"이미지 별도 업로드 필요\s*\*\*\s*[—\-]\s*(.+)$", line) + if mdesc: + image_desc = mdesc.group(1).strip() + break + + # 제목에서 회차/과목/번호 추출 + title_qnum: Optional[int] = None + title_round: Optional[str] = None + title_subject: Optional[str] = None + m_title = re.match(r"^#\s*(.+?)\s+(\S+)\s+(\d+)번\s*$", title_line) + if m_title: + title_round = m_title.group(1).strip() + title_subject = m_title.group(2).strip() + title_qnum = int(m_title.group(3)) + + # 파일명에서 번호 + file_qnum: Optional[int] = None + m_file = re.match(r"^(\d+)\.md$", file_path.name) + if m_file: + file_qnum = int(m_file.group(1)) + + # 메타 + meta = _extract_meta(md) + meta_qnum: Optional[int] = None + if "문항 번호" in meta: + try: + meta_qnum = int(meta["문항 번호"]) + except ValueError: + errors.append(f"메타 문항 번호 파싱 실패: {meta['문항 번호']!r}") + + # 3 소스 일치 검증 + qnums = {x for x in (file_qnum, title_qnum, meta_qnum) if x is not None} + if len(qnums) == 0: + errors.append("문항 번호 추출 실패 (파일명/제목/메타 모두)") + final_qnum = -1 + elif len(qnums) > 1: + errors.append( + f"문항 번호 불일치: 파일명={file_qnum} 제목={title_qnum} 메타={meta_qnum}" + ) + final_qnum = file_qnum or title_qnum or meta_qnum or -1 + else: + final_qnum = qnums.pop() + + # 메타 필수 — subject / exam_round + subject_meta = meta.get("과목", "").strip() + if not subject_meta: + # 폴더명 폴백 + folder = file_path.parent.name + subject_meta = SUBJECT_MAP.get(folder, "") + if not subject_meta: + errors.append("과목 메타 누락") + + exam_round = meta.get("회차", "").strip() + if not exam_round and title_round: + exam_round = title_round + if not exam_round: + errors.append("회차 메타 누락") + + scope = meta.get("범위", "").strip() or None + source_note = meta.get("출처/메모", "").strip() or None + + # subject 정규화: 괄호 세부 분류는 scope 로 이동. 5과목 외면 그대로 보존. + subject_meta, scope = normalize_subject(subject_meta, scope) + + # 본문/보기/정답/해설 + qtext_raw = _extract_section_fence(md, "문제 본문") + if qtext_raw is None: + errors.append("### 문제 본문 섹션 없음") + qtext_raw = "" + question_text = strip_outer_fence(qtext_raw).strip() + if not question_text: + errors.append("문제 본문 비어있음") + + choices_raw = _extract_section_fence(md, "보기") + if choices_raw is None: + errors.append("### 보기 섹션 없음") + c1, c2, c3, c4 = "", "", "", "" + else: + c1, c2, c3, c4 = _parse_choices(strip_outer_fence(choices_raw)) + for i, c in enumerate((c1, c2, c3, c4), 1): + if not c: + errors.append(f"보기 {i}번 비어있음") + + correct_raw = _extract_section_fence(md, "정답") + if correct_raw is None: + # ### 정답 다음 단순 한 줄 (fenced 없는 경우 _extract_section_fence 가 fallback 처리) + errors.append("### 정답 섹션 없음") + correct = -1 + else: + cc = _parse_correct(correct_raw) + if cc is None: + errors.append(f"정답 파싱 실패: {correct_raw[:50]!r}") + correct = -1 + else: + correct = cc + + expl_raw = _extract_section_fence(md, "해설") + explanation = strip_outer_fence(expl_raw).strip() if expl_raw else None + + # 이미지 png 경로 + png_path: Optional[Path] = None + if file_qnum is not None: + candidate = file_path.parent / f"{file_qnum}.png" + if candidate.exists(): + png_path = candidate + + # 이미지 4 케이스 검증 + if image_marker and (png_path is None): + errors.append(f"이미지 마커 있는데 png 누락: {file_qnum}.png") + + return ParsedQuestion( + file_path=file_path, + exam_round=exam_round, + exam_question_number=final_qnum, + subject=subject_meta, + scope=scope, + source_note=source_note, + question_text=question_text, + choice_1=c1, + choice_2=c2, + choice_3=c3, + choice_4=c4, + correct_choice=correct, + explanation=explanation, + image_marker=image_marker, + image_description=image_desc, + png_path=png_path, + parse_errors=errors, + ) + + +# ─── HTTP client ─── + + +def _client() -> httpx.Client: + if not TOKEN: + print("ERROR: STUDY_IMPORT_TOKEN 환경변수 필요. /api/auth/login 으로 발급.", file=sys.stderr) + sys.exit(2) + return httpx.Client( + base_url=API_BASE, + headers={"Authorization": f"Bearer {TOKEN}"}, + timeout=30.0, + ) + + +def verify_token(c: httpx.Client) -> dict: + """GET /study-topics/{TOPIC_ID} 로 토큰 + 접근 권한 검사. 실패 시 exit.""" + r = c.get(f"/study-topics/{TOPIC_ID}") + if r.status_code == 200: + return r.json() + print(f"ERROR: 토큰/권한 검증 실패 ({r.status_code}): {r.text[:200]}", file=sys.stderr) + sys.exit(3) + + +def fetch_existing_for_conflict(c: httpx.Client, exam_round: str) -> dict[int, dict]: + """충돌 출력용 — qnum → 기존 행 메타. + + /study-topics/{tid}/questions 의 StudyQuestionSummary 에는 exam_question_number + 필드가 없어 통합뷰 detail (StudyTopicQuestionSummary, exam_question_number 포함) + 을 사용한다. PR-11 에서 추가됨. + """ + out: dict[int, dict] = {} + r = c.get(f"/study-topics/{TOPIC_ID}") + r.raise_for_status() + body = r.json() + for it in body.get("sections", {}).get("questions", []): + if it.get("exam_round") == exam_round and it.get("exam_question_number"): + out[int(it["exam_question_number"])] = { + "id": it["id"], + "subject": it.get("subject"), + "scope": it.get("scope"), + } + return out + + +def post_question(c: httpx.Client, p: ParsedQuestion) -> dict: + body = { + "question_text": p.question_text, + "choice_1": p.choice_1, + "choice_2": p.choice_2, + "choice_3": p.choice_3, + "choice_4": p.choice_4, + "correct_choice": p.correct_choice, + "subject": p.subject or None, + "scope": p.scope, + "exam_name": None, + "exam_round": p.exam_round, + "exam_question_number": p.exam_question_number, # 항상 명시 + "explanation": p.explanation, + "source_note": p.source_note, + "is_active": True, + } + r = c.post(f"/study-topics/{TOPIC_ID}/questions", json=body) + if r.status_code != 201: + raise RuntimeError(f"POST 실패 ({r.status_code}): {r.text[:300]}") + return r.json() + + +def post_image(c: httpx.Client, qid: int, png_path: Path) -> dict: + with png_path.open("rb") as f: + r = c.post( + f"/study-questions/{qid}/images", + files={"file": (png_path.name, f, "image/png")}, + ) + if r.status_code != 201: + raise RuntimeError(f"이미지 POST 실패 qid={qid} ({r.status_code}): {r.text[:300]}") + return r.json() + + +# ─── 리포트 ─── + + +def write_image_report(out_dir: Path, exam_round: str, items: list[ParsedQuestion]) -> Path: + out_dir.mkdir(parents=True, exist_ok=True) + safe_round = exam_round.replace("/", "_").replace(" ", "_") + out_path = out_dir / f"{safe_round}_image_required.md" + + classified: dict[str, list[ParsedQuestion]] = { + "attach_planned": [], "missing_png": [], "placeholder_skipped": [] + } + for p in items: + s = classify_image(p).state + if s in classified: + classified[s].append(p) + + lines: list[str] = [] + lines.append(f"# {exam_round} — 이미지 필요 문항 리포트\n") + + lines.append("## 사용자가 확인할 것\n") + n_missing = len(classified["missing_png"]) + n_placeholder = len(classified["placeholder_skipped"]) + n_attach = len(classified["attach_planned"]) + + if n_missing > 0: + lines.append(f"- **missing_png — {n_missing}건 ⚠** (이 항목이 있으면 apply 금지)") + for p in classified["missing_png"]: + lines.append(f" - {p.exam_question_number}번 / {p.subject} — {p.exam_question_number}.png 필요") + else: + lines.append("- missing_png — 0건") + + if n_placeholder > 0: + lines.append( + f"- **placeholder_skipped — {n_placeholder}건** " + "(마커 없는데 png 있음 — 실제 도식이면 md 첫 줄에 `**⚠ 이미지 별도 업로드 필요**` 마커 추가 검토)" + ) + for p in classified["placeholder_skipped"]: + lines.append(f" - {p.exam_question_number}번 / {p.subject}") + else: + lines.append("- placeholder_skipped — 0건") + + lines.append(f"- **attach_planned — {n_attach}건** (apply 시 자동 첨부 예정)") + lines.append("") + + lines.append("---\n") + + if n_attach > 0: + lines.append(f"## 첨부 예정 (attach_planned) — {n_attach}건\n") + for p in classified["attach_planned"]: + lines.append(f"### {p.exam_question_number}번 / {p.subject}{' / ' + p.scope if p.scope else ''}") + lines.append(f"- md: {p.file_path}") + lines.append(f"- png: {p.png_path}") + lines.append(f"- 설명: {p.image_description or '(없음)'}") + lines.append("- 상태: attach_planned (apply 시 자동 첨부)\n") + + if n_missing > 0: + lines.append(f"## 누락 (missing_png) — {n_missing}건 ⚠\n") + for p in classified["missing_png"]: + lines.append(f"### {p.exam_question_number}번 / {p.subject}{' / ' + p.scope if p.scope else ''}") + lines.append(f"- md: {p.file_path}") + lines.append(f"- png: MISSING ({p.exam_question_number}.png)") + lines.append(f"- 설명: {p.image_description or '(없음)'}") + lines.append("- 상태: missing_png (dry-run 실패. apply 금지)") + lines.append("- 처리: 이미지 파일 필요\n") + + if n_placeholder > 0: + lines.append(f"## OCR placeholder (참고) — {n_placeholder}건\n") + lines.append("마커는 없지만 png 가 존재 — OCR 원본일 가능성. 마커 누락 실수인지 검토.\n") + for p in classified["placeholder_skipped"]: + lines.append(f"### {p.exam_question_number}번 / {p.subject}") + lines.append(f"- md: {p.file_path}") + lines.append(f"- png: {p.png_path}") + lines.append("- 마커: 없음 — 첨부 안 함\n") + + out_path.write_text("\n".join(lines), encoding="utf-8") + return out_path + + +# ─── 메인 ─── + + +def discover_md_files(round_dir: Path) -> list[Path]: + """회차 폴더 안 모든 *.md 수집. 폴더 정렬 + 파일 번호 정렬.""" + out: list[Path] = [] + if not round_dir.is_dir(): + return out + for sub in sorted(round_dir.iterdir()): + if not sub.is_dir(): + continue + for f in sub.glob("*.md"): + out.append(f) + return sorted(out, key=lambda p: (p.parent.name, int(re.match(r"^(\d+)", p.name).group(1)) if re.match(r"^\d", p.name) else 9999)) + + +def cmd_run(round_dir: Path, apply: bool, skip_existing: bool, continue_on_error: bool) -> int: + print(f"[{'APPLY' if apply else 'DRY-RUN'}] 회차 폴더: {round_dir}\n") + md_files = discover_md_files(round_dir) + if not md_files: + print("md 파일 없음.", file=sys.stderr) + return 1 + print(f"발견 md: {len(md_files)}개\n") + + # 1차 — 파싱 + parsed: list[ParsedQuestion] = [] + parse_failed: list[ParsedQuestion] = [] + for f in md_files: + p = parse_md(f) + parsed.append(p) + if p.parse_errors: + parse_failed.append(p) + + # 회차명 (모든 파싱 결과의 exam_round 가 같아야 함) + rounds = {p.exam_round for p in parsed if p.exam_round} + if len(rounds) != 1: + print(f"회차명 불일치: {rounds}", file=sys.stderr) + return 1 + exam_round = next(iter(rounds)) + + # 분포 + 이미지 분류 + by_subject: dict[str, int] = {} + for p in parsed: + by_subject[p.subject] = by_subject.get(p.subject, 0) + 1 + print(f"회차: {exam_round}") + print(f"과목 분포: {', '.join(f'{k} {v}' for k, v in by_subject.items())}\n") + + # 이미지 4 케이스 + img_attach = [p for p in parsed if classify_image(p).state == "attach_planned"] + img_missing = [p for p in parsed if classify_image(p).state == "missing_png"] + img_placeholder = [p for p in parsed if classify_image(p).state == "placeholder_skipped"] + print(f"이미지 첨부 예정: {len(img_attach)}건 / 누락: {len(img_missing)}건 / placeholder: {len(img_placeholder)}건\n") + + # 리포트 항상 생성 + report_dir = Path(__file__).parent.parent / "import_reports" + report_path = write_image_report(report_dir, exam_round, parsed) + print(f"리포트 저장: {report_path}\n") + + # 파싱 실패 출력 + if parse_failed: + print(f"⚠ 파싱 실패: {len(parse_failed)}건") + for p in parse_failed: + print(f" {p.file_path}") + for e in p.parse_errors: + print(f" - {e}") + print() + + # 토큰 검사 + 충돌 검사 + with _client() as c: + verify_token(c) + existing = fetch_existing_for_conflict(c, exam_round) + + conflicts = [p for p in parsed if p.exam_question_number in existing] + if conflicts: + print(f"⚠ 서버 충돌: {len(conflicts)}건 (같은 회차+문항번호 이미 등록)") + for p in conflicts: + ex = existing[p.exam_question_number] + print(f" 충돌: {p.exam_round} {p.exam_question_number}번") + print(f" - 기존: id={ex['id']}, subject={ex['subject']}, scope={ex.get('scope')}") + print(f" - import: file={p.file_path}, subject={p.subject}, scope={p.scope}") + print() + + # Dry-run 종료 판정 + if not apply: + # dry-run 결과 — 통과/실패 판정만 출력 + print("─── DRY-RUN 결과 ───") + ok = ( + not parse_failed + and not img_missing + and (not conflicts or skip_existing) + ) + if ok: + target = [p for p in parsed if p.exam_question_number not in existing] if skip_existing else parsed + print(f"✓ apply 가능 — 등록 예정 {len(target)}건 (이미지 첨부 {sum(1 for p in target if classify_image(p).state == 'attach_planned')}건)") + else: + print("✗ apply 불가:") + if parse_failed: + print(f" - 파싱 실패 {len(parse_failed)}건 (md 수정 필요)") + if img_missing: + print(f" - 이미지 누락 {len(img_missing)}건 (png 추가 필요)") + if conflicts and not skip_existing: + print(f" - 서버 충돌 {len(conflicts)}건 (--skip-existing 으로 우회 가능)") + return 0 if ok else 1 + + # ─── APPLY ─── + if parse_failed and not continue_on_error: + print("✗ 파싱 실패 있음. apply 중단.", file=sys.stderr) + return 1 + if img_missing and not continue_on_error: + print("✗ 이미지 누락 있음. apply 중단.", file=sys.stderr) + return 1 + if conflicts and not skip_existing: + print("✗ 서버 충돌 있음. --skip-existing 옵션 필요.", file=sys.stderr) + return 1 + + target = [ + p for p in parsed + if p.exam_question_number not in existing + and not p.parse_errors + and classify_image(p).state != "missing_png" + ] + print(f"\n등록 시작: {len(target)}건\n") + + registered = 0 + failed_q: list[tuple[ParsedQuestion, str]] = [] + img_success = 0 + img_fail: list[tuple[int, str]] = [] + + with _client() as c: + for p in target: + try: + resp = post_question(c, p) + qid = resp["id"] + registered += 1 + print(f" ✓ {p.exam_question_number}번 등록 (qid={qid})") + + if classify_image(p).state == "attach_planned" and p.png_path is not None: + try: + post_image(c, qid, p.png_path) + img_success += 1 + print(f" + 이미지 첨부 OK ({p.png_path.name})") + except Exception as ie: + img_fail.append((qid, str(ie))) + print(f" ⚠ 이미지 첨부 실패 qid={qid}: {ie}", file=sys.stderr) + if not continue_on_error: + print( + f"\n abort. qid={qid} 까지 등록됨. " + f"실패한 png={p.png_path}. " + f"문제 수정 후 --skip-existing 으로 재실행 가능.", + file=sys.stderr, + ) + return 2 + except Exception as e: + failed_q.append((p, str(e))) + print(f" ✗ {p.exam_question_number}번 실패: {e}", file=sys.stderr) + if not continue_on_error: + print( + f"\n abort. 이전 {registered}건 등록됨. " + f"실패: {p.exam_round} {p.exam_question_number}번 ({p.file_path}). " + f"수정 후 --skip-existing 으로 재실행 가능.", + file=sys.stderr, + ) + return 2 + + print(f"\n─── APPLY 결과 ───") + print(f"등록: {registered} / 실패: {len(failed_q)}") + print(f"이미지 첨부: 성공 {img_success} / 실패 {len(img_fail)} / placeholder skip {len(img_placeholder)}") + print("임베딩 트리거 자동. 1분 후 ready 예상.") + return 0 + + +def main() -> None: + p = argparse.ArgumentParser() + p.add_argument("round_dir", help="회차 폴더 (예: ~/Desktop/가스기사/2019년 2회)") + p.add_argument("--apply", action="store_true", help="실제 import (기본은 dry-run)") + p.add_argument("--skip-existing", action="store_true", help="서버 충돌 문항 skip") + p.add_argument("--continue-on-error", action="store_true", help="한 문항 실패해도 다음 진행") + args = p.parse_args() + + round_dir = Path(args.round_dir).expanduser().resolve() + sys.exit(cmd_run(round_dir, apply=args.apply, skip_existing=args.skip_existing, continue_on_error=args.continue_on_error)) + + +if __name__ == "__main__": + main()