ir-search โ ์ง์์ฌ์
์ ์์กฐ์ฌ
์คํฌ๋ฆฝํธ ์์น: ํฌ๋กค๋ฌยท์ ํธ๋ฆฌํฐ๋ ํ๋ฌ๊ทธ์ธ ๋๋ ํ ๋ฆฌ ์๋ ${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/ ์ ์๋ค. ${CLAUDE_PLUGIN_ROOT}๊ฐ ๋ฏธ์ ์(๋จ๋
์คํฌ ์ค์น)๋ฉด ํด๋ฐฑ: ~/.claude/skills/ir-search/skills/ir-search/scripts/ (ํด๋์ ์ค์น) ๋๋ ์ด SKILL.md์ ๊ฐ์ ํด๋์ scripts/. ์๋ ์ฝ๋ ๋ธ๋ก์ ${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/ ๋ถ๋ถ์ ์ค์ ํ์ธ๋ ๊ฒฝ๋ก๋ก ์นํํด ์คํํ๋ค.
์ ๋ถ ์ง์์ฌ์
ํ์์ 3๋ ์คํจ ์์ธ์ ๊ตฌ์กฐ์ ์ผ๋ก ๋ง๋ ์คํฌ์ด๋ค:
- ํค์๋ ๊ฒ์์ ์ฌ๊ฐ์ง๋ โ "AI"๋ก ๊ฒ์ํ๋ฉด ๋ณํ ์ง์์ด ๊ฐ๋ฅํ ์ฝํ
์ธ ยท์ฌํ์๋น์คยท์์ ์ตํฉ ์ฌ์
์ ๋์น๋ค. โ ๋ชจ์ง์ค ๊ณต๊ณ ์ ์(ๅ
จๆธ) ์์ง ํ ์ ๋ชฉ ์ ์ฒด๋ฅผ ์ง์ ๊ฒํ ํ๋ค.
- ์๊ฒฉ์๊ฑด ์คํ โ ์ ๋ชฉ๋ง ๋ณด๊ณ ์ง์ํ๋ค๊ฐ "์๋น์ฐฝ์
์ ๋ถ๊ฐ", "์ง์ญ ์ ํ"์ผ๋ก ํ๋ฝํ๋ค. โ ํ๋ณด๋ ๋ฐ๋์ ์์ธ๊ณต๊ณ ์๋ฌธ์์ ์ ์ฒญ๋์ยท์ง์ญ์ ํ์ ๊ฒ์ฆํ๋ค.
- ์ถ์ ๋ณด๊ณ โ "์๋ง ๋ ๊ฒ"์ด๋ผ๋ ๊ฒฐ๋ก ์ ๋ฐฉํฅ์ ๋ง์น๋ค. โ ๊ณต๊ณ ํ
์คํธ์ ์๋ ๊ฒ์ '๋ถ๋ช
'์ผ๋ก ํ๊ธฐํ๊ณ ์ ์๊ธฐ๊ด ์ ์ ํ์ธ์ ๊ถ๊ณ ํ๋ค.
์ํฌํ๋ก
0๋จ๊ณ โ ์ ์ฒญ์(์์ดํ
) ํ๋กํ ๊ตฌ์ถ
๋จผ์ ํ๋ก์ ํธ ํด๋์์ ir-search-profile.md๋ฅผ ์ฐพ๋๋ค. ์์ผ๋ฉด ๋ด์ฉ์ ์์ฝํด ๋ณด์ฌ์ฃผ๊ณ "๋ฐ๋ ๊ฒ ์๋์?" ํ ๋ฒ๋ง ํ์ธํ ๋ค ๋ฐ๋ก 1๋จ๊ณ๋ก ๊ฐ๋ค โ ๊ฐ์ ์ง๋ฌธ์ ์กฐ์ฌ ๋๋ง๋ค ๋ฐ๋ณตํ๋ ๊ฒ์ด ์ด ์คํฌ์ ๊ฐ์ฅ ํฐ ๋ง์ฐฐ์ด๋ฏ๋ก, ํ๋กํ์ด ์์ผ๋ฉด ์๋ ์ง๋ฌธ์ ์๋ตํ๋ค.
์์ผ๋ฉด ํ์ฌ ์์
ํด๋์์ ํ๋ก์ ํธ ์ ๋ณด๋ฅผ ์์งํ๋ค: CLAUDE.md, README, docs/, ๋ฉ๋ชจ๋ฆฌ(์๋ค๋ฉด). ๊ทธ๋๋ ๋น๋ ํญ๋ชฉ์ ์ฌ์ฉ์์๊ฒ ํ ๋ฒ์ ๋ฌป๋๋ค (์ฌ๋ฌ ๋ฒ ๋๋ ๋ฌป์ง ์๋๋ค):
- ์ฐฝ์
๋จ๊ณ: ์๋น์ฐฝ์
์(์ฌ์
์ ๋ฏธ๋ฑ๋ก) / ๊ฐ์ธ์ฌ์
์ / ๋ฒ์ธ + ์
๋ ฅ โ ๊ฐ์ฅ ๋ง์ ์ฌ์
์ ๊ฐ๋ฅด๋ ์ถ
- ์ง์ญ ์ฐ๊ณ : ํ์ฌ ์์ฌ์ง, ์ด์ ๊ฐ๋ฅ ์ง์ญ โ ์ง์ญ ์ ํ ์ฌ์
ํ์ ๊ณผ "๋น์๋๊ถ" ์๊ฑด(ํ๋ฆฌํ์ค ๋ฑ)์ ํ์
- ๋ํ์ ํน์ฑ: ์ฐ๋ น๋(์ฒญ๋
๋ง39์ธ ์ดํ / ์ค์ฅ๋
๋ง40์ธ ์ด์), ์ฑ๋ณ(์ฌ์ฑ ํนํ ์ฌ์
), ์์(๋ํยท์ถ์ฐ์ฐ ์ฌ์ง ์ฌ๋ถ)
- ํ์ํ ๊ฒ: ์ฌ์
ํ ์๊ธ / ์
์ฃผ๊ณต๊ฐ / R&D / ๋ฉํ ๋งยท์ปจ์คํ
/ ๊ธ๋ก๋ฒ / ์ธํ๋ผ(GPUยท์ฅ๋น) โ ๋ณต์ ์ ํ
- ์์ดํ
ํ ์ค ์์ฝ: ๊ธฐ์ ยท์
์ข
(๋ณํ ํ๋ ์ด๋ฐ ํ๋จ์ ์ฌ๋ฃ)
์ด๋ฏธ ๋ํ๋ ํด๋์์ ํ์
๋ ํญ๋ชฉ์ ๋ค์ ๋ฌป์ง ์๋๋ค.
ํ๋กํ ํ์ ํ ํ๋ก์ ํธ ํด๋์ ir-search-profile.md๋ก ์ ์ฅํ๋ค (๊ธฐ์กด ํ์ผ์ด ์์ผ๋ฉด ๊ฐฑ์ ). ํ์:
# ir-search ํ๋กํ
- ๋์: <ํ๋ก์ ํธ๋ช
(์์ดํ
ํ ์ค)>
- ์ฐฝ์
๋จ๊ณ: <์๋น์ฐฝ์
์ / ๊ฐ์ธ์ฌ์
์ / ๋ฒ์ธ N๋
์ฐจ>
- ์ง์ญ ์ฐ๊ณ : <์์ฌ์ง (์ด์ ๊ฐ๋ฅ: ...)>
- ๋ํ์: <์ฐ๋ น๋ / ์ฑ๋ณ / ์์>
- ํ์ํ ๊ฒ: <์๊ธ, ๊ณต๊ฐ, R&D, ...>
- ๋ง์ง๋ง ์กฐ์ฌ: <๋ณด๊ณ ์ ํด๋ ๊ฒฝ๋ก> (<YYYY-MM-DD>)
๋ง์ง๋ง ์กฐ์ฌ ์ค์ ๋งค ์กฐ์ฌ ์๋ฃ ์ ๊ฐฑ์ ํ๋ค โ ์ฌ์กฐ์ฌ(diff ๋ชจ๋)๊ฐ ์ด ๊ฒฝ๋ก๋ก ์ง์ ๊ฒฐ๊ณผ๋ฅผ ์ฐพ๋๋ค. ์ด ํ์ผ์ ๋ก์ปฌ ํ๋ก์ ํธ ํด๋์๋ง ์ ์ฅ๋๋ฉฐ, ํ๋กํ ์ถ ์ธ์ ๊ฐ์ธ์ ๋ณด๋ ๋ฃ์ง ์๋๋ค.
0.5๋จ๊ณ โ ์กฐ์ฌ ๋ฒ์ ๋ช
์ ์ ํ
์ค์ ์์ง ์ ์ ๋ฒ์ ๊ณํ๊ธฐ๋ฅผ ์คํํด ์ฌ์ฉ์ ์ ํ๊ณผ ์ปค๋ฒ๋ฆฌ์ง ํ๊ณ๋ฅผ ๊ณ ์ ํ๋ค. ๊ณํ๊ธฐ๋
Python ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ง ์ฌ์ฉํ๊ณ ๋คํธ์ํฌยทLLM์ ํธ์ถํ์ง ์์ผ๋ฏ๋ก ๋ชจ๋ธ ํ ํฐ์ 0์ด๋ค.
# ๋น ๋ฅธ ํ์ธ: K-Startup๋ง
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
--preset quick -o scope-plan.json
# ํน์ ์์ค ํ๋๋ง
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
--preset focused --source kstartup -o scope-plan.json
# ํ๋กํ ๊ธฐ๋ฐ ๊ถ์ฅ ๋ฒ์
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
--preset recommended --need ai --need rnd --province ์์ธ -o scope-plan.json
# ์ฌ์ฉ์๊ฐ ์ง์ ๊ณ ๋ฅธ ๋ฒ์ (ํ๋ณด ์์ค๋ ์๋ํํ์ง ์๊ณ manual๋ก ๋จ์)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/scope_plan.py" \
--preset custom --source kstartup --source iris -o scope-plan.json
ํ๋ฆฌ์
์๋ฏธ:
quick: K-Startup๋ง. ๋น ๋ฅธ ํ์ธ์ด์ง ์ ์ฒด ์กฐ์ฌ๊ฐ ์๋๋ค
focused: ์ฌ์ฉ์๊ฐ ์ง๋ชฉํ ์์ค ์ ํํ ํ๋
recommended: K-Startupยท๊ธฐ์
๋ง๋น + ํ๋กํ ํ๊ทธ์ ๋ง๋ ๊ฒ์ฆ๋ ์ด๋ํฐ
all_registered: ํ์ฌ ์ ์ฅ์์ ๊ฒ์ฆ๋ ์๋ ์ด๋ํฐ 5๊ฐ ์ ์ฒด. ์ธํฐ๋ท ์ ์ฒด๊ฐ ์๋๋ค
all_known: ๋ฑ๋ก ์ด๋ํฐ์ ์๋ ค์ง ๊ณต์ ํ๋ณด ์ ์ฒด. ํ๋ณด๋ ๋ชจ๋ ์๋ ํ์ธ์ผ๋ก ๋จ๋๋ค
custom: ์ฌ์ฉ์๊ฐ ๋ช
์ํ ์์ค ์กฐํฉ. ๋ฏธ๊ฒ์ฆ ํ๋ณด๋ candidate/manual
scope-plan.json์ ๋ชจ๋ ์์ค ์ํ(selected / omitted_by_user / not_applicable,
automated / manual)์ ์์ฒญ ์ยท์๊ฐ ์ถ์ ์ ๋จผ์ ๋ณด์ฌ์ค๋ค. ๋ณด๊ณ ์์๋
scope_fingerprint์ "์ ํ ๋ฒ์ ๊ธฐ์ค" ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ๊ธฐ๋กํ๋ค. ์ฌ์กฐ์ฌ๋ ์ง์ ๊ณผ fingerprint๊ฐ
๊ฐ์ ๋๋ง GONEยทUNCHANGED ์น๊ณ๋ฅผ ํ์ฉํ๋ค. fingerprint๊ฐ ๋ค๋ฅด๋ฉด ์์ค ์ ์ธ๋ฅผ GONE์ผ๋ก
์คํํ์ง ๋ง๊ณ ๋ฒ์ ๋ณ๊ฒฝ์ผ๋ก ํ์ํด ์ ์ฒด ์ฌํ์ ํ๋ค. ํ๋ณดยท์๋ ์ถ์ฒ ๋ชฉ๋ก๊ณผ ๋ฑ๋ก ์กฐ๊ฑด์
references/sources.md๋ฅผ ๋ฐ๋ฅธ๋ค.
์ฌ์กฐ์ฌ โ diff ๋ชจ๋
ํ๋กํ์ ๋ง์ง๋ง ์กฐ์ฌ ํด๋๊ฐ ์กด์ฌํ๋ฉด (๋๋ ์ฌ์ฉ์๊ฐ ์ด์ ๋ณด๊ณ ์ ํด๋๋ฅผ ์ง๋ชฉํ๋ฉด) ์ ์ ์ฌ๊ฒํ ๋์ ์ฆ๋ถ ์กฐ์ฌ๋ฅผ ํ๋ค. ์ง์์ฌ์
์กฐ์ฌ๋ 2~4์ฃผ๋ง๋ค ๋ฐ๋ณตํ๋ ์ผ์ด๊ณ , ๋งค๋ฒ 250๊ฑด+๋ฅผ ๋ค์ ์ฝ๋ ๊ฒ์ ๋ญ๋น๋ค:
- 1๋จ๊ณ ํฌ๋กค๋ง์ ์ง์ ๊ณผ ๊ฐ์ ์์ค ๊ตฌ์ฑ์ผ๋ก ๊ทธ๋๋ก ์คํํ๋ค (์์ค๋ฅผ ๋นผ๋ฉด diff๊ฐ ๊ทธ ์์ค๋ฅผ ๋น๊ต ๋ชป ํ๊ณ , ์ ์์ค๋ ์ ์ ๊ฒํ ๋์์ด ๋๋ค)
- ์ ๋ณด๊ณ ์ ํด๋์ jsonl ์ ์ฅ ํ ๋น๊ต โ ํ๋กํ ์ค๋
์ท์ด ์์ผ๋ฉด ๋ฐ๋์ ํจ๊ป ๋๊ธด๋ค:
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/diff_surveys.py" <์ง์ _ํด๋> <์_ํด๋> --out new_items.jsonl \
--old-profile <์ง์ _ํด๋>/ir-profile-snapshot.md --new-profile ir-search-profile.md
- ๊ฒํ ยท์์ธ๊ฒ์ฆ์
new_items.jsonl(์ ๊ท + ๋ณ๊ฒฝ + NEEDS_REHASH + ์ ์์ค๋ถ)๋ง ํ๋ค. UNCHANGED ํญ๋ชฉ์ ์ง์ ๋ณด๊ณ ์์ A/B/C ํ์ ์ ๊ทธ๋๋ก ์น๊ณํ๊ณ ์ฌ๊ฒ์ฆํ์ง ์๋๋ค. --out ํ์ผ์ sole-search์ ๊ณตํต์ธ wrapper ํ์์ด๋ค โ ํ ์ค์ {"kind": NEW|CHANGED|NEEDS_REHASH, "diff_status": kind์ ๋์ผ, "changed_fields": [...], "record": {์๋ณธ ๋ ์ฝ๋ + source/source_id ์ ๊ทํ}} (references/diff_record_schema.json ๊ณ์ฝ). NEEDS_REHASH(์ง์ ์ content_hash๊ฐ ์์๋๋ฐ ์ ์กฐ์ฌ์ ์์)๋ ์์ธ ์ฌ์์ง(--merge-into) ํ ์ฌ๋ถ๋ฅํ๋ค. ์๋ฉธ ๊ณต๊ณ ๋ --out์ด ์๋๋ผ ์์ gone_new_items.jsonl(kind GONE)์ ๊ธฐ๋ก๋๋ค โ ๊ธฐํ ์๋ฉธ ์๋ฆผ ์ฌ๋ฃ
- ์์ธ ๊ฒ์ฆ(
--merge-into)์ ๊ฑฐ์น ๋ ์ฝ๋๋ content_hash๋ก๋ ๋น๊ต๋๋ค: ๋ชฉ๋ก ํ๋๊ฐ ๊ทธ๋๋ก์ฌ๋ ๋ณธ๋ฌธ(ํด์)์ด ๋ฐ๋๋ฉด CHANGED๋ค. ๋ ์กฐ์ฌ์ hash_version์ด ๋ค๋ฅด๋ฉด(v2โv3 ์ฐ์ ์ ํ โ ๊ฐ ๋น๊ต ๋ถ๊ฐ) **1ํ CHANGED(์์ธ ์ฌ๊ฒ์ฆ)**๋ก ํก์ํ๋ค
- ํ๋กํ์ ํ์ ์ถ(์ฐฝ์
๋จ๊ณยท์ง์ญยท์ฐ๋ น ๋ฑ)์ด ๋ฐ๋์์ผ๋ฉด UNCHANGED ์น๊ณ ๊ธ์ง โ ์ ์ ์ฌ๊ฒํ ํ๋ค. diff ์คํฌ๋ฆฝํธ๊ฐ fingerprint๋ก ์ด๋ฅผ ๊ฒ์ฆํ๋ฉฐ, ํ๋กํ ์ธ์๋ฅผ ํ์ชฝ๋ง ์คฌ๊ฑฐ๋ fingerprint๊ฐ ๋ค๋ฅด๋ฉด "CARRY-OVER INVALIDATED"๋ฅผ ์ถ๋ ฅํ๊ณ ์ ๊ฑด์
--out์ ๊ธฐ๋กํ๋ค
- CHANGED(์ ๋ชฉยท๊ธฐ๊ฐยท์ํ ๋ณ๊ฒฝ)๋ changed_fields๋ฅผ ๋ณด๊ณ ํ๋จ: ๋ง๊ฐ์ผ๋ง ์ฐ์ฅ์ด๋ฉด ํ์ ์ ์ง + ๋ง๊ฐ์ผ ๊ฐฑ์ , ๋จ ์ด์ A๊ทธ๋ฃน ๊ฑด์ด๋ฉด ์์ธ๋ฅผ ์ฌํ์ธ (์ฐ์ฅ ๊ณต๊ณ ๋ ์๊ฒฉ์๊ฑด ๋ณ๊ฒฝ์ด ๋๋ฐ๋๊ธฐ๋ ํ๋ค)
- ๋ณด๊ณ ์๋ ์ฆ๋ถ ๊ตฌ์กฐ๋ก: ์ ๊ท ๊ณต๊ณ (A/B/C ๋ถ๋ฅ) / ๋ณ๊ฒฝ (changed_fields ๋ช
์) / ์ข
๋ฃ๋ ๊ณต๊ณ ์ค ์ง์ A๊ทธ๋ฃน์ด๋ ๊ฒ (๊ธฐํ ์๋ฉธ ์๋ฆผ) / ์น๊ณ ์์ฝ (์ง์ A๊ทธ๋ฃน ํํฉ + ๋จ์ ๋ง๊ฐ). ์ง์ ๋ณด๊ณ ์ ๊ฒฝ๋ก๋ฅผ ์๋จ์ ๋งํฌํ๋ค
- ์กฐ์ฌ ์๋ฃ ์ ์ฌ์ฉํ ํ๋กํ ์ฌ๋ณธ์ ๋ณด๊ณ ์ ํด๋์
ir-profile-snapshot.md๋ก ์ ์ฅํ๋ค โ ๋ค์ diff์ --old-profile ์
๋ ฅ์ด ๋๋ค
diff ์คํฌ๋ฆฝํธ๊ฐ ์ถ๋ ฅํ๋ WARNING(์ฌํฌ๋กค ์ ๋ ์์ค)์ด ์์ผ๋ฉด ๊ทธ ์์ค๋ "๋ฏธ๊ฐฑ์ "์ผ๋ก ๋ณด๊ณ ์์ ๋ช
์ํ๋ค โ ์กฐ์ฉํ ๋น ๋จ๋ฆฌ์ง ์๋๋ค.
1๋จ๊ณ โ ์ ์ ์์ง (๋ค์ค ์์ค)
๋ ๊ฐ์ ๊ฒ์ฆ๋ ํฌ๋กค๋ฌ๊ฐ ๋๋ด๋์ด ์๋ค:
# ๊ธฐ๋ณธ: K-Startup ๋ชจ์ง์ค ์ ์ (์ฐฝ์
์ง์ ์ค์ฌ, 250~300๊ฑด, 1~2๋ถ)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/kstartup_crawl.py" list -o kstartup_all.jsonl
# ๋ณด๊ฐ: ๊ธฐ์
๋ง๋นยทNIPAยทKOCCAยทSMTECH (ํ๋กํ์ ๋ฐ๋ผ ์ ํ)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" list bizinfo -o bizinfo.jsonl --max-pages 20
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" list all -o sources_all.jsonl
K-Startup ๊ณต์ API ์ฐ์ (data.go.kr ํค๊ฐ ์์ผ๋ฉด): kstartup_crawl.py list๋ data.go.kr ์๋น์คํค๊ฐ ์์ผ๋ฉด ๊ณต์ ์คํAPI(K-Startup ์ฌ์
๊ณต๊ณ , ๋ฐ์ดํฐ์
15125364)๋ก ๋ชจ์ง์ค ๊ณต๊ณ ๋ฅผ ๋ฐ๊ณ , ํค๊ฐ ์๊ฑฐ๋ API๊ฐ ์คํจ/์๋ต ์ด์/์ปค๋ฒ๋ฆฌ์ง ๋ถ์กฑ์ด๋ฉด ์๋์ผ๋ก ๊ณต๊ฐ ํ์ด์ง ํฌ๋กค๋ก ํด๋ฐฑํ๋ค. ์ถ๋ ฅ jsonl ์คํค๋งยทrun_manifest.json์ ๋ ๊ฒฝ๋ก๊ฐ ๋์ผํ๋ค. ์ปค๋ฒ๋ฆฌ์ง ์ ์ง์ฑ: ์ด ๋ฐ์ดํฐ์
์ ๋ฑ๋ก์(์ต์ ์ฐ์ )์ด๊ณ ๋ชจ์ง์ค ๊ณต๊ณ ๊ฐ ๋ง๊ฐ ์ด๋ ฅ ์ฌ์ด์ ๋ถ์ฐ๋ผ ์์ด, API๋ ์ต์ ์ฐ์ ์ค์บ์ผ๋ก ๋ชจ์ง์ค ์งํฉ์ ๋ชจ์๋ค โ ๋ฐ์ดํฐ์
๋๊น์ง ์ค์บํด totalCount๋ก ์์ง์ ์ฆ๋ช
ํ๋ฉด manifest stop_reason: "api"ยทstatus okยทexit 0(์ ์ ์ฆ๋ช
), ์ต์ ์ฐ์ ๋ฌด๋ง๊ฐ ํ์ด์ง ์ฐ์์ผ๋ก ์กฐ๊ธฐ ์ข
๋ฃํ๋ฉด stop_reason: "api-window"ยทstatus partialยทexit 2๋ก ์ ์งํ๊ฒ ๋จ๊ธด๋ค(์ต๊ทผ ์ฐฝ(window) ์ปค๋ฒ๋ฆฌ์ง, ์ ์ ์ฆ๋ช
์๋ โ ๊ธฐ์กด exit ๊ณ์ฝ๊ณผ ์ผ์น). api-window์ผ ๋๋ ๋ค๋ฆ๊ฒ ์ฌ์ฐ์ฅ๋ ์ค๋๋ ๊ณต๊ณ ๊ฐ ๋๋ฝ๋ ์ ์์ผ๋ฏ๋ก ์ ์ ๋ณด์ฆ์ ํฌ๋กค์ด ๊ถ์์ด๋ฉฐ, diff ๋ชจ๋๋ partial(api-window) ์คํ์์ GONE(์๋ฉธ)์ ๋จ์ ํ์ง ์๋๋ค. reported_total์ ์ ์ฒด ์ด๋ ฅ ๊ฑด์๋ค. 401/403ยท200 ์์ฅ ์ฐจ๋จ(CAPTCHA)์ ํฌ๋กค๋ก ์ฐํํ์ง ์๊ณ **์๋ ์ ํ(exit 3)**ํ๋ค. ํค๋ DATA_GO_KR_KEY ํ๊ฒฝ๋ณ์ โ ๋ฆฌํฌ ๋ฃจํธ .env โ ~/.config/ir-search/data_go_kr_key ์์ผ๋ก ํ์ํ๊ณ ๋ก๊ทธยท์๋ฌยท๋ช
๋ นํ์ ์ ๋ ์ถ๋ ฅํ์ง ์๋๋ค(๋ฆฌ๋ค์ด๋ ํธยทURL ์ธ์ฝ๋ฉ ๋ณํ๊น์ง ๋ง์คํน, apis.data.go.kr ํธ์คํธ ๊ฒ์ฆ, ์๋ ๋ฆฌ๋ค์ด๋ ํธ ์ฐจ๋จ). ํค ๋ฐ๊ธ: data.go.kr/data/15125364/openapi.do์์ ํ์ฉ์ ์ฒญ โ ์๋น์คํค ํ์ธ(๊ฐ์ ํค๋ฅผ bizinfoยทgov24 ๋ฑ ๋ค๋ฅธ data.go.kr API์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅ). .env๋ gitignore๋ก ์ปค๋ฐ๋์ง ์๋๋ค.
ํฌ๋กค๋ฌ ์ข
๋ฃ์ฝ๋ ๊ณ์ฝ: 0 = ์ ์ฒด ์์ง ์ฑ๊ณต / 2 = partial(๋คํธ์ํฌ ์ค๋ฅยท๊ตฌ์กฐ ๋ณ๊ฒฝยทํ์ด์ง ์บกยท์์ค ์ผ๋ถ ์คํจ). exit 2๋ฉด partial์ด๋ค โ ์ ๋ "0๊ฑด์ด์ง๋ง ์ฑ๊ณต"์ผ๋ก ์ทจ๊ธํ์ง ์๋๋ค. jsonl์ partial์ด์ด๋ ์์ง๋ถ๊น์ง๋ ์ ์ฅ๋ผ ์๋ค.
์ปค๋ฒ๋ฆฌ์ง ๊ธฐ๋ก โ run_manifest.json ๊ธฐ์ค: ๋ ํฌ๋กค๋ฌ ๋ชจ๋ list ์คํ์ด ๋๋๋ฉด(์ฑ๊ณตยทpartial ๋ชจ๋) ์ถ๋ ฅ jsonl ์์ run_manifest.json(schema v1)์ ์์์ ์ผ๋ก ๊ธฐ๋กํ๋ค. ์์ค๋ณ run ํญ๋ชฉ์ status(ok/partial)ยทexit_codeยทpages_fetchedยทcollectedยทduplicatesยทstop_reasonยทerrors๊ฐ ๋ค์ด ์๊ณ , ๊ฐ์ ํด๋์ ์ฌ๋ฌ ์์ค๋ฅผ ์์งํ๋ฉด(all ๋ชจ๋ ํฌํจ) ์์ค๋ณ ํญ๋ชฉ์ด ํ ํ์ผ์ ๋์ ๋๋ค(๊ฐ์ ์์ค๋ ์ต์ ์ผ๋ก ๊ต์ฒด). ๋ณด๊ณ ์์ ์ปค๋ฒ๋ฆฌ์ง(ํ๊ณ ๊ณ ์ง)๋ stderr ๋ฉ์์ง๊ฐ ์๋๋ผ ์ด ํ์ผ์ ์ฝ์ด ์์ฑํ๋ค โ ์ด๋ค ์์ค๊ฐ ๋ช ํ์ด์ง๊น์งยท๋ช ๊ฑด ์์ง๋๊ณ ์ ๋ฉ์ท๋์ง(stop_reasonยทerrors)๋ฅผ ๊ทธ๋๋ก ์ฎ๊ธด๋ค. status๊ฐ partial์ธ ์์ค๋ "๋ฏธ์ ์์ง"์ผ๋ก ๋ช
์ํ๋ค. manifest์๋ ์นด์ดํธยท์ํ๋ง ์๊ณ ๊ฒ์์ดยทํ๋กํยท๊ณต๊ณ ๋ณธ๋ฌธ์ ๋ฃ์ง ์๋๋ค.
์์ค ์ ํ ๋งคํธ๋ฆญ์ค โ ํ๋กํ์์ ๋์ถํ ํ์์ ๋ฐ๋ผ K-Startup์ ์ถ๊ฐํ๋ค:
| ํ๋กํ/ํ์ | ์ถ๊ฐ ์์ค | ์ด์ |
|---|
| ์ปค๋ฒ๋ฆฌ์ง ์ต๋ํ, ์ง์์ฒดยท์ ๋ถ์ฒ | bizinfo (๊ธฐ์
๋ง๋น) | ์ต๋ ํตํฉ ํฌํธ. K-Startup์ ์๋ ๊ณต๊ณ ๋ค์ |
| AI/ICT/SW ์์ดํ
| nipa | AI ๋ฐ์ฐ์ฒยทAI ์ตํฉ ๋ฑ ๋ํ ์ฌ์
|
| ์ฝํ
์ธ ์ต๊ธ (๋ณํ ํฌํจ) | kocca | ์ ์์ง์ยท์ฝํ
์ธ ์คํํธ์
|
| R&D ์๊ธ (๋ฒ์ธ) | smtech | ์ค๊ธฐ๋ถ ๊ธฐ์ ๊ฐ๋ฐ(๋๋ค๋ ๋ฑ) ์ ์ฉ ์ ์์ฒ |
์ฌ์ฉ์๊ฐ "์ ๋ถ ๋ค", "๋น ์ง์์ด"๋ฅผ ์๊ตฌํ๋ฉด all์ ์ด๋ค. ์์ค๋ณ ํน์ฑ๊ณผ ํจ์ ์ ${CLAUDE_PLUGIN_ROOT}/skills/ir-search/references/sources.md ์ฐธ์กฐ.
๊ต์ฐจ ์์ค ์ค๋ณต ์ฃผ์: ๊ฐ์ ์ฌ์
์ด K-Startup๊ณผ ๊ธฐ์
๋ง๋น์ ๋์ ๊ฒ์ฌ๋๋ ๊ฒฝ์ฐ๊ฐ ํํ๋ค. ์ ๋ชฉ ์ ์ฌ๋๋ก ์ค๋ณต์ ์ ๊ณ , ๋ณด๊ณ ์์๋ ์์ค๋ฅผ ๋ณ๊ธฐํ๋ค.
๊ธฐ์
๋ง๋น ์ฃผ์: ๊ณต๊ณ ๋์ด ๋ง๊ณ (๋ชจ์ง์ค 1,000๊ฑด ์ด์) ๋ง๊ฐ ์๋ฐ~์ง๋ ๊ฒ์ด ์์ฌ ๋์จ๋ค. ๋ ๋ชจ๋๋ฅผ ๊ตฌ๋ถํด ์ด๋ค โ ์ ์ ๋ชจ๋: --max-pages๋ฅผ ํ๋(~96p, 15๊ฑด/p)ํด ๋ชจ์ง์ค ์ ์ฒด๋ฅผ ์์ง. ์ต๊ทผ๋ถ ๋ชจ๋: ๊ธฐ๋ณธ --max-pages 20์ ์ต๊ทผ ๋ฑ๋ก๋ถ๋ง์ด๋ฉฐ ์ ์๊ฐ ์๋๋ค โ ์ด ๊ฒฝ์ฐ ๋ณด๊ณ ์์ ๋ฐ๋์ "๊ธฐ์
๋ง๋น์ ์ต๊ทผ ๋ฑ๋ก๋ถ N๊ฑด ๊ธฐ์ค"์ด๋ผ๊ณ ๋ช
์ํ๋ค. ์ด๋ ๋ชจ๋๋ ๋ง๊ฐ์ผ ํํฐ๋ฅผ ๋ฐ๋์ ์ ์ฉํ๋ค.
2๋จ๊ณ โ ์ ์ ๊ฒํ โ ํ๋ณด ์ ๋ณ
์์ง๋ ์ ์ฒด ๋ชฉ๋ก์ ์ ๋ชฉยท์นดํ
๊ณ ๋ฆฌยท๊ธฐ๊ดยท๋ง๊ฐ์ผ์ ์ง์ ์ฝ๊ณ ํ๋ณด๋ฅผ ๋ฝ๋๋ค. grep ํํฐ๋ง์ผ๋ก ๋์ฒดํ์ง ์๋๋ค โ ๋ณํ ๊ฐ๋ฅ์ฑ(์: TTS ๊ธฐ์
์๊ฒ ์ฝํ
์ธ ์ ์์ง์, ์์ ร๊ธฐ์ ์
์ฃผ์ฌ์
)์ ํค์๋๋ก ์กํ์ง ์๋๋ค.
์ ๋ณ ๊ธฐ์ค:
- ํ๋กํ์ "ํ์ํ ๊ฒ"๊ณผ ์ผ์น (์๊ธ/๊ณต๊ฐ/R&D/...)
- ์ง์ญ: ์ ๊ตญ + ์ฐ๊ณ ์ง์ญ + ์ด์ ๊ณ ๋ ค ์ง์ญ
- ๋ง๊ฐ์ผ์ด ์ง๋์ง ์์ ๊ฒ (D-day ์ฃผ์: ๋ง๊ฐ 1~2์ผ ์ ๊ณต๊ณ ๋ ๋ฐ๋์ ํฌํจํ๊ณ ๋ณด๊ณ ์์์ "์๋ฐ" ํ๊ธฐ)
- ๋ณํ ์ง์ ๊ฐ๋ฅ์ฑ์ด ๋ณด์ด๋ ๊ฒ โ ์์ดํ
์ ๊ธฐ์ ์ ๋ค๋ฅธ ๋ถ์ผ ์ธ์ด๋ก ์ฌ์์ ํ๋ฉด ๋์์ด ๋๋ ์ฌ์
(์ฌํ์๋น์ค, ์ฝํ
์ธ , ์์ , ์ง์ญํนํ ๋ฑ)
ํต์ 250๊ฑด ์ค 25~40๊ฑด์ด ํ๋ณด๋ก ๋จ๋๋ค.
3๋จ๊ณ โ ์์ธ ๊ฒ์ฆ
ํ๋ณด ์ ๊ฑด์ ์์ธ๊ณต๊ณ ๋ฅผ ๊ฐ์ ธ์ ์๊ฒฉ์๊ฑด์ ์๋ฌธ ํ์ธํ๋ค:
# K-Startup ๊ณต๊ณ (๊ณต๊ณ ๋ฒํธ๋ก)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/kstartup_crawl.py" detail <pbancSn> <pbancSn> ... -o details/
# ๊ทธ ์ธ ์์ค ๊ณต๊ณ (jsonl์ url๋ก)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" detail <url> <url> ... -o details/
์ฒจ๋ถ ๋ค์ด๋ก๋ (--download-dir) โ ๋ณธ๋ฌธ์ด ์ฒจ๋ถํ์ผ(HWP/PDF)์๋ง ์๋ ๊ณต๊ณ ๋ฅผ ๊ฒ์ฆํ ๋ ์ด๋ค. ์์ค๋ณ ์ง์ ์ฌ๋ถ (robotsยท๊ณ์ฝ ์ค์ธก ๊ทผ๊ฑฐ๋ references/sources.md "์ฒจ๋ถ ๋ค์ด๋ก๋ ๊ณ์ฝ" ํ):
| ์์ค | ์ฒจ๋ถ ์ง์ | ๋น๊ณ |
|---|
| ๊ธฐ์
๋ง๋น (bizinfo) | ๋ค์ด๋ก๋ | /uploads/โฆ๋ง robots ๋ถํ โ ๋งํฌ๋ง(skipped_robots) |
| NIPA | ๋ค์ด๋ก๋ | robots ์ ํ ์์ (2026-07-24) |
| SMTECH | ๋ค์ด๋ก๋ | /front/comn/AtchFileDownload.do (2026-07-24) |
| KOCCA | ๋ถ๋ถ | ํ์
1(๊ณต๊ณ ๊ด๋ จ์๋ฃ) ๋ค์ด๋ก๋ / ํ์
2(pms.kocca.kr)๋ ๊ณ์ฝ ๋ฏธํ์ โ ๋งํฌ๋ง(skipped_unverified) |
| K-Startup | ๋งํฌ๋ง | ์ฒจ๋ถ ๊ฒฝ๋ก /afile/โฆ ์ ์ฒด๊ฐ robots ๋ถํ (2026-07-23) |
# bizinfo/NIPA/KOCCA/SMTECH: ์ฒจ๋ถ ๋ค์ด๋ก๋ + ๋ชฉ๋ก jsonl์ ํด์ยท์ฒจ๋ถ ๋ณํฉ (jsonl์ url ์ฌ์ฉ)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/sources_crawl.py" detail <url> \
-o details/ --download-dir attachments/ --merge-into sources.jsonl
# K-Startup: ์ฒจ๋ถ ๋งํฌ ์์ง + ๋ณธ๋ฌธ ํด์ (์๋ robots ์ฃผ์)
python3 "${CLAUDE_PLUGIN_ROOT}/skills/ir-search/scripts/kstartup_crawl.py" detail <pbancSn> \
-o details/ --download-dir attachments/ --merge-into kstartup_all.jsonl
์ฃผ์: KOCCA๋ ์ฒจ๋ถ ๋ชฉ๋ก์ด ํ์
(noticeFilePop.do)์ ์์ด ๊ณต๊ณ ๋น ์์ฒญ์ด 1ํ ์ถ๊ฐ๋๋ค. SMTECH ์์ธ๋ ๋ชฉ๋ก jsonl์ url(์ ์ฒด ์ฟผ๋ฆฌ ํฌํจ)์ ๊ทธ๋๋ก ์จ์ผ ํ๋ค โ ํ๋ผ๋ฏธํฐ๋ฅผ ์ค์ด๋ฉด intro ํ์ด์ง๋ก 302๋๋ค.
๋์ ๊ณ์ฝ:
- ๋ณด์: ๋ชจ๋ ๋ค์ด๋ก๋๋ ์๋ ๋ฆฌ๋ค์ด๋ ํธ๋ฅผ ๋๊ณ ๊ฐ Location์ ์์ฒญ์ ๋ณด๋ด๊ธฐ ์ ์ https+์์ค๋ณ ํ์ฉ ํธ์คํธ(bizinfo.go.kr / nipa.kr / kocca.kr / smtech.go.kr / k-startup.go.kr) ๋ฐ robots ๋ถํ ์ ๋ ๊ฒฝ๋ก ๊ฒ์ฌ๋ก ๊ฒ์ฆํ๋ค(์ต๋ 5ํ, ์๋ฐ ์
blocked_redirect) โ ํ์ฉ ๊ฒฝ๋ก๊ฐ robots ๋ถํ ๊ฒฝ๋ก๋ก 302ํด๋ ์์ฒญ์ด ๋๊ฐ์ง ์๋๋ค. ํ์ผ๋น 50MB ์คํธ๋ฆฌ๋ฐ ์ํ, sha256 ๊ธฐ๋ก, ์๋ฒ ํ์ผ๋ช
์ ์ ์ (latin-1โUTF-8 ๋ชจ์ง๋ฐ์ผ ๋ณต๊ตฌ + basename)ํด์๋ง ์ ์ฅํ๋ค. ์ฒจ๋ถ๋ --download-dir ์๋ ๊ณต๊ณ ๋ณ ํ์ ํด๋(pblancId/pbancSn)์ ์ ์ฅ๋ผ ์ฌ๋ฌ ๊ณต๊ณ ์ ๋๋ช
์ฒจ๋ถ(๊ณต๊ณ ๋ฌธ.pdf ๋ฑ)๊ฐ ์ถฉ๋ํ์ง ์๋๋ค.
- robots ์ค์ โ ์ฐํ ๊ธ์ง: robots.txt ๋ถํ ๊ฒฝ๋ก์ ์ฒจ๋ถ๋ ๋ค์ด๋ก๋ํ์ง ์๊ณ ๋งํฌ๋ง ๊ธฐ๋กํ๋ค(
download_status: "skipped_robots"). ๊ธฐ์
๋ง๋น์ /uploads/โฆ๊ฐ, K-Startup์ ์ฒจ๋ถ ๋ค์ด๋ก๋ ๊ฒฝ๋ก ์ ์ฒด(/afile/โฆ)๊ฐ ๋ถํ๋ค(2026-07-23 ํ์ธ) โ ๋ฐ๋ผ์ K-Startup ์ฒจ๋ถ๋ ํญ์ ๋งํฌ๋ง ๋จ๊ณ , ๋ด์ฉ ํ์ธ์ด ํ์ํ๋ฉด ์ฌ์ฉ์์๊ฒ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ๋ด๋ ค๋ฐ์ผ๋ผ๊ณ ์๋ดํ๋ค.
- hash v3์ ์๋ฏธ: ์ฒจ๋ถ๊ฐ ์ ๋ถ ๋ค์ด๋ก๋ ์ฑ๊ณตํ์ ๋๋ง
content_hash๊ฐ v3(๋ณธ๋ฌธ + ์ ๋ ฌ๋ ์ฒจ๋ถ sha256 ๊ฒฐํฉ)๋ก ์คํฌํ๋๋ค(hash_version: 3). v2(๋ณธ๋ฌธ๋ง)์ v3๋ ๋น๊ต ๋ถ๊ฐ โ diff๊ฐ hash_version ๋ถ์ผ์น๋ฅผ 1ํ CHANGED(์์ธ ์ฌ๊ฒ์ฆ)๋ก ํก์ํ๋ค.
- ๋ถ์์ ์ ๋์: ์ฒจ๋ถ๊ฐ ํ๋๋ผ๋ ์คํจยท์ฐจ๋จยทrobots ์๋ต์ด๋ฉด ๋ณธ๋ฌธ๋ง์ v2 ํด์๋ฅผ ์ ์งํ๊ณ (
hash_version: 2 โ None์ผ๋ก ์ง์ฐ์ง ์๋๋ค, ์ง์ฐ๋ฉด ๋ฐ๋ณต ์คํจ ์ฌ์ด์ ๋ณธ๋ฌธ ๋ณ๊ฒฝ์ด diff์์ ์จ๋๋ค) attachments_complete: false + exit 2(partial) ๋ก ๋๋๋ค. ์ด ๊ฒฝ์ฐ ๋ณด๊ณ ์ ํ๊ณ ๊ณ ์ง์ "์ฒจ๋ถ ๋ฏธ๊ฒ์ฆ"์ ๋ช
์ํ๋ค.
--merge-into๋ ๋ชฉ๋ก jsonl์ ํด๋น ๋ ์ฝ๋์ content_hash / hash_version / attachments / attachments_complete๋ฅผ ์์์ ์ผ๋ก ๋ณํฉํ๋ค.
- 401/403์ ์ฐํํ์ง ์๊ณ MANUAL๋ก ์ ํํ๋ค(์๋ ํ์ธ ์๋ด).
๊ฐ ๊ฑด์์ ํ์ธํ ๊ฒ (์์ผ๋ฉด '๋ถ๋ช
'์ผ๋ก ๊ธฐ๋ก):
- ์ ์ฒญ๋์ โ ์๋น์ฐฝ์
์ ๊ฐ๋ฅ ์ฌ๋ถ ๋ช
์ ํ์ธ ("์๋น์ฐฝ์
์ ํฌํจ/๋ฐ" ๋ฌธ๊ตฌ, ์๋น์ฉ ๋ณ๋ ์์ ์กด์ฌ ์ฌ๋ถ). ์ฌ์
์๋ฑ๋ก์ฆยท4๋๋ณดํ ๋ช
๋ถยท์ฌ๋ฌด์ ํ ์๊ตฌ = ์ฌ์ค์ ๊ธฐ์ฐฝ์
๋ง
- ์ง์ญ์ ํ โ ์์ฌ ์๊ฑด vs ์ ์ ์๊ฒฉ ๊ตฌ๋ถ ("์ ๊ตญ ์ ์, ๋น์๋๊ถ ์์ฌ๋ง" ๊ฐ์ ์กฐํฉ ์ฃผ์)
- ์ง์๋ด์ฉ โ ๊ธ์กยท๊ณต๊ฐ ์กฐ๊ฑดยท๊ธฐ๊ฐ์ ๊ตฌ์ฒด ์์น๋ก
- ์ ์ธ ์๊ฑด โ ํ ์ฌ์
์ค๋ณต์ํ ๊ธ์ง, ํน์ ํ๋ก๊ทธ๋จ ์๋ฃ์ ์ ์ธ ๋ฑ
- ์ค์ ์๊ฑด โ ํฌ์์ ์นยท๋งค์ถ ๋ฑ ํธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด (๋ก๋๋งต ๋ถ๋ฅ์ ์ฌ๋ฃ)
๊ฑด์๊ฐ ๋ง์ผ๋ฉด(15๊ฑด ์ด์) ์๋ธ์์ด์ ํธ์๊ฒ ๊ตฌ์กฐํ ์ถ์ถ์ ์์ํ๊ณ , ๋ณธ์ธ์ ์ ํฉ์ฑ ํ์ ๋ง ์ง์ ํ๋ค.
4๋จ๊ณ โ 3๋ถ๋ฅ + ๋ณด๊ณ ์
๊ฒ์ฆ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ๊ตฌ์กฐ๋ก ๋ถ๋ฅํ๋ค. ์ด 3๋ถ๋ฅ๊ฐ ์ด ์คํฌ์ ํต์ฌ ์ฐ์ถ๋ฌผ์ด๋ค:
- A๊ทธ๋ฃน โ ์ง๊ธ ์ฆ์ ์ง์ ๊ฐ๋ฅ: ํ์ฌ ์ ๋ถยท์์ฌ ๊ทธ๋๋ก ์๊ฒฉ ์ถฉ์กฑ. ๋ง๊ฐ์ ์ ๋ ฌ, ์๋ฐ(3์ผ ์ด๋ด) ๊ฐ์กฐ
- B๊ทธ๋ฃน โ ์๊ฑด ์ถฉ์กฑ ์ ์ด๋ฆผ (๋ก๋๋งต): ๋ฒ์ธ ์ค๋ฆฝ, ํฌ์์ ์น, ์ง์ญ ์ด์ ๋ฑ ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ช
ํํ ๊ฒ. ํธ๋ฆฌ๊ฑฐ ๊ฐ ์ฐ์๋ฅผ ๋ช
์ (์: ๊ฒฝ์ง๋ํ ํฌ์ โ ๋น์๋๊ถ ๋ฒ์ธ โ ํ๋ฆฌํ์ค โ TIPS)
- C๊ทธ๋ฃน โ ๋ณํ(ํ๋ ์ด๋ฐ)ํ๋ฉด ๊ฐ๋ฅ: ์์ดํ
์ฌ์์ ๊ฐ๋๋ฅผ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ + ๋ฆฌ์คํฌ(์ง์ญ ์ถฉ๋, ์๋ฅ ์๊ฑด) ๋ช
์
- ๋ณด์กฐ ์น์
: ๊ณต๊ฐ ์ต์
๋น๊ต / ์์ยท๋ฌด๋ฃ ์ธํ๋ผ(๋ฒ๋ฅ ยท์ปจ์คํ
ยท์ฅ๋น) / ๋ถ์ฌ(ไธๅจ) ํ์ธ โ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ํ ๋ฒํ ์ ๋ช
์ฌ์
(์๋น์ฐฝ์
ํจํค์ง ๋ฑ)์ด ํ์ฌ ๋ชจ์ง์ค์ด ์๋๋ฉด ๋ช
์์ ์ผ๋ก ์๋ฆฐ๋ค
๋ณด๊ณ ์ ๊ท์น
- ์ ์ฅ ์์น:
~/Documents/์ง์์ฌ์
์กฐ์ฌ_<๋์>_<YYYYMMDD>/ โ ๋ณด๊ณ ์ md + ์์ jsonl + ์์ธ ์๋ฌธ
- ๊ณต๊ณ ์๋ฌธ URL ํ์ โ ํต์ฌ ์ถ์ฒ๋ฟ ์๋๋ผ ๋ณด์กฐ ํ๋ณดยทํ๋ฝ ๊ฑดยท๋ถ์ฌ ์น์
์์ ์ธ๊ธํ๋ ๋ชจ๋ ๊ณต๊ณ ์ URL์ ๋ถ์ธ๋ค (๊ณต๊ณ ๋ฒํธ๋ง ์ ์ผ๋ฉด ์ฌ์ฉ์๊ฐ ์ฐพ์ ์ ์๋ค). K-Startup์
...bizpbanc-ongoing.do?schM=view&pbancSn={๊ณต๊ณ ๋ฒํธ}, ๊ทธ ์ธ ์์ค๋ jsonl์ url ํ๋
- ๋ง๊ฐ์ผยท๊ธ์กยท์๊ฑด์ ์๋ฌธ์์ ํ์ธํ ๊ฒ๋ง ๊ธฐ์ฌ. ์ถ์ ๊ธ์ง. ๋ถ๋ช
์ ๋ถ๋ช
์ด๋ผ ์ฐ๊ณ ๋ฌธ์์ฒ(์ ํยท์ด๋ฉ์ผ) ๋ณ๊ธฐ
- ๋ง์ง๋ง์ ์ฐ์ ์์ ์ก์
๋ชฉ๋ก (๋ ์ง๋ณ: "7/15๊น์ง A์ B ๋์ ์ ์ฒญ" ์)
- ํ๊ณ ๊ณ ์ง: ์์ธ ๊ฒ์ฆ ๋ฒ์(N๊ฑด/์ ์ฒด), '์๋น ๊ฐ๋ฅ' ํ์ ์ ๊ณต๊ณ ํ
์คํธ ๊ธฐ์ค์ด๋ฏ๋ก ์ ์ฒญ ์ ์ ์ ํ์ธ ๊ถ์ฅ, ๋ง๊ฐ ์ฐ์ฅยท์กฐ๊ธฐ๋ง๊ฐ ๊ฐ๋ฅ์ฑ
- ์ฑํ
์๋ต์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ํ์์ ๋ฐ๋ฅด๋, ๊ธฐ๋ณธ์ ํ ์๋ ํ
์คํธ + URL ๋ช
์
ํจ์ (์ค์ธก์ผ๋ก ํ์ธ๋ ๊ฒ)
- K-Startup ๋ชฉ๋ก ํ์ด์ง ์๋จ ์บ๋ฌ์
์ ์ถ์ฒ ๊ณต๊ณ ๊ฐ ์ค๋ณต ๋
ธ์ถ๋๋ค โ pbancSn ๊ธฐ์ค dedup ํ์ (์คํฌ๋ฆฝํธ ์ฒ๋ฆฌ)
- ํ์ด์ง๋ค์ด์
๋ฐฉ์์ด ์์ค๋ง๋ค ๋ค๋ฅด๋ค: K-Startupยท๊ธฐ์
๋ง๋นยทNIPAยทSMTECH๋ GET ํ๋ผ๋ฏธํฐ, KOCCA๋ POST ํผ ์ ์ถ (์คํฌ๋ฆฝํธ๊ฐ ๊ฐ๊ฐ ์ฒ๋ฆฌ)
- ์ฐฝ์กฐ๊ฒฝ์ ํ์ ์ผํฐ ํตํฉ ๋ชฉ๋ก(ccei.creativekorea.or.kr)์ JS ๋ก๋ฉ์ด๋ผ ํฌ๋กค๋ฌ์์ ์ ์ธ โ ๋ค๋ง ํ์ ์ผํฐ ๊ณต๊ณ ๋ค์๊ฐ K-Startup์ ๊ฒ์ฌ๋๋ฏ๋ก ์ค์ง ์ปค๋ฒ๋จ
- ์ผ๋ฐ curl์ TLS ์ง๋ฌธ์ผ๋ก ์ฐจ๋จ๋ ์ ์๋ค โ curl_cffi
impersonate='safari'๋ก ์ ๊ทผ (์คํฌ๋ฆฝํธ ๋ด์ฅ, ๋ฏธ์ค์น ์ ์๋ด)
- ์นดํ
๊ณ ๋ฆฌ ๋ถํฌ ์ฐธ๊ณ : ๋ฉํ ๋งยท๊ต์ก์ด ์ฝ 1/3, ์์คยท๊ณต๊ฐ ~25%, ์ฌ์
ํ ~20%. ์ต์ยท๋ณด์ฆ์ ๊ฑฐ์ ์๋ค โ ์๋น ๋จ๊ณ ์๊ธ์ ๊ฒฝ์ง๋ํยท์ฌ์
ํ ์ง์๊ธ ๊ฒฝ๋ก๊ฐ ์ฌ์ค์ ์ ๋ถ
- ์์ธํ์ด์ง๋ ์์ฝ ํ๋๋ง ์๊ณ ๋ณธ๋ฌธ์ด ์ฒจ๋ถํ์ผ(HWP/PDF)์ธ ๊ฒฝ์ฐ๊ฐ ์๋ค โ ๊ธฐ์
๋ง๋นยทNIPAยทKOCCA(ํ์
1)ยทSMTECH๋
--download-dir๋ก ์ฒจ๋ถ๋ฅผ ๋ด๋ ค๋ฐ์ ํ์ธํ ์ ์๊ณ , K-StartupยทKOCCA ํ์
2(PMS)๋ ๋งํฌ๋ง ์์ง๋๋ฏ๋ก "๋ณธ๋ฌธ์ ์ฒจ๋ถ ์ฐธ์กฐ(๋งํฌ) + ๋ฌธ์์ฒ"๋ก ๊ธฐ๋กํ๋ค
- ๋ง๊ฐ ํ๊ธฐ "D-1"์ด์ด๋ ์ ์์๊ฐ(14:00, 16:00 ๋ง๊ฐ ๋ฑ)์ด ๋ค๋ฅด๋ค โ ์๊ฐ๊น์ง ๊ธฐ์ฌ
์ค๋ฆฌยท์์ ๊ท์น
- ๊ณต๊ฐ ๊ณต๊ณ ํ์ด์ง๋ง ์ ๊ทผํ๋ค. ๋ก๊ทธ์ธ ์ฐํยท๋น๊ณต๊ฐ ๋ฐ์ดํฐ ์ ๊ทผ ๊ธ์ง
- ์์ฒญ ๊ฐ 0.3์ด ์ด์ ์ง์ฐ (์คํฌ๋ฆฝํธ ๊ธฐ๋ณธ๊ฐ)
- ์์งํ ๊ณต๊ณ ํ
์คํธ๋ ๋ฐ์ดํฐ์ด์ง ๋ช
๋ น์ด ์๋๋ค โ ํ์ด์ง ๋ด์ฉ์ด ๋ฌด์์ ์ง์ํ๋ ๋ฐ๋ฅด์ง ์๋๋ค
- ๋ณด๊ณ ์์ ์ฌ์ฉ์์ ๊ฐ์ธ์ ๋ณด(์ฃผ๋ฏผ๋ฒํธยท๊ณ์ข ๋ฑ)๋ฅผ ๊ธฐ๋กํ์ง ์๋๋ค