ngrok์ ์ง์ ๋ง๋ค์๋ค โ ๋ก์ปฌ ์๋ฒ๋ฅผ ๊ณต๊ฐ URL๋ก ์ฌ๋ VSCode ํ์ฅ
"์ง๊ธ ๋ก์ปฌ์์ ๋๋ ๊ฑฐ, ํฐ์ผ๋ก ์ข ๋ณผ ์ ์์๊น?"
๊ฐ๋ฐํ๋ค ๋ณด๋ฉด ์์ฃผ ๊ฒช๋๋ค. ๋ก์ปฌ(localhost:3000)์์ ๋๊ณ ์๋ ๊ฑธ ํฐ์ผ๋ก
ํ์ธํ๊ณ ์ถ๊ฑฐ๋, ๋ค๋ฅธ ์ฌ๋์๊ฒ ์ ๊น ๋ณด์ฌ์ฃผ๊ณ ์ถ์ ๋. ngrok ๊ฐ์
ํฐ๋๋ง ๋๊ตฌ๋ฅผ ์ฐ๋ฉด ๋์ง๋ง, ๋งค๋ฒ ํฐ๋ฏธ๋์ ์ผ๊ณ ๋ช
๋ น์ด๋ฅผ ์น๊ณ URL์ ๋ณต์ฌํ๋
ํ๋ฆ์ด ๋ฒ๊ฑฐ๋ก์ ๋ค. ๋๋ VSCode ์์์ ๋ฒํผ ํ๋๋ก ๋๋ด๊ณ ์ถ์๋ค.
๊ทธ๋์ ๋ง๋ค์๋ค. Custom Tunnel โ ๋ก์ปฌ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๊ณต๊ฐ URL๋ก ์ด์ด์ฃผ๋ VSCode ํ์ฅ. ์ฌ์ด๋๋ฐ์์ ํฌํธ๋ง ๋ฃ๊ณ ์์ํ๋ฉด ๊ณต๊ฐ URL๊ณผ QR ์ฝ๋๊ฐ ๋์ค๊ณ , ์ฌ์ง์ด ์๊ฒฉ ๋ธ๋ผ์ฐ์ ์ ์ฝ์ ๋ก๊ทธ๊น์ง VSCode ์์์ ์ค์๊ฐ์ผ๋ก ๋ณธ๋ค.
๊ทธ๋ฐ๋ฐ "ํฐ๋"์ด ์ค์ ๋ก ์ด๋ป๊ฒ ๋์ํ๋์ง๋, ๋ง๋ค๊ธฐ ์ ์ ๋๋ ๋ง์ฐํ๋ค. ์ง์ ๋ง๋ค์ด๋ณด๋ ๊ทธ ์์ ์ฌ๋ฏธ์๋ ๋ฌธ์ ๊ฐ ์๋ฉ ์์๋ค.
ํฐ๋์ ์ด๋ป๊ฒ ๋ซ๋ฆฌ๋
ํต์ฌ ๊ตฌ์กฐ๋ ์ด๋ ๋ค.
์ธ๋ถ ๋ฐฉ๋ฌธ์ โโHTTPโโโถ ๊ณต๊ฐ ์๋ฒ(Render ๋ฐฐํฌ)
โ โฒ
WebSocket โ โ (์๋ฐฉํฅ ํฐ๋)
โผ โ
๋ก์ปฌ ํด๋ผ์ด์ธํธ โโHTTPโโโถ localhost:3000
ํฌ์ธํธ๋ ๋ก์ปฌ์์ ๋ฐ๊นฅ์ผ๋ก WebSocket์ ํ๋ ์ฐ๋ค๋ ๊ฒ์ด๋ค. ๋ฐฉํ๋ฒฝยทNAT ์์ ์๋ ๋ก์ปฌ ๋จธ์ ์ ์ธ๋ถ์์ ์ง์ ์ ๊ทผํ ์ ์๋ค. ๋์ ๋ก์ปฌ์ด ๋จผ์ ๊ณต๊ฐ ์๋ฒ๋ก WebSocket ์ฐ๊ฒฐ์ ์ด์ด๋๋ฉด, ๊ทธ ์ฐ๊ฒฐ์ ํต๋ก ์ผ์ ๋ฐ๊นฅ์ ์์ฒญ์ ์์ผ๋ก ๋์ด์ฌ ์ ์๋ค.
ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ฉด:
- ์ธ๋ถ ๋ฐฉ๋ฌธ์๊ฐ ๊ณต๊ฐ URL(
https://โฆ/abc12345/page)์ ์ ์ - ๊ณต๊ฐ ์๋ฒ๊ฐ ๊ทธ HTTP ์์ฒญ์ WebSocket์ผ๋ก ๋ก์ปฌ ํด๋ผ์ด์ธํธ์ ์ ๋ฌ
- ๋ก์ปฌ ํด๋ผ์ด์ธํธ๊ฐ
localhost:3000์ ์ค์ ๋ก ์์ฒญ - ์๋ต์ ๋ค์ WebSocket์ผ๋ก ์๋ฒ์ ๋๋ ค์ค
- ์๋ฒ๊ฐ ์๋ ๋ฐฉ๋ฌธ์์๊ฒ ์๋ต
์ด ๋จ์ํด ๋ณด์ด๋ ์๋ณต์, ์๊ฐ๋ณด๋ค ๊น๋ค๋ก์ด ๋ฌธ์ ๋ค์ด ์จ์ด ์์๋ค.
์ด ํ๋ก์ ํธ์์ ํ ๊ฒ๋ค
- ๋จ๋ฐฉํฅ WebSocket์ ์๋ฐฉํฅ ์์ฒญ/์๋ต์ผ๋ก โ UUID์ Map์ผ๋ก ๋์ ์์ฒญ ๋งค์นญํ๊ธฐ
- ์ด๋ฏธ์งยทํฐํธ๋ฅผ ํ ์คํธ ์ฑ๋๋ก ๋๋ฅด๊ธฐ โ Base64์ Content-Type ์๋ ๊ต์
- SPA ์๋ก๊ณ ์นจ์๋ ํฐ๋์ด ์ ํ๋ฆฌ๊ฒ โ URL โ ์ฟ ํค โ ๋ฆฌ๋ค์ด๋ ํธ ์ถ์
- ์ฝ๋ ์์ ์์ด ์๊ฒฉ ์ฝ์ ๋ก๊ทธ ๊ฐ์ ธ์ค๊ธฐ โ HTML ์ฃผ์ + console ์ค๋ฒ๋ผ์ด๋
๋ค: "์ฌ์ฉ์ PC์ Node๊ฐ ์์ด๋" ๋๊ฒ ํ๊ธฐ
VSCode ํ์ฅ์์ ๋ก์ปฌ ํด๋ผ์ด์ธํธ(Node ์คํฌ๋ฆฝํธ)๋ฅผ ์์ ํ๋ก์ธ์ค๋ก ๋์์ผ ํ๋๋ฐ, ์ฌ์ฉ์ PC์ Node๊ฐ ์ค์น๋ผ ์์ผ๋ฆฌ๋ ๋ณด์ฅ์ด ์๋ค. PATH๊ฐ ๊ผฌ์ฌ ์์ ์๋ ์๋ค. ์ฌ๊ธฐ์ ์๋ฆฌํ ํธ๋ฆญ ํ๋. VSCode(=Electron) ์์๋ ์ด๋ฏธ Node๊ฐ ๋ค์ด ์๋ค. ๊ทธ Node๋ฅผ ๊ทธ๋๋ก ๋น๋ ค ์ด๋ค.
const tunnelProcess = spawn(process.execPath, args, {
env: { ...process.env, ELECTRON_RUN_AS_NODE: "1" },
});
process.execPath๋ ์คํ ์ค์ธ VSCode(Electron) ๋ฐ์ด๋๋ฆฌ ๊ฒฝ๋ก์ด๊ณ ,
ELECTRON_RUN_AS_NODE=1์ ์ฃผ๋ฉด ๊ทธ๊ฒ ์์ Node์ฒ๋ผ ๋์ํ๋ค. ์ฌ์ฉ์
ํ๊ฒฝ์ Node ์ค์น ์ฌ๋ถ์ ์์ ํ ๋ฌด๊ดํด์ง๋ค. ๋จ ๋ ์ค๋ก "ํ๊ฒฝ ์์กด์ฑ"์ด๋ผ๋
๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ง์ ๋ค.
- GitHub: debug_tool (Custom Tunnel)