n8n ๋„์ปค ์„ค์น˜ํ–ˆ๋Š”๋ฐ 5678 ํฌํŠธ ์ ‘์† ์•ˆ๋จ ํ•ด๊ฒฐ

 ๋„์ปค(Docker)๋กœ n8n์„ ์„ค์น˜ํ–ˆ๋Š”๋ฐ 5678 ํฌํŠธ๋กœ ์ ‘์†๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๋Š” ์ฃผ๋กœ ํฌํŠธ ํฌ์›Œ๋”ฉ ๋ˆ„๋ฝ, ๋ฐฉํ™”๋ฒฝ ์ฐจ๋‹จ, ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์‹คํŒจ, ๋˜๋Š” ๋ฐ”์ธ๋”ฉ ์ฃผ์†Œ ๋ฌธ์ œ ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์”ฉ ์ฒดํฌํ•˜๋ฉด์„œ ํ•ด๊ฒฐํ•ด ๋ณด์„ธ์š”. 1. ๋„์ปค ์‹คํ–‰ ๋ช…๋ น์–ด(ํฌํŠธ ํฌ์›Œ๋”ฉ) ํ™•์ธ ๋„์ปค ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์™ธ๋ถ€ ํฌํŠธ์™€ ๋‚ด๋ถ€ ํฌํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” -p 5678:5678 ์˜ต์…˜์ด ๋ˆ„๋ฝ๋˜์—ˆ๊ฑฐ๋‚˜ ์ž˜๋ชป๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์›์ธ: ๋งŒ์•ฝ ์‹คํ–‰ ๋ช…๋ น์–ด์— -p 5678:5678 ์ด ์—†์—ˆ๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ ๋‚ด๋ถ€์—์„œ๋Š” n8n์ด ๋Œ๊ณ  ์žˆ์ง€๋งŒ, PC๋‚˜ ์„œ๋ฒ„ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•: ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ํฌํŠธ ์˜ต์…˜์„ ๋ช…ํ™•ํžˆ ์ฃผ์–ด ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Bash # ๊ธฐ์กด ์ปจํ…Œ์ด๋„ˆ ์ค‘์ง€ ๋ฐ ์‚ญ์ œ docker stop n8n docker rm n8n # ํฌํŠธ ํฌ์›Œ๋”ฉ์„ ํฌํ•จํ•˜์—ฌ ์žฌ์‹คํ–‰ docker run -d --name n8n -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n 2. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ •์ƒ ์‹คํ–‰ ์ค‘์ธ์ง€ ํ™•์ธ (Crash ์ฒดํฌ) ๋ช…๋ น์–ด๋Š” ์ •์ƒ ์ž…๋ ฅํ–ˆ์œผ๋‚˜ n8n ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋–ค ์ด์œ (๊ถŒํ•œ ์˜ค๋ฅ˜, ๋””๋ ‰ํ† ๋ฆฌ ๋ฌธ์ œ ๋“ฑ)๋กœ ์‹คํ–‰ ์งํ›„ ์ข…๋ฃŒ๋˜์—ˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด ์ƒํƒœ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค: Bash docker ps -a ์ฒดํฌ ํฌ์ธํŠธ: STATUS ์—ด์„ ํ™•์ธํ•˜์„ธ์š”. Up ... hours ๋ผ๊ณ  ๋˜์–ด ์žˆ์œผ๋ฉด ์ •์ƒ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. Exited (1) ... ์ฒ˜๋Ÿผ ์ข…๋ฃŒ๋˜์–ด ์žˆ๋‹ค๋ฉด ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—๋Ÿฌ ๋กœ๊ทธ ํ™•์ธ: ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ฃฝ์–ด์žˆ๋‹ค๋ฉด ์•„๋ž˜ ๋ช…๋ น์–ด๋กœ ์›์ธ์„ ํŒŒ์•…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Bash docker logs n8n (๋กœ๊ทธ์— ๊ถŒํ•œ ์˜ค๋ฅ˜( Permission denied )๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ณผ๋ฅจ ๋งคํ•‘ํ•œ ํด๋”( ~/.n8n )์˜ ์†Œ์œ ๊ถŒ์ด๋‚˜ ๊ถŒํ•œ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.) 3. ๋ฐฉํ™”๋ฒฝ(Firewall) ์„ค์ • ํ™•์ธ ์˜ค๋ผํด ํด๋ผ์šฐ๋“œ, AWS, ๋„ค์ด๋ฒ„ ํด๋ผ์šฐ๋“œ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์ด๊ฑฐ๋‚˜ ์šฐ๋ถ„ํˆฌ/๋ฆฌ๋ˆ…์Šค ์„œ๋ฒ„ ์ž์ฒด ๋ฐฉํ™”๋ฒฝ์ด ์ผœ์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ํด...

