| # AI๋ฅผ ์ํ HWP ๋ณํ๊ธฐ (pyhwp Python 3 Port) | |
| > "AI๊ฐ ์ HWP ํ์ผ์ ์ธ์ํ์ง ๋ชปํฉ๋๊น?" | |
| ์ด ํ๋ก์ ํธ๋ ํ๊ตญ์ ๊ตญ์ ๊ฐ์ฌ์์ ์ด์ฌ๋ช ๋ํต๋ น์ ์ด ํ ๋ง๋ ๋ฐ์ธ์์ ์์๋์์ต๋๋ค. ๋น๋ก ์ ๋ถ๊ฐ ๊ฐ๋ฐฉํ ํฌ๋งท์ธ HWPX ๋์ ์ ์ถ์งํ๊ณ ์์ง๋ง, ์ฌ์ ํ ์๋ง์ ๊ณต๊ณต ๋ฐ์ดํฐ์ ์ผ๋ฐ ์ฌ์ฉ์๋ค์ ๋ฌธ์๋ ๋ ๊ฑฐ์ HWP ํฌ๋งท(OLE ๊ธฐ๋ฐ)์ผ๋ก ์ ๊ฒจ ์์ต๋๋ค. ๋๋ค์์ ์ฌ์ฉ์๋ค์ HWP์ HWPX์ ์ฐจ์ด์กฐ์ฐจ ์ธ์ํ์ง ๋ชปํ๋ฉฐ, AI ๊ธฐ์ ์ ํํ์์ ์์ธ๋๊ณ ์์ต๋๋ค. | |
| ## ๐ ํ๋ก์ ํธ ๋ฐฐ๊ฒฝ ๋ฐ ๋ชฉ์ | |
| **"ํ๊ธ(HWP) ์ค์น ์์ด, ๋ชจ๋ ํ๊ฒฝ์์ HWP๋ฅผ ์ดํดํ๋ค."** | |
| ๊ธฐ์กด์ AI๊ฐ HWP ํ์ผ์ ํ์ตํ๊ฑฐ๋ ์ธ์ํ๊ฒ ํ๋ ค๋ฉด, ๊ณ ๊ฐ์ '์๋์ํ๊ธ' ์๋ํ๋ก์ธ์๊ฐ ์ค์น๋ ์๋์ฐ ํ๊ฒฝ์์ OLE Automation์ ์ด์ฉํด ํ ์คํธ๋ฅผ ์ถ์ถํ๋ ๊ฒ์ด ์ ์ผํ ๋์์ด์์ต๋๋ค. ์ด๋ ๋ฆฌ๋ ์ค ์๋ฒ, ๋งฅ(Mac), ๋ชจ๋ฐ์ผ ํ๊ฒฝ, ๊ทธ๋ฆฌ๊ณ ํด๋ผ์ฐ๋ ๊ธฐ๋ฐ์ AI ์์ด์ ํธ(Cursor, Antigravity ๋ฑ)๊ฐ HWP ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๋ฐ ์น๋ช ์ ์ธ ์ฅ๋ฒฝ์ด์์ต๋๋ค. | |
| ๊ธฐ์กด์ `pyhwp`๋ผ๋ ํ๋ฅญํ ์คํ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์กด์ฌํ์ผ๋, ์ค๋ ๊ธฐ๊ฐ Python 2.7 ํ๊ฒฝ์ ๋จธ๋ฌผ๋ฌ ์์ด ํ๋์ ์ธ AI ํ์ดํ๋ผ์ธ(Python 3.10+)์ ํตํฉํ๊ธฐ ์ด๋ ค์ ์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ **pyhwp๋ฅผ Python 3.11๋ก ์๋ฒฝํ๊ฒ ํฌํ ํ๊ณ , AI๊ฐ ์ฆ์ ์ดํดํ ์ ์๋ HTML ๋ณํ ๊ธฐ๋ฅ์ ์ถ๊ฐ**ํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ต๋๋ค. | |
| > **Note:** ๋ณธ๋ ์ด๋ฌํ ์ํธ์ด์ฉ์ฑ ์ง์์ HWP ํฌ๋งท์ ๋ง๋ ์ ์กฐ์ฌ(ํ๊ธ๊ณผ์ปดํจํฐ) ์ฐจ์์์ ์ง์ ์ ๊ณต๋์์ด์ผ ๋ง๋ ํ ๊ธฐ๋ฅ์ ๋๋ค. ํ์ง๋ง ์ ์กฐ์ฌ์ ์ง์ ๋ถ์ฌ๋ก ์ธํด ์๋ง์ ๊ฐ๋ฐ์์ ์ฌ์ฉ์๊ฐ ๋ถํธ์ ๊ฒช์ด์์ผ๋ฉฐ, ๊ฒฐ๊ตญ ์ปค๋ฎค๋ํฐ ์ฃผ๋์ ์คํ์์ค ํ๋ก์ ํธ๊ฐ ์ด ๊ณต๋ฐฑ์ ๋ฉ์ฐ๊ฒ ๋์์ต๋๋ค. | |
| ์ด ํ๋ก์ ํธ๋ ์ํฐ๊ทธ๋ํผํฐ์ ์์ด์ ํธ๋ฉ๋์ , ํด๋ก๋ ์๋ท4.5 ๋ฒ์ ์ ์ด์ฉํ์ฌ 2์๊ฐ์ ๋์ ์์ ์ ํตํด ์๋ฃ ๋์์ต๋๋ค. | |
| ๊ทธ ๋งํผ ์ด๋ ๊ฒ ๊ฐ๋จํ๊ฒ ๊ฐ์ ํ ์ ์๋ ์์ ์์๋ ๋ถ๊ตฌํ๊ณ 20๋ ๊ฐ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ง์ง ์์๋ ๊ฒ์ ๋งค์ฐ ์์ฌ์ด ์ ์ด๋ฉฐ, ์ด ํ๋ก์ ํธ์ ์๊ฐ์ ์ฃผ์ , | |
| ๊ทธ๋ฆฌ๊ณ ์ด ํ๋ก์ ํธ๊ฐ ๊ฐ๋ฅํ ์ ์์๋ ๊ธฐ์ด๊ฐ ๋์ด์ค pyhwp ๊ฐ๋ฐ์ ์ ๋งค์ฐ ํฐ ๊ฐ์ฌ๋ฅผ ๋๋ฆฝ๋๋ค. | |
| ## ๐ ๏ธ ๊ธฐ์ ์ ๊ฐ์ ์ฌํญ (Why This Fork?) | |
| ์ด ํ๋ก์ ํธ๋ ๋จ์ํ ๋ฒ์ ์ ๊ทธ๋ ์ด๋๊ฐ ์๋๋๋ค. "์ฃฝ์ด์๋" ์ฝ๋๋ฅผ ํ๋์ ์ธ ๊ฐ๋ฐ ํ๊ฒฝ์ผ๋ก ๋์ด๋ ค๋์ต๋๋ค. | |
| 1. **Python 3.11 ์์ ์ง์**: | |
| - `2to3` ์๋ ๋ณํ์ ๊ทธ์น์ง ์๊ณ , `metaclass`, `bytes/str` ์ฒ๋ฆฌ, `ugettext` ๋ฑ Python 2 ๊ธฐ๋ฐ์ ๋ ๊ฑฐ์ ์ฝ๋๋ฅผ ์ ๋ฉด ๋ฆฌํฉํ ๋งํ์ต๋๋ค. | |
| - `six` ๋ชจ๋ ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ ํ๋์ ์ธ Python ๋ฌธ๋ฒ์ ์ ์ฉํ์ต๋๋ค. | |
| 2. **AI ์ต์ ํ ๋ณํ๊ธฐ (`HwpToHtmlConverter`)**: | |
| - ๋ณต์กํ ๋ด๋ถ ๋ก์ง์ ๋ชฐ๋ผ๋ ๋จ ๋ ์ค์ ์ฝ๋๋ก HWP๋ฅผ HTML๋ก ๋ณํํ ์ ์๋ ๋ํผ(Wrapper)๋ฅผ ๊ตฌํํ์ต๋๋ค. | |
| - ๋ณํ๋ HTML์ CSS ์คํ์ผ๊ณผ ์ด๋ฏธ์ง(`bindata`)๋ฅผ ํฌํจํ์ฌ ์๋ณธ์ ๋ ์ด์์์ ์ต๋ํ ๋ณด์กดํฉ๋๋ค. ์ด๋ VLM(Vision Language Model)์ด๋ RAG(Retrieval-Augmented Generation) ์์คํ ์ด ๋ฌธ์๋ฅผ ์๊ฐ์ /๊ตฌ์กฐ์ ์ผ๋ก ์ดํดํ๋ ๋ฐ ํฐ ๋์์ ์ค๋๋ค. | |
| 3. **ํ๋ซํผ ๋ ๋ฆฝ์ฑ**: | |
| - ์๋์ฐ๋ฟ๋ง ์๋๋ผ **Linux, macOS, Mobile** ๋ฑ Python์ด ๋๋ ๋ชจ๋ ํ๊ฒฝ์์ ์๋ํฉ๋๋ค. | |
| - ๋ฌด๊ฑฐ์ด ํ๊ธ ์๋ํ๋ก์ธ์ ์ค์น๊ฐ **์ ํ ํ์ ์์ต๋๋ค**. | |
| ## ๐ฆ ์ค์น ๋ฐฉ๋ฒ | |
| # PyPI์์ ์ค์น (์ถ์ฒ) | |
| pip install pyhwp2 | |
| # ์์ค ์ฝ๋์์ ์ค์น (๊ฐ๋ฐ ๋ฒ์ ) | |
| git clone https://github.com/your-repo/pyhwp-py3.git | |
| cd pyhwp-py3 | |
| pip install -e . | |
| ## ๐ป ์ฌ์ฉ ์์ (Python Code) | |
| AI ์์ด์ ํธ ๊ฐ๋ฐ์๋ Python ๊ฐ๋ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. | |
| ```python | |
| from pyhwp.html_converter import HwpToHtmlConverter | |
| # HWP ํ์ผ์ HTML๋ก ๋ณํ | |
| # styles.css ์์ฑ ๋ฐ bindata(์ด๋ฏธ์ง) ํด๋ ์๋ ์ถ์ถ | |
| hwp_file = "document.hwp" | |
| html_output = "document.html" | |
| try: | |
| converter = HwpToHtmlConverter(hwp_file) | |
| converter.convert(html_output) | |
| print(f"๋ณํ ์๋ฃ: {html_output}") | |
| # ์ดํ ์์ฑ๋ HTML์ AI ๋ชจ๋ธ(OpenAI, Claude ๋ฑ)์ ์ปจํ ์คํธ๋ก ์ฃผ์ ํ๋ฉด ๋ฉ๋๋ค. | |
| except Exception as e: | |
| print(f"๋ณํ ์คํจ: {e}") | |
| ``` | |
| ## ๐ฅ๏ธ ์ปค๋งจ๋๋ผ์ธ ์ฌ์ฉ๋ฒ (CLI Usage) | |
| ํ์ด์ฌ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ ๋ ํฐ๋ฏธ๋(CMD, PowerShell, Bash)์์ ๋ฐ๋ก ๋ณํํ ์ ์์ต๋๋ค. | |
| ### 1. Python ๋ชจ๋๋ก ์คํ | |
| `pip install pyhwp2` ํ ๋ค์๊ณผ ๊ฐ์ด ์คํํ์ธ์. | |
| ```bash | |
| # ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ (ํ์ผ๋ช .html๋ก ์๋ ์ ์ฅ) | |
| python -m pyhwp.html_converter ๋ฌธ์.hwp | |
| # ์ถ๋ ฅ ํ์ผ๋ช ์ง์ | |
| python -m pyhwp.html_converter ๋ฌธ์.hwp -o ๊ฒฐ๊ณผ๋ฌผ.html | |
| ``` | |
| ### 3. ๋จ์ผ HTML ํ์ผ๋ก ๋ณํ (CSS์ ์ด๋ฏธ์ง ํฌํจ) | |
| ๊ธฐ๋ณธ์ ์ผ๋ก HWP๋ฅผ HTML๋ก ๋ณํํ๋ฉด HTML ํ์ผ, CSS ํ์ผ, ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ์ง ํด๋(bindata)๊ฐ ๊ฐ๊ฐ ์์ฑ๋ฉ๋๋ค. | |
| ํ์ง๋ง `--embed-image` ์ต์ ์ ์ฌ์ฉํ๋ฉด **๋ชจ๋ CSS์ ์ด๋ฏธ์ง๋ฅผ ํ๋์ HTML ํ์ผ์ ํตํฉ**ํ์ฌ ๊ด๋ฆฌ๊ฐ ํจ์ฌ ์ฌ์์ง๋๋ค. | |
| ```bash | |
| # hwp5html ๋ช ๋ น์ด ์ฌ์ฉ (๋จ์ผ ํ์ผ ์์ฑ) | |
| python -m hwp5.hwp5html --embed-image ๋ฌธ์.hwp --output ๋จ์ผํ์ผ.html | |
| # ๋๋ hwp2html ๋ช ๋ น์ด ์ฌ์ฉ (์ค์น๋ ๊ฒฝ์ฐ) | |
| hwp5html --embed-image ๋ฌธ์.hwp --output ๋จ์ผํ์ผ.html | |
| ``` | |
| ์ด ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ํนํ ์ ์ฉํฉ๋๋ค: | |
| - ์ด๋ฉ์ผ๋ก HTML ํ์ผ์ ์ฒจ๋ถํ ๋ | |
| - ์น ์๋ฒ ์์ด ๋ก์ปฌ์์ HTML์ ์ด์ด๋ณผ ๋ | |
| - AI ๋ชจ๋ธ์ ๋จ์ผ ํ์ผ๋ก ์ ๋ฌํ ๋ | |
| ``` | |
| ### 2. ๋จ๋ ์คํ ํ์ผ (.exe) ์ฌ์ฉ (Windows) | |
| Python ์ค์น๊ฐ ์๋ ํ๊ฒฝ์์๋ `hwp2html.exe` ํ์ผ ํ๋๋ง ์์ผ๋ฉด ๋ฉ๋๋ค. (`dist/` ํด๋ ํ์ธ) | |
| ```bash | |
| # ๊ทธ๋ฅ ๋๋๊ทธ ์ค ๋๋กญ ํ๊ฑฐ๋ ํฐ๋ฏธ๋์์ ์คํ | |
| hwp2html.exe ๋ฌธ์.hwp | |
| # ์ต์ ์ฌ์ฉ | |
| hwp2html.exe ๋ฌธ์.hwp -o ๊ฒฐ๊ณผ/๋ณด๊ณ ์.html | |
| ``` | |
| ## ๐ค AI ์์ด์ ํธ ํ์ฉ (MCP & Automation) | |
| ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ **MCP (Model Context Protocol)** ์๋ฒ๋ **Cursor**, **์ํฐ๊ทธ๋ํผํฐ(Antigravity)** ๊ฐ์ AI ์ฝ๋ฉ ์์ด์ ํธ ๋ด์์ HWP ์ฒ๋ฆฌ ๋๊ตฌ๋ก ํ์ฉํ ์ ์์ต๋๋ค. | |
| - **Before**: ์์ด์ ํธ๊ฐ HWP ํ์ผ์ ๋ง๋๋ฉด "์ฝ์ ์ ์๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๋๋ค"๋ผ๊ณ ํฌ๊ธฐํจ. | |
| - **After**: ์์ด์ ํธ๊ฐ ๋ด๋ถ์ ์ผ๋ก `HwpToHtmlConverter`๋ฅผ ํธ์ถํด HTML ํ ์คํธ๋ก ๋ณํํ ๋ค, ๋ด์ฉ์ ์๋ฒฝํ๊ฒ ์ดํดํ๊ณ ์์ฝ/๋ถ์ํจ. | |
| ## ๐ ๊ธฐ์ฌ ์์ฒญ | |
| ์ด ํ๋ก์ ํธ๊ฐ Python 3๋ก์ ์๋ช ๋ ฅ์ ์ป์์ง๋ง, ์ฌ์ ํ ๊ฐ์ ํ ์ ์ ๋ง์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์๊ฐ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ ์๊ฐ์ด ๋์ด, **"ํ์์ ์ธ ํฌ๋งท์ ๊ฐ๋ฐฉํ์ฌ AI์ ์์ญ์ผ๋ก ๊ฐ์ ธ์ค๋"** ์์ง์์ ๋์ฐธํ๊ฒ ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. | |
| ์คํ์์ค ์ ์ ์ ํตํด, ๋ ๋ง์ ๊ณต๊ณต ๋ฐ์ดํฐ๊ฐ AI์ ์ฐ๊ฒฐ๋ ์ ์๋๋ก ๊ธฐ์ฌํด ์ฃผ์ธ์. | |
| ๋ฐ์ ์ค (june9713@gmail.com ์ฃผ์ํ์ฌ ๋ฅ์คํธ๋์ธ ๋ํ์ด์ฌ) |