Next.js ์๋ฒ ์ฝ๋์์ ๋งํฌ๋ค์ด์ ๋ณํํ๋ค ๋น๋๊ฐ ๊นจ์ง ๋ โ react-dom/server์ createContext ์๋ฌ
1. ์ํฉ
์ด์ํจ์์ "๋ณด๋ด๊ธฐ"๋ฅผ ๋๋ฅด๋ฉด ๋งํฌ๋ค์ด ์ด์์ด ๊ธ๋ก ๋ฐ๋๋ค. ๊ฐ๋ฐ๋ ธํธ๋ Lexical ์๋ํฐ๊ฐ ์ฝ๋ ํ์์ผ๋ก, ์คํ ๋ฆฌ๋ HTML๋ก ์ ์ฅํด์ผ ํ๋ค. ์ด ๋ณํ์ Next.js(App Router)์ ์๋ฒ ๋ผ์ฐํธ์์ ํ๋ ค๊ณ ํ๋ค.
๊ทธ๋ฐ๋ฐ ๋ณํ ์ฝ๋๋ฅผ ๋ฃ์ ๋น๋๊ฐ ๋ ๋ฒ ์ฐ๋ฌ์ ๊นจ์ก๋ค.
2. ์๋ฌ 1 โ react-dom/server
์คํ ๋ฆฌ์ฉ HTML ๋ณํ์ ์ฒ์์๋ React ์ปดํฌ๋ํธ๋ก ๋ง๋ค๊ณ react-dom/server๋ก ๋ฌธ์์ด์ ๋ฝ์ผ๋ ค ํ๋ค. ๊ทธ๋ฐ๋ฐ App Router ๋น๋์์ react-dom/server๋ฅผ importํ๋ ๊ฒ ์์ฒด๊ฐ ์๋ฌ๊ฐ ๋ฌ๋ค. [ํ์ธ ํ์: ์ ํํ ์๋ฌ ๋ฌธ๊ตฌ๋ ๋น๋ ๋ก๊ทธ์์ ๊ฐ์ ธ์ ๋ถ์ด๊ธฐ]
ํด๊ฒฐ์ React๋ฅผ ๊ฑฐ์น์ง ์๋ ๊ฒ์ด์๋ค. unified๋ก ๋งํฌ๋ค์ด์ ํ์ฑํ๊ณ HTML ๋ฌธ์์ด๋ก ๋ฐ๋ก ๋ด๋ณด๋ด๋ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ฐ๊ฟจ๋ค.
import { unified } from "unified";
import remarkParse from "remark-parse";
import remarkRehype from "remark-rehype";
import rehypeStringify from "rehype-stringify";
// ๋จ์ํํ ์. ์ค์ ํ์ผ์๋ ๋งํฌ ์ฃผ์ ๊ฒ์ฌ๊ฐ ๋ ๋ค์ด๊ฐ๋ค.
const file = await unified()
.use(remarkParse)
.use(remarkRehype)
.use(rehypeStringify)
.process(markdown);
const html = String(file);์คํ ๋ฆฌ ๋ณธ๋ฌธ์ HTML๋ก ์ ์ฅํ๊ณ dangerouslySetInnerHTML๋ก ๊ทธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ๋งํฌ ์ฃผ์๋ javascript: ๊ฐ์ ์ํํ ๊ฐ์ด ๋ค์ด๊ฐ์ง ์๋๋ก ๊ฑธ๋ฌ ์ฃผ๋ ์ฒ๋ฆฌ๋ ์ถ๊ฐํ๋ค.
3. ์๋ฌ 2 โ createContext is not a function
๊ฐ๋ฐ๋
ธํธ์ฉ ๋ณํ์ @lexical/headless๋ก ์๋ํฐ ์์ด ๋งํฌ๋ค์ด์ Lexical ๋ฐ์ดํฐ๋ก ๋ฐ๊พผ๋ค. ์ด๋ฒ์๋ ๋น๋๋ ํต๊ณผํ๋๋ฐ, ๋ผ์ฐํธ๊ฐ ์คํ๋์ ์ด๋ฐ ์๋ฌ๊ฐ ๋ฌ๋ค.
createContext is not a function์์ธ์ ์๋ํฐ์ ๋ฑ๋กํ๋ ค๊ณ importํ ๋
ธ๋ ํ๋์๋ค. @lexical/react์์ ๊ฐ์ ธ์จ HorizontalRuleNode๊ฐ ๋ด๋ถ์์ React์ context๋ฅผ ๋ง๋ ๋ค. ์๋ฒ ๋ผ์ฐํธ์์ ์ด๊ฑธ ๋ถ๋ฌ์ค๋ฉด React ์ชฝ ์ฝ๋๊ฐ ๊ฐ์ด ์คํ๋๋ฉด์ ํฐ์ง๋ค. ์ด ๋
ธ๋๋ฅผ ๋ณํ์ฉ ์๋ํฐ ๊ตฌ์ฑ์์ ๋นผ๋ ํด๊ฒฐ๋๋ค.
๋ณํ์ฉ ์๋ํฐ์๋ ์ ๋ชฉ, ์ธ์ฉ, ๋ชฉ๋ก, ์ฝ๋, ๋งํฌ์ฒ๋ผ ์๋ฒ์์ ๋ฌธ์ ์๋ ๋ ธ๋๋ง ๋จ๊ฒผ๋ค.
4. ๋ฐฐ์ด ๊ฒ
๋ ์๋ฌ์ ๋ฟ๋ฆฌ๋ ๊ฐ์๋ค. ์๋ฒ์์ ๋๋ ์ฝ๋์ React ์ชฝ ์ฝ๋๊ฐ ๋ธ๋ ค ๋ค์ด์๋ค๋ ๊ฒ์ด๋ค. ์๋ฌ ๋ฉ์์ง๋ ๋ฌ๋ผ๋ "์ด import๊ฐ React์ ์์กดํ๋?"๋ฅผ ๋ณด๋ฉด ์์ธ์ ๋นจ๋ฆฌ ์ฐพ๋๋ค.
[๋ณด๊ฐ: ์ด ์๋ฌ๋ฅผ AI์๊ฒ ๋ณด์ฌ์คฌ์ ๋ ์ด๋ค ๋ต์ด ์๋์ง, ๋ด๊ฐ ์ด๋ป๊ฒ ์์ธ์ ์ขํ๋์ง]
์ ๋ฆฌ
- ์๋ฒ ๋ผ์ฐํธ์์
react-dom/server๋ App Router ๋น๋์์ ๋งํ๋ค. ๋งํฌ๋ค์ดโHTML์unified๋ก ํ์. @lexical/react์ ๋ ธ๋๋ React์ ๊ธฐ๋๋ ๊ฒ ์๋ค. ์๋ฒ ๋ณํ์ฉ ์๋ํฐ์์๋ ๋นผ์.- "์๋ฒ์์ ๋๋ ์ฝ๋"์ import๋ React ์์กด์ฑ์ด ์๋์ง ํ์ธํ์.
๋ค์ ๊ธ์์๋ ๋ณํํ ๊ฒฐ๊ณผ๊ฐ ์๋ํฐ์์ ์ฝ๋๋ธ๋ก๊น์ง ์ ๋๋ก ์ด๋ฆฌ๋์ง ํ์ธํ ๊ณผ์ ์ ๋ค๋ค๋ณด๊ฒ ๋ค.