n8n๊ณผ ์›น ํฌ๋กค๋Ÿฌ๋ฅผ ์—ฐ๋™ํ•˜์—ฌ 24์‹œ๊ฐ„ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ๋งŒ๋“ค๊ธฐ

 n8n + ์›น ํฌ๋กค๋Ÿฌ๋กœ 24์‹œ๊ฐ„ ์ž๋™ํ™” ์›Œํฌํ”Œ๋กœ์šฐ ๋งŒ๋“œ๋Š” ๊ฑด ์ถฉ๋ถ„ํžˆ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ๊ทธ๋ƒฅ “๋Œ๋ฆฐ๋‹ค” ์ˆ˜์ค€์œผ๋กœ ํ•˜๋ฉด ๊ธˆ๋ฐฉ ๋ง‰ํžˆ๊ฑฐ๋‚˜(์ฐจ๋‹จ, 403, IP๋ธ”๋ฝ), ๋ฐ์ดํ„ฐ๊ฐ€ ๊นจ์ง‘๋‹ˆ๋‹ค. ๊ตฌ์กฐ๋ฅผ ์ œ๋Œ€๋กœ ์žก์•„์•ผ ๋ˆ ๋˜๋Š” ์‹œ์Šคํ…œ์ด ๋ฉ๋‹ˆ๋‹ค.


์•„๋ž˜๋Š” ์ดˆ๋ณด → ์‹ค์ „ ์ˆ˜์ตํ™”๊นŒ์ง€ ๊ฐ€๋Šฅํ•œ ์„ค๊ณ„์ž…๋‹ˆ๋‹ค.


1️⃣ ์ „์ฒด ๊ตฌ์กฐ (ํ•ต์‹ฌ ์ดํ•ด)

6


๐Ÿ‘‰ ๊ธฐ๋ณธ ํ๋ฆ„์€ ์ด๊ฑฐ ํ•˜๋‚˜๋กœ ๋๋‚ฉ๋‹ˆ๋‹ค:


[ํฌ๋ก  ์‹คํ–‰] → [์›น ํฌ๋กค๋ง] → [๋ฐ์ดํ„ฐ ๊ฐ€๊ณต] → [์ €์žฅ] → [์•Œ๋ฆผ/๋ฐฐํฌ]


✔ ๊ตฌ์„ฑ ์š”์†Œ


n8n → ์ž๋™ํ™” ์—”์ง„ (๋‘๋‡Œ)

ํฌ๋กค๋Ÿฌ → ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ (์†)

DB → ์ €์žฅ (๊ธฐ์–ต)

ํ”„๋ก์‹œ/ํ—ค๋“œ๋ฆฌ์Šค → ์ฐจ๋‹จ ํšŒํ”ผ (๋ฐฉํŒจ)

2️⃣ n8n ์›Œํฌํ”Œ๋กœ์šฐ ๊ธฐ๋ณธ ๊ตฌ์„ฑ

① Cron (์ž๋™ ์‹คํ–‰)

5๋ถ„ / 10๋ถ„ / 1์‹œ๊ฐ„ ๊ฐ„๊ฒฉ ์„ค์ •

② HTTP Request (ํฌ๋กค๋ง)

GET ์š”์ฒญ์œผ๋กœ ํŽ˜์ด์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

User-Agent ํ•„์ˆ˜ ์„ค์ •

③ HTML Extract (๋ฐ์ดํ„ฐ ์ถ”์ถœ)

CSS Selector ์‚ฌ์šฉ

์˜ˆ: .title, .price

④ Function Node (๋ฐ์ดํ„ฐ ๊ฐ€๊ณต)

return items.map(item => {

  return {

    json: {

      title: item.json.title.trim(),

      price: parseInt(item.json.price.replace(/,/g, ''))

    }

  }

});

⑤ DB ์ €์žฅ

MySQL / PostgreSQL ์ถ”์ฒœ

⑥ IF ์กฐ๊ฑด

๊ฐ€๊ฒฉ ๋ณ€๋™ / ์‹ ๊ทœ ๋ฐ์ดํ„ฐ ํ•„ํ„ฐ๋ง

⑦ ์•Œ๋ฆผ

ํ…”๋ ˆ๊ทธ๋žจ / ๋””์Šค์ฝ”๋“œ / ์ด๋ฉ”์ผ

3️⃣ ํฌ๋กค๋ง ๋ฐฉ์‹ ์„ ํƒ (์ค‘์š”)

✔ 1. ๋‹จ์ˆœ ์‚ฌ์ดํŠธ (์ •์ )

n8n HTTP๋กœ ์ถฉ๋ถ„

์†๋„ ๋น ๋ฆ„

✔ 2. ๋™์  ์‚ฌ์ดํŠธ (JS ๋ Œ๋”๋ง)

4


๐Ÿ‘‰ ์ด๊ฑด ๋ฌด์กฐ๊ฑด ํ•„์š”:


Puppeteer

Playwright


๐Ÿ‘‰ n8n์—์„œ ์‹คํ–‰ ๋ฐฉ๋ฒ•


Execute Command node

๋˜๋Š” Webhook์œผ๋กœ ์™ธ๋ถ€ ์„œ๋ฒ„ ํ˜ธ์ถœ

4️⃣ 24์‹œ๊ฐ„ ์•ˆ์ • ์šด์˜ ํ•ต์‹ฌ (์—ฌ๊ธฐ์„œ 90% ๊ฐˆ๋ฆผ)

๐Ÿšซ ์‹คํŒจํ•˜๋Š” ๊ตฌ์กฐ

IP 1๊ฐœ๋กœ ๊ณ„์† ๊ธ์Œ

ํ—ค๋” ์—†์Œ

์†๋„ ๋น ๋ฆ„

→ ๋ฐ”๋กœ ์ฐจ๋‹จ๋จ

✔ ํ•„์ˆ˜ ์š”์†Œ

① ํ”„๋ก์‹œ (IP ๋ถ„์‚ฐ)

Rotating Proxy

์ตœ์†Œ 5~20๊ฐœ

② User-Agent ๋žœ๋ค

const agents = [

  "Mozilla/5.0 ... Chrome",

  "Mozilla/5.0 ... Safari"

];

③ ์š”์ฒญ ๊ฐ„ ๋”œ๋ ˆ์ด

2~10์ดˆ ๋žœ๋ค

④ ์—๋Ÿฌ ์žฌ์‹œ๋„

n8n Retry ๊ธฐ๋Šฅ ์‚ฌ์šฉ

5️⃣ ์‹ค์ œ ๋ˆ ๋˜๋Š” ์ž๋™ํ™” ์˜ˆ์‹œ

๐Ÿ’ฐ 1. ๊ฐ€๊ฒฉ ์ถ”์  (์ฟ ํŒก/๋„ค์ด๋ฒ„)

๊ฐ€๊ฒฉ ๋–จ์–ด์ง€๋ฉด ์•Œ๋ฆผ

์ œํœด๋งˆ์ผ€ํŒ… ์—ฐ๊ฒฐ

๐Ÿ’ฐ 2. ๋‰ด์Šค/์ด์Šˆ ์ž๋™ ์ˆ˜์ง‘

ํ‚ค์›Œ๋“œ ํฌ๋กค๋ง → ๋ธ”๋กœ๊ทธ ์ž๋™ ์ž‘์„ฑ

๐Ÿ’ฐ 3. ์ฑ„์šฉ/์ž…์ฐฐ ์ •๋ณด

์‹ ๊ทœ ๊ณต๊ณ  ๊ฐ์ง€ → ํ…”๋ ˆ๊ทธ๋žจ ์ „์†ก

๐Ÿ’ฐ 4. SNS ์ฝ˜ํ…์ธ  ์ž๋™ ์ƒ์„ฑ

ํŠธ๋ Œ๋“œ → GPT → ์ž๋™ ์—…๋กœ๋“œ

6️⃣ ์„œ๋ฒ„ ๊ตฌ์„ฑ (ํ˜„์‹ค์ ์ธ ์ถ”์ฒœ)

✔ ์ตœ์†Œ ๊ตฌ์„ฑ

Ubuntu ์„œ๋ฒ„

Docker

n8n ์ปจํ…Œ์ด๋„ˆ


๐Ÿ‘‰ ์ถ”์ฒœ ์กฐํ•ฉ:


n8n + PostgreSQL

Redis (ํ ์ฒ˜๋ฆฌ)

7️⃣ ์ถ”์ฒœ ์ „์ฒด ๊ตฌ์กฐ (์‹ค์ „ํ˜•)

[CRON]

  ↓

[n8n]

  ↓

[Queue (Redis)]

  ↓

[ํฌ๋กค๋Ÿฌ ์„œ๋ฒ„ (Puppeteer)]

  ↓

[DB ์ €์žฅ]

  ↓

[AI ๊ฐ€๊ณต]

  ↓

[๋ธ”๋กœ๊ทธ / SNS ์ž๋™ ์—…๋กœ๋“œ]

8️⃣ ํ”ํ•œ ๋ฌธ์ œ (๋ฏธ๋ฆฌ ๋ง‰์•„๋ผ)

403 Forbidden → ํ—ค๋” ๋ฌธ์ œ

CAPTCHA → ํ”„๋ก์‹œ + ์†๋„ ์กฐ์ ˆ

๋ฐ์ดํ„ฐ ๊นจ์ง → selector ์ž˜๋ชป

์„œ๋ฒ„ ๋‹ค์šด → Docker ์žฌ์‹œ์ž‘ ์„ค์ •

9️⃣ ํ•ต์‹ฌ ํ•œ์ค„ ์ •๋ฆฌ


๐Ÿ‘‰ “ํฌ๋กค๋ง”๋ณด๋‹ค ์ค‘์š”ํ•œ ๊ฑด

์•ˆ ๋ง‰ํžˆ๊ณ  24์‹œ๊ฐ„ ๋Œ์•„๊ฐ€๋Š” ๊ตฌ์กฐ ์„ค๊ณ„๋‹ค.

์ด ๋ธ”๋กœ๊ทธ์˜ ์ธ๊ธฐ ๊ฒŒ์‹œ๋ฌผ

ํด๋กœ๋“œ ์ฝ”๋“œ React TypeScript ์Šคํƒ€์ผ ์ผ๊ด€์„ฑ ์œ ์ง€ ํŒ

๊ธฐํ˜ธ๋กœ ํ”„๋กœ์ ํŠธ ์ปจํ…์ŠคํŠธ ์‹ค์‹œ๊ฐ„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ•

ํด๋กœ๋“œ ์ฝ”๋“œ n8n ์›Œํฌํ”Œ๋กœ์šฐ ์ž๋™ํ™” ์—ฐ๋™ ๊ฐ€์ด๋“œ