์๋ํ๋ ์ค์์ ๊ธ์ ์ฐ๋ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ ํ ๋ฒ์ฏค ๊ฒช์ด๋ดค์ ๋ฒํ ๋ถํธํจ์ด ์๋ค. ๋ฐ๋ก ๋ง์ถค๋ฒ ๊ฒ์ฌ๋ค.

๊ทธ๋ฐ๋ฐ ๋ณธ๋ฌธ ๋ด์ฉ์ ๋ณต์ฌํด ์ธ๋ถ ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ ์ฌ์ดํธ์ ๋ถ์ฌ ๋ฃ๊ณ , ๊ต์ ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์๋ํ๋ ์ค๋ก ๊ฐ์ ธ์ค๋ ๊ณผ์ ์์ ์ ์ฑ๊ป ์ ํ ์์๋ค์ด ๋ฌด๋์ง๋ ํ์์ด๋ค. ๊ธ์ ์์, ๊ตต๊ธฐ, ํ์ดํผ๋งํฌ ๋ฑ์ด ์ฌ๋ผ์ง๊ฑฐ๋ ๋ธ๋ก ๊ตฌ์กฐ๊ฐ ๊ผฌ์ฌ๋ฒ๋ฆฌ๋ ๋ฌธ์ ๋ ๊ธ์ฐ๊ธฐ์ ๋งฅ์ ๋๋ ์ฃผ๋ฒ์ด์๋ค.
๊ฐ์ธ์ ์ผ๋ก (๋๋ ์๋ฒฝํ์ง๋ ์์ง๋ง) ๋ง์ถค๋ฒ์ด ์ค์ํ๋ค๊ณ ์๊ฐํ๊ณ , ๋จ์ด ํ๋ฆฌ๋ ๊ฑธ ๋ณด๋ ๊ฒ๋ ์ ์ฐธ์ง ๋ชปํ๋ ํธ์ธ๋ฐ ์ด๋ ๊ฒ ๋ฐํํ๋ ๊ฑธ ํ๋ฆฌ๋ ๊ฑด ๋ ๋๋ ค์ด ์ค์,
์ด๋ฌํ ๋จ์ํ๋ฉด์๋ ์น๋ช ์ ์ธ ๋ถํธํจ์ ํด๊ฒฐํ๊ณ ์, ๊ตฌํ ๋ฒ ๋ฅดํฌ ์๋ํฐ ์ ์ฉ ๋ง์ถค๋ฒ ๊ต์ ๋ณด์กฐ ๋๊ตฌ์ธ ‘WP Korean Speller(Korean Speller)’๋ฅผ ๊ฐ๋ฐํ๊ฒ ๋์๋ค.
1. ๊ฐ๋ฐ์ ์์: “์์์ ์งํค๊ณ , ์คํ์๋ง ๋ฐ๊ฟ ์๋ ์์๊น?”
๊ธฐ์กด์ ๋ฐฉ์๋๋ก ๊ต์ ๋ ํ ์คํธ ์ ์ฒด๋ฅผ ์๋ํฐ์ ๋ฎ์ด์์ฐ๋ฉด HTML ํ๊ทธ ์ ๋ณด๊ฐ ์ ์ค๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋จ์ํ ํ ์คํธ ์นํ์ด ์๋, ์๋ํ๋ ์ค ๊ณต์ Block API๋ฅผ ํ์ฉํ๋ ๋ฐฉ์์ ํํ๋ค.
์๋ํ๋ ์ค์ ๊ตฌํ
๋ฒ ๋ฅดํฌ๋ ๋ชจ๋ ์ฝํ
์ธ ๋ฅผ ๋ธ๋ก(Block) ๋จ์๋ก ๊ด๋ฆฌํ๋ค. ๊ฐ ๋ธ๋ก์๋ ๊ณ ์ ํ ์์ฑ(Attributes)์ด ์๋๋ฐ, ์ด ์์ฑ๊ฐ ์ค์์ ํ
์คํธ ๋ฐ์ดํฐ๋ง ์ ๋ฐํ๊ฒ ์ถ์ถํ์ฌ ๊ต์ ๋ ๋ด์ฉ์ผ๋ก ์
๋ฐ์ดํธํ๊ณ , ๋๋จธ์ง ์คํ์ผ ์์ฑ์ ๊ทธ๋๋ก ์ ์งํ๋ ๋ก์ง์ ์ค๊ณํ๋ค. ์ด๋ฅผ ํตํด updateBlockAttributes ํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์์ ํ ๋ฐ์ ์์คํ
์ ๊ตฌ์ถํ ์ ์์๋ค.
2. ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ์ค๊ณ ์ฒ ํ
ํ๋ฌ๊ทธ์ธ์ ๊ธฐํํ๋ฉฐ ๊ฐ์ฅ ์ค์ ์ ๋ ๊ฒ์ ‘ํ๋ฆ์ ๋ฐฉํดํ์ง ์๋ ๊ฐ๊ฒฐํจ’์ด์๋ค.
- ์ธ๋ถ ๊ฒ์ฌ๊ธฐ์์ ์ ์ฐํ ์ฐ๋: ์ง์ ์ ์ธ API ์ฐ๋์ ๋น์ฉ์ด๋ ์๋ฒ ์์ ์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ๋์ ๋ค์ด๋ฒ ๊ฒ์ฌ๊ธฐ(๋จ๋ฌธ์ฉ)์ ๋ฐ๋ฅธํ๊ธ ๊ฒ์ฌ๊ธฐ(๋์ฉ๋์ฉ)๋ฅผ ์ ํํ์ฌ ์ด ์ ์๋๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌ์ฑํ๋ค.
- ์ํด๋ฆญ ์๋ ๋ณต์ฌ: ๊ฒ์ฌ๊ธฐ ๋ฒํผ์ ๋๋ฅด๋ ์๊ฐ ํ์ฌ ์์ฑ ์ค์ธ ๋ณธ๋ฌธ ์ ์ฒด๊ฐ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋๋ค. ์ฌ์ฉ์๋ ๊ฒ์ฌ๊ธฐ ์ฌ์ดํธ์์ ๋ฐ๋ก
Ctrl+V๋ง ๋๋ฅด๋ฉด ๋๋ค. - ๋ณต์กํ ๊ตฌ์กฐ์ ์ถ์ ๊ณผ ๋ณด์กด: ๋ฌธ๋จ๋ฟ๋ง ์๋๋ผ ์ค์ฒฉ๋ ๋ฆฌ์คํธ๋ ์ ๋ชฉ ๋ฑ ๋ณต์กํ๊ฒ ์ฝํ ๋ธ๋ก ๊ตฌ์กฐ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํ์ํ์ฌ ๊ต์ ๋ด์ฉ์ ๋ฐ์ํ๋๋ก ๋ง๋ค์๋ค. ๋ฐ์ ํ ๋ฐ์ํ ์ ์๋ ‘๋ธ๋ก ์ค๋ฅ’๋ฅผ ์ต์ํํ๋ ๋ฐ ์ฌํ์ ๊ธฐ์ธ์๋ค.
- ํตํฉ๋ UI: ์๋ํฐ ์ฐ์ธก ์๋จ์ ‘ABC ์ฒดํฌ’ ์์ด์ฝ์ ๋ฐฐ์นํ์ฌ, ์๋ํ๋ ์ค ๊ธฐ๋ณธ ๋์์ธ๊ณผ ์ด์ง๊ฐ ์์ด ์กฐํ๋ฅผ ์ด๋ฃจ๋๋ก ํ๋ค.
3. ์ฌ์ฉ ๋ฐฉ๋ฒ
์ฌ์ฉ๋ฒ์ ๋งค์ฐ ์ง๊ด์ ์ด๋ค.

- ๊ธ ํธ์ง ํ๋ฉด ์ฐ์ธก ์๋จ์ ์์ด์ฝ์ ํด๋ฆญํด ์ฌ์ด๋๋ฐ๋ฅผ ์ฐ๋ค.
- ๊ธ ๊ธธ์ด์ ๋ง์ถฐ ๊ฒ์ฌ๊ธฐ๋ฅผ ์ ํํ๋ค. ์ด๋ ๋ณธ๋ฌธ์ ์๋์ผ๋ก ๋ณต์ฌ๋๋ค.
- ์ด๋ฆฐ ์ธ๋ถ ์ฌ์ดํธ์์ ๊ต์ ์ ์งํํ๊ณ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณต์ฌํ๋ค.
- ์ฌ์ด๋๋ฐ ์ ๋ ฅ์ฐฝ์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ถ์ฌ๋ฃ๊ณ [๋ณธ๋ฌธ์ ๋ฐ์ํ๊ธฐ] ๋ฒํผ์ ๋๋ฅธ๋ค.
์ด ๊ณผ์ ์ ๊ฑฐ์น๋ฉด ์๋ํฐ ์์ ์คํ์๋ง ์์ ๋ฐ๋๊ณ , ๋งํฌ๋ ์์์ ๊ทธ๋๋ก ๋ณด์กด๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
4. ๋ง์น๋ฉฐ
ํ์ฌ ์ด ํ๋ฌ๊ทธ์ธ์ ์๋ํ๋ ์ค ๊ณต์ ํ๋ฌ๊ทธ์ธ ๋๋ ํ ๋ฆฌ์ ๋ฑ๋ก๋๊ธฐ ์ํด ์ฌ์ฌ ๊ณผ์ ์ ๊ฑฐ์น๊ณ ์๋ค. ์ ์ ๋ฑ๋ก์ด ์๋ฃ๋๋ฉด https://wordpress.org/plugins/korean-speller ์ฃผ์๋ฅผ ํตํด ๋๊ตฌ๋ ๋ฌด๋ฃ๋ก ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์ ์์ ์ด๋ค. (ํ์ฌ ์ฌ์ฌ์ค)
๊ฐ๋ฐ ๊ณผ์ ์์ ๊ฒช์ ์๋ง์ ์ํ์ฐฉ์ค๊ฐ ๋๊ตฐ๊ฐ์ ๋ธ๋ก๊น ์๊ฐ์ ๋จ 5๋ถ์ด๋ผ๋ ๋จ์ถํด ์ค ์ ์๋ค๋ฉด, ๊ฐ๋ฐ์๋ก์ ๊ทธ๋ณด๋ค ๋ ํฐ ๋ณด๋์ ์์ ๊ฒ์ด๋ค. ์๋ฒฝํ ๊ธ๋ณด๋ค ‘์์ ํ๊ฒ ๊ณ ์ณ์ง ๊ธ’์ด ์ฃผ๋ ํธ์ํจ์ ๋ ๋ง์ ์๋ํ๋ ์ค ์ ์ ๋ค์ด ๊ฒฝํํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ค.
์ฒ์ ๊ธฐํ ๋จ๊ณ์์์ ๋ชฉํ๋ ๊ฝค ์ผ์ฌ ์ฐผ๋ค. ์ฌ์ฉ์๊ฐ ๋ฒํผ ํ๋๋ง ๋๋ฅด๋ฉด, ๋ฐฑ์๋์์ ์ธ๋ถ ์๋ฒ์ ๊ฒ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ชฐ๋ ๊ฐ์ ธ์ ๋ณธ๋ฌธ์ ์ฆ์ ๋ฐ๊ฟ์ฃผ๋ ‘์์ ์๋ํ’๋ฅผ ๊ฟ๊ฟจ๋ค. ์ด๋ฅผ ์ํด ์์ ‘์ฝ์ง’์ด๋ผ ๋ถ๋ฆฌ๋ API ํ์ ์ฌํ์ ์์ํ๋ค.
- ๋ค์ด๋ฒ/๋ค์ ๊ฒ์ฌ๊ธฐ ํจํท ๋ถ์: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋คํธ์ํฌ ํญ์ ํตํด ํน์ ์ฃผ์๋ก ํ ์คํธ๋ฅผ ๋ณด๋ด๋ฉด JSON์ผ๋ก ๋ต์ ์ค๋ค๋ ์ฌ์ค์ ์์๋์ ๋ ์ ๋ ์นด๋ฅผ ์ธ์ณค๋ค. ํ์ง๋ง ๊ธฐ์จ์ ์ค๋๊ฐ์ง ์์๋ค. ์ด API๋ค์ ์๋น์ค ๋ด๋ถ์์๋ง ์๋ํ๋๋ก ๋ณด์ ํค์ ์ธ์ ํ ํฐ์ผ๋ก ๋จ๋จํ ๋ฌด์ฅํ๊ณ ์์๋ค.
- CORS๋ผ๋ ๊ฑฐ๋ํ ๋ฒฝ: ์ด๋ป๊ฒ๋ ์ฃผ์๋ฅผ ์์๋ด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฒญ์ ๋ ๋ ค๋ดค์ง๋ง, ๋์์ค๋ ๊ฒ์ ๋นจ๊ฐ์ ์๋ฌ ๋ฉ์์ง๋ฟ์ด์๋ค. ๋จ์ ์ง(๋ค์ด๋ฒ) ๋๋ฌธ ์์์ “ํ๋ฐฐ ์์ด์!”๋ผ๊ณ ์ธ์ณ๋ด์ผ ๋ฌธ์ ์ด์ด์ค ๋ฆฌ ์๋ CORS(Cross-Origin Resource Sharing) ์ ์ฑ ๋๋ฌธ์ด์๋ค.
- ์๋ฒ ์ฌ์ด๋ ํ๋ก์(Proxy) ์๋: ์ง์ ์ ๋๋ฉด ๋ด ์๋ฒ๋ฅผ ๊ฑฐ์ณ ๊ฐ์๋ ์๊ฐ์ผ๋ก PHP ์ฐํ๋ก๋ฅผ ๋ซ์ด๋ดค๋ค. ์ ์ ์๋ํ๋ ๋ฏํ์ผ๋ ๋๊ด์ ๊ณ์๋์๋ค. ์ธ๋ถ ๊ฒ์ฌ๊ธฐ์ ์๋ต ํ์์ด ์์๋ก ๋ฐ๋์๊ณ , ๋๋์ ์์ฒญ์ด ๋ชฐ๋ฆด ๊ฒฝ์ฐ ์๋ฒ IP๊ฐ ์ฐจ๋จ๋ ์ํ์ด ์ปธ๋ค. ๋ฌด์๋ณด๋ค ์ฌ์ฉ์์ ์์คํ ๊ธ ๋ฐ์ดํฐ๋ฅผ ์ 3์ ์๋ฒ๋ฅผ ๊ฑฐ์ณ ๋ณด๋ด๋ ๊ฒ์ด ๋ณด์์ ์ฐ์ฐํ๋ค.
๊ฒฐ๊ตญ ๋ฉฐ์น ๊ฐ์ ์ฌํฌ ๋์ ๊นจ๋ฌ์๋ค. “๊ฐ์ฅ ๋จ์ํ ๊ฒ์ด ๊ฐ์ฅ ๊ฐ๋ ฅํ๋ค”๋ ๊ฒ์ ๋ง์ด๋ค. ์ต์ง๋ก API๋ฅผ ๋ฐ์์ ๋ถ์์ ํ ์๋ํ๋ฅผ ํ๋๋, ์ฐจ๋ผ๋ฆฌ ๊ฒ์ฆ๋ ๊ณต์ ์น์ฌ์ดํธ๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ๋ซ๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค. ์ ๋ต์ ์์ ํ๋ค. “๊ฐ์ ธ์ค๋ ๊ณผ์ ์ ๊ณต์ ์ฌ์ดํธ์ ํ์ ๋น๋ฆฌ๋, ๊ฐ์ ธ์จ ๊ฒฐ๊ณผ๋ฅผ ๋ด ๊ธ์ ์ ํ๋ ๊ณผ์ ๋งํผ์ ๊ทธ ๋๊ตฌ๋ณด๋ค ์๋ฒฝํ๊ฒ ์ฒ๋ฆฌํ์.” ์ด๊ฒ์ด ํ์ฌ ์ด ํ๋ฌ๊ทธ์ธ์ ํต์ฌ ์ฒ ํ์ด ๋์๋ค.
๊ธฐ์กด ๋ฐฉ์๋๋ก ๊ต์ ๋ ํ ์คํธ ์ ์ฒด๋ฅผ ์๋ํฐ์ ๋ฎ์ด์์ฐ๋ฉด HTML ํ๊ทธ ์ ๋ณด๊ฐ ์ ์ค๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋จ์ํ ํ ์คํธ ์นํ์ด ์๋, ์๋ํ๋ ์ค ๊ณต์ Block API๋ฅผ ํ์ฉํ๋ ์ธ ๊ฐ์ง ํต์ฌ ๊ธฐ์ ์ ์ ์ฉํ๋ค.
- ์ฌ๊ท์ ๋ธ๋ก ์ฒ๋ฆฌ (Recursive Block Handling): ์๋ํ๋ ์ค ํฌ์คํธ๋ ๋จ์ ๋ฌธ๋จ๋ฟ๋ง ์๋๋ผ ๋ฆฌ์คํธ, ์ ๋ชฉ, ์ธ์ฉ ๋ธ๋ก ๋ฑ์ด ๋ณต์กํ๊ฒ ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ค. ์ด๋ฅผ ๋น ์ง์์ด ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ชจ๋ ๋ธ๋ก์ ์ํํ๋ฉฐ ํ ์คํธ ๋ ธ๋๋ง์ ์ฐพ์๋ด๋ ์ฌ๊ท ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ๋ค. ๋๋ถ์ ์ด๋ ํ ๋ณต์กํ ๊ตฌ์กฐ์์๋ ์คํ์๋ง ์ ํํ ์ฐพ์๋ผ ์ ์๊ฒ ๋์๋ค.
- ์ธ๋ผ์ธ ์คํ์ผ ๋ณด์กด (Preserving Inline Styles): ๊ธ์ ์์์ด๋ ๋ณผ๋ ์ฒ๋ฆฌ๋
<span>์ด๋<strong>ํ๊ทธ๋ก ๊ฐ์ธ์ ธ ์๋ค. ๋ง์ถค๋ฒ ๊ต์ ๊ฒฐ๊ณผ์์ ์ด๋ฌํ ํ๊ทธ๋ค์ ๋ฌด์ํ๊ณ ์์ ํ ์คํธ๋ง ๋งค์นญํ์ฌ ๊ต์ฒดํ๋ ๋ก์ง์ ์ค๊ณํ๋ค. ์ด ๊ณผ์ ์ ํตํดupdateBlockAttributesํจ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์์ธ ์ ์ค ์๋ ์์ ํ ๋ฐ์ ์์คํ ์ ๊ตฌ์ถํ๋ค. - ๊ณต์ ์ ์ฅ์ ๊ฐ์ด๋๋ผ์ธ ์ค์: ์๋ํ๋ ์ค ๊ณต์ ์ ์ฅ์ ๋ฑ๋ก์ ๋ชฉํ๋ก ํ๊ธฐ์ ๋ณด์(Escaping), ๊ตญ์ ํ(I18n), ์ฝ๋ฉ ํ์ค์ ์ฒ ์ ํ ์ง์ผฐ๋ค. ํนํ ํ๋ฌ๊ทธ์ธ ๋ช ์นญ ๊ท์ ๋ฑ ๊น๋ค๋ก์ด ๊ฐ์ด๋๋ผ์ธ์ ์ค์ํ๊ธฐ ์ํด ์์ฐจ๋ก์ ๋ฆฌํฉํ ๋ง ๊ณผ์ ์ ๊ฑฐ์น๋ฉฐ ์์ฑ๋๋ฅผ ๋์๋ค.

๋ค์๋ฒ์ ssl ์ ์ฉ๊ธฐ๋ฅผ ์ ์ด๋ณด๊ฒ ๋ค.

