๐ŸŒฑ <groot/>
ngrok์„ ์ง์ ‘ ๋งŒ๋“ค์—ˆ๋‹ค โ€” ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ๊ณต๊ฐœ URL๋กœ ์—ฌ๋Š” VSCode ํ™•์žฅ | Groot's Tech Blog
๐ŸŒWeb

ngrok์„ ์ง์ ‘ ๋งŒ๋“ค์—ˆ๋‹ค โ€” ๋กœ์ปฌ ์„œ๋ฒ„๋ฅผ ๊ณต๊ฐœ URL๋กœ ์—ฌ๋Š” VSCode ํ™•์žฅ

2026.07.02ยท2๋ถ„ ์ฝ๊ธฐ

"์ง€๊ธˆ ๋กœ์ปฌ์—์„œ ๋„๋Š” ๊ฑฐ, ํฐ์œผ๋กœ ์ข€ ๋ณผ ์ˆ˜ ์žˆ์„๊นŒ?"

๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ์ž์ฃผ ๊ฒช๋Š”๋‹ค. ๋กœ์ปฌ(localhost:3000)์—์„œ ๋Œ๊ณ  ์žˆ๋Š” ๊ฑธ ํฐ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ๊ฑฐ๋‚˜, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ์ž ๊น ๋ณด์—ฌ์ฃผ๊ณ  ์‹ถ์„ ๋•Œ. ngrok ๊ฐ™์€ ํ„ฐ๋„๋ง ๋„๊ตฌ๋ฅผ ์“ฐ๋ฉด ๋˜์ง€๋งŒ, ๋งค๋ฒˆ ํ„ฐ๋ฏธ๋„์„ ์ผœ๊ณ  ๋ช…๋ น์–ด๋ฅผ ์น˜๊ณ  URL์„ ๋ณต์‚ฌํ•˜๋Š” ํ๋ฆ„์ด ๋ฒˆ๊ฑฐ๋กœ์› ๋‹ค. ๋‚˜๋Š” VSCode ์•ˆ์—์„œ ๋ฒ„ํŠผ ํ•˜๋‚˜๋กœ ๋๋‚ด๊ณ  ์‹ถ์—ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋งŒ๋“ค์—ˆ๋‹ค. Custom Tunnel โ€” ๋กœ์ปฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„๋ฅผ ๊ณต๊ฐœ URL๋กœ ์—ด์–ด์ฃผ๋Š” VSCode ํ™•์žฅ. ์‚ฌ์ด๋“œ๋ฐ”์—์„œ ํฌํŠธ๋งŒ ๋„ฃ๊ณ  ์‹œ์ž‘ํ•˜๋ฉด ๊ณต๊ฐœ URL๊ณผ QR ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๊ณ , ์‹ฌ์ง€์–ด ์›๊ฒฉ ๋ธŒ๋ผ์šฐ์ €์˜ ์ฝ˜์†” ๋กœ๊ทธ๊นŒ์ง€ VSCode ์•ˆ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณธ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ "ํ„ฐ๋„"์ด ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋Š”, ๋งŒ๋“ค๊ธฐ ์ „์—” ๋‚˜๋„ ๋ง‰์—ฐํ–ˆ๋‹ค. ์ง์ ‘ ๋งŒ๋“ค์–ด๋ณด๋‹ˆ ๊ทธ ์•ˆ์— ์žฌ๋ฏธ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์ž”๋œฉ ์žˆ์—ˆ๋‹ค.

ํ„ฐ๋„์€ ์–ด๋–ป๊ฒŒ ๋šซ๋ฆฌ๋‚˜

ํ•ต์‹ฌ ๊ตฌ์กฐ๋Š” ์ด๋ ‡๋‹ค.

์™ธ๋ถ€ ๋ฐฉ๋ฌธ์ž โ”€โ”€HTTPโ”€โ”€โ–ถ ๊ณต๊ฐœ ์„œ๋ฒ„(Render ๋ฐฐํฌ)
                         โ”‚  โ–ฒ
              WebSocket  โ”‚  โ”‚  (์–‘๋ฐฉํ–ฅ ํ„ฐ๋„)
                         โ–ผ  โ”‚
                     ๋กœ์ปฌ ํด๋ผ์ด์–ธํŠธ โ”€โ”€HTTPโ”€โ”€โ–ถ localhost:3000

ํฌ์ธํŠธ๋Š” ๋กœ์ปฌ์—์„œ ๋ฐ”๊นฅ์œผ๋กœ WebSocket์„ ํ•˜๋‚˜ ์—ฐ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋ฐฉํ™”๋ฒฝยทNAT ์•ˆ์— ์žˆ๋Š” ๋กœ์ปฌ ๋จธ์‹ ์€ ์™ธ๋ถ€์—์„œ ์ง์ ‘ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋‹ค. ๋Œ€์‹  ๋กœ์ปฌ์ด ๋จผ์ € ๊ณต๊ฐœ ์„œ๋ฒ„๋กœ WebSocket ์—ฐ๊ฒฐ์„ ์—ด์–ด๋‘๋ฉด, ๊ทธ ์—ฐ๊ฒฐ์„ ํ†ต๋กœ ์‚ผ์•„ ๋ฐ”๊นฅ์˜ ์š”์ฒญ์„ ์•ˆ์œผ๋กœ ๋Œ์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

ํ๋ฆ„์„ ๋”ฐ๋ผ๊ฐ€๋ฉด:

  1. ์™ธ๋ถ€ ๋ฐฉ๋ฌธ์ž๊ฐ€ ๊ณต๊ฐœ URL(https://โ€ฆ/abc12345/page)์— ์ ‘์†
  2. ๊ณต๊ฐœ ์„œ๋ฒ„๊ฐ€ ๊ทธ HTTP ์š”์ฒญ์„ WebSocket์œผ๋กœ ๋กœ์ปฌ ํด๋ผ์ด์–ธํŠธ์— ์ „๋‹ฌ
  3. ๋กœ์ปฌ ํด๋ผ์ด์–ธํŠธ๊ฐ€ localhost:3000์— ์‹ค์ œ๋กœ ์š”์ฒญ
  4. ์‘๋‹ต์„ ๋‹ค์‹œ WebSocket์œผ๋กœ ์„œ๋ฒ„์— ๋Œ๋ ค์คŒ
  5. ์„œ๋ฒ„๊ฐ€ ์›๋ž˜ ๋ฐฉ๋ฌธ์ž์—๊ฒŒ ์‘๋‹ต

์ด ๋‹จ์ˆœํ•ด ๋ณด์ด๋Š” ์™•๋ณต์—, ์ƒ๊ฐ๋ณด๋‹ค ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ๋“ค์ด ์ˆจ์–ด ์žˆ์—ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์—์„œ ํŒ ๊ฒƒ๋“ค

๋ค: "์‚ฌ์šฉ์ž 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 ์„ค์น˜ ์—ฌ๋ถ€์™€ ์™„์ „ํžˆ ๋ฌด๊ด€ํ•ด์ง„๋‹ค. ๋‹จ ๋‘ ์ค„๋กœ "ํ™˜๊ฒฝ ์˜์กด์„ฑ"์ด๋ผ๋Š” ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ง€์› ๋‹ค.

โ† ๋ชฉ๋ก์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ
ยฉ 2026 ยท Groot's Tech Blog. Built with Gatsby ๐ŸŒฑ