AI/[AI_Personal] trial and error

[AI์ž๋™ํ™”] ๋„ค์ด๋ฒ„ ์ฆ๊ถŒ ๋ฐ์ดํ„ฐ ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ ๋งค์ผ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ(ํฌ๋กค๋ง, API ์—ฐ๋™)

_tami_ 2026. 2. 16. 08:00
๐Ÿ“Œ์ด ๊ธ€์— ๋‚˜์˜ค๋Š” ํˆด ์ •๋ณด๐Ÿ“Œ
1๏ธโƒฃ n8n
     -url: https://n8n.io/
     -์—ฌ๋Ÿฌ api๋ฅผ ํ•œ ๋ฒˆ์— ์—ฐ๋™ํ•ด ๋‚˜๋งŒ์˜ AI ์—์ด์ „ํŠธ ์ƒ์„ฑ ๊ฐ€๋Šฅ "๊ตฌ๋… ํ•„์š”"
2๏ธโƒฃfirecrawl
    -url: https://www.firecrawl.dev/  
    -๋„ค์ด๋ฒ„ ์‡ผํ•‘, ๋„ค์ด๋ฒ„ ๋‰ด์Šค, ๊ตฌ๊ธ€ ์‡ผํ•‘ ๋“ฑ ์—ฌ๋Ÿฌ api ๋“ค์„ ๋ชจ์•„๋†“์€ ๊ณณ "๊ฐ€์ž… ํ•„์š”"

 


์˜ค๋Š˜์€ ๋„ค์ด๋ฒ„ ์ฆ๊ถŒ(https://finance.naver.com/)์— ๋‚˜์™€์žˆ๋Š” ์ฝ”์Šคํ”ผ, S&P500, ๋‹ค์šฐ์ง€์ˆ˜, ํ™˜์œจ, ๊ตญ์ œ ์œ ๊ฐ€, ๊ตญ์ œ ๊ธˆ๊ฐ’ ๋ฐ์ดํ„ฐ๋ฅผ ํฌ๋กค๋งํ•ด ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์— ์ž๋™ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •๋ฆฌํ•ด ๋ณด๋ ค ํ•œ๋‹ค. 

 

'๋„ค์ด๋ฒ„ ์ฆ๊ถŒ โ–บ S&P500 โ–บ ์ผ๋ณ„ ์‹œ์„ธ'์— ๋‚˜์™€์žˆ๋Š” ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์— ๋งค์ผ ์—…๋ฐ์ดํŠธ๋˜๋„๋ก ํ•˜๋Š” ์ž‘์—…์ด๋ผ ๋ณด๋ฉด ๋œ๋‹ค. (S&P500, ๋‹ค์šฐ์ง€์ˆ˜๋Š” ์ „๋‚  ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ฌ ๊ฑฐ๋ผ S&P500 2/12 ๋ฐ์ดํ„ฐ๋Š” ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ 2/13๋กœ ์—…๋ฐ์ดํŠธ๋  ๊ฒƒ์ด๋‹ค.)

 

 


๐Ÿ“Œ๊ธ€ ์ˆœ์„œ
     -์ฒซ๋ฒˆ์งธ, n8n ์— firecrawl API ์—ฐ๋™ํ•˜๊ธฐ
     -๋‘๋ฒˆ์งธ, ํฌ๋กค๋ง ๋ฐ์ดํ„ฐ+๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์— ์—ฐ๊ฒฐํ•˜๊ธฐ
     -์„ธ๋ฒˆ์งธ, ์—…๋ฐ์ดํŠธ ์ผ์ • ์ •ํ•˜๊ธฐ
     -๋„ค๋ฒˆ์งธ, S&P500 ์™ธ ๋‹ค๋ฅธ ์ง€ํ‘œ๋“ค๋„ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด?

 

์šฐ์„ , n8n ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  "trigger manually"๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค. ์ด๊ฑธ ์—ฐ๊ฒฐํ•˜๋Š” ์ด์œ ๋Š” ์„ธํŒ… ์ค‘๊ฐ„์ค‘๊ฐ„ ์‹คํ–‰ํ•ด์„œ ๊ฒฐ๊ณผ๋ฌผ์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. 

01

 

[์ฒซ๋ฒˆ์งธ, n8n ์— firecrawl API ์—ฐ๋™ํ•˜๊ธฐ]

firecrawl( https://www.firecrawl.dev/ )โ–บ Scrap โ–บ ์ฐฝ์— ํฌ๋กค๋งํ•˜๋ ค๋Š” URL์„ ๋„ฃ์œผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค. ์ฐฝ ํ•˜๋‹จ "forma=JSON"์„ ์„ ํƒํ•˜๊ณ  GET CODE์—์„œ cURL์„ ๋ณต์‚ฌํ•œ๋‹ค. 

 

n8n์—์„œ Http request ๋ฅผ ํด๋ฆญํ•˜๊ณ  cURL์— ๋ถ™์—ฌ๋„ฃ๊ณ , execute step ์„ ํด๋ฆญํ•˜๋ฉด? ๋ญ”๊ฐ€ ์ž˜ ๋‚˜์˜จ ๊ฒƒ ๊ฐ™์ง€๋งŒ, ์ผ๋ณ„ ์‹œ์„ธ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. 

 

 

์ด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋‚ฌ์„ ๋•Œ๋Š”? ์ฑ—gpt ํ•œํ…Œ ๋ฌผ์–ด๋ณด๋ฉด ๋œ๋‹ค. ๊ฒฐ๋ก ์€ http request ์„ธํŒ…์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค. 

 

โ–ผJOSN ์˜์—ญ์—๋Š” ์ด๊ฑธ ๋ณต๋ถ™ํ•˜๋ฉด ๋œ๋‹คโ–ผ

{
  "url": "https://finance.naver.com/world/sise.naver?symbol=SPI@SPX&page=1",
  "onlyMainContent": false,
  "maxAge": 0,
  "waitFor": 2000,
  "proxy": "auto",
  "storeInCache": false,
  "formats": [
    {
      "type": "json",
      "prompt": "Extract the S&P 500 (SPI@SPX) daily prices table rows. Return an array 'daily' with: date, close, diff, rate, volume, amount. date format YYYY.MM.DD. Keep numbers as strings with commas if present.",
      "schema": {
        "type": "object",
        "properties": {
          "daily": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "date": { "type": "string" },
                "close": { "type": "string" },
                "diff": { "type": "string" },
                "rate": { "type": "string" },
                "volume": { "type": "string" },
                "amount": { "type": "string" }
              },
              "required": ["date", "close"]
            }
          }
        },
        "required": ["daily"]
      }
    }
  ]
}

 

๊ทธ๋ฆฌ๊ณ  ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ "execute step"์„ ํด๋ฆญํ•˜๋ฉด ์ผ๋ณ„ ์‹œ์„ธ ๋ถ€๋ถ„์ด ์ •์ƒ์ ์œผ๋กœ ๋Œ์–ด์™€ ์ง„๋‹ค.

 

[๋‘๋ฒˆ์งธ, ํฌ๋กค๋ง ๋ฐ์ดํ„ฐ+๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์— ์—ฐ๊ฒฐํ•˜๊ธฐ]

n8n์—์„œ + ๋…ธ๋“œ๋ฅผ ํด๋ฆญํ•˜๊ณ  google sheet โ–บ update row in sheet ๋ฅผ ํด๋ฆญํ•œ๋‹ค. 

 

credendtial to connect with ์—์„œ "+crete new credential"์„ ํด๋ฆญํ•˜๋ฉด ํŒ์—…์ฐฝ ํ•˜๋‹จ์— sign in with google ์ด ๋‚˜์˜จ๋‹ค. ๊ฑฐ๊ธฐ์„œ ๋‚ด google ๊ณ„์ •์„ ์—ฐ๋™ํ•œ๋‹ค. 

 

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด document ํ•ญ๋ชฉ์— ๋‚ด ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ์— ์žˆ๋Š” ๋ชจ๋“  ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ๋“ค์ด ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ๋œ๋‹ค. 

01

์—ฌ๊ธฐ์„œ ๋‚˜๋Š” S&P500 ์ง€ํ‘œ๋งŒ ์—…๋ฐ์ดํŠธํ•  ๊ฒƒ์ด๋ฏ€๋กœ ๋‚ ์งœ์™€ S&P500์„ ์ œ์™ธํ•˜๊ณ ๋Š” ๋ชจ๋‘ ์‚ญ์ œํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์™ผ์ชฝ์—์„œ ๋Œ์–ด์˜ค๊ธฐ๋งŒ ํ•˜๋ฉด ๋์ด๋‹ค. 

 

โ—๏ธ๋งŒ์•ฝ ์ „์ผ ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด? ๋ฐฉ๋ฒ•1๏ธโƒฃ

S&P500 ์ „๋‚  ์ข…๊ฐ€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค. 2์›” 12์ผ ํ•ญ๋ชฉ์— 2์›” 11์ผ ์ข…๊ฐ€๊ฐ€ ๋“ค์–ด๊ฐ€๋„๋ก ํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ. ์ด ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚ ์งœ์—๋Š” 2์›” 12์ผ, S&P500๊ฐ’์—๋Š” ์ „๋‚  close ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ์–ด์˜ค๋ฉด ๋œ๋‹ค.

 

โ—๏ธ2์›” 13์ผ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด? ๋ฐฉ๋ฒ•2๏ธโƒฃ

์œ„์™€ ๊ฐ™์ด ํ•˜๋ฉด ์•„์‰ฌ์šด ์ ์€ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ ํ™•์ธ์ด ์–ด๋ ต๋‹ค๋Š” ๊ฑฐ๋‹ค. ์˜ค๋Š˜์ด 2/13์ด๋ผ 2/12 ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ์€๋ฐ 2/12์— 2/11 ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ฒŒ ๋˜๋Š” ๊ฒƒ! ๊ทธ๋ž˜์„œ 2/13์— 2/12 ์ข…๊ฐ€ ๋ฐ์ดํ„ฐ, ๋ง ๊ทธ๋Œ€๋กœ ๊ฐ€์žฅ ์ตœ๊ทผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ๋งˆ์ง€๋ง‰ ๋ฐ์ดํ„ฐ ๋‚ ์งœ(2/12)์— ํ•˜๋ฃจ๋ฅผ ๋”ํ•ด์„œ, 2/12 ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฒŒ ํ•˜๋ฉด ๋œ๋‹ค. 

 

โ‘ ๋‚ ์งœ์—๋Š” ์•„๋ž˜ JSON์„ ๋„ฃ๊ณ ,

{{ DateTime.fromFormat($json.data.json.daily[0].date, 'yyyy.MM.dd')
  .plus({ days: 1 })
  .toFormat('yyyy-MM-dd') }}

 

โ‘ก2/12 colse ๊ฐ’์„ S&P500์— ๋Œ๊ณ  ์˜ค๋ฉด ๋œ๋‹ค.

 

โ€ผ๏ธ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฑด

๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์— ๋‚ ์งœ ํ˜•ํƒœ์™€ n8n์— ๋‚ ์งœ ํ˜•ํƒœ๊ฐ€ ๋งž์ง€ ์•Š์œผ๋ฉด ์ •์ƒ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๊ฐ€ ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. 

n8n์€ ๋‚ ์งœ ํ˜•ํƒœ๊ฐ€ "yyyy.mm.dd"์ด๊ณ  ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ๋Š” "yyyy-mm-dd"๋‹ค. ํ˜•ํƒœ๊ฐ€ ๋งž์ง€ ์•Š์œผ๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด๊ฑธ ๋งž์ถฐ์ค˜์•ผ ํ•œ๋‹ค. ๋‚˜๋Š” n8n ๋‚ ์งœ ํ•ญ๋ชฉ json์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค. (๋ฌผ๋ก  ๋‚˜๋Š” ๊ฐœ๋ฐœ์ฝ”๋“œ๋ฅผ 1๋„ ๋ชจ๋ฅด๋ฏ€๋กœ ์ฑ—gpt๊ฐ€ ์•Œ๋ ค์ค€ ์ฝ”๋“œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ณต๋ถ™ํ–ˆ๋‹ค.)

 

๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ํ–ˆ๋Š”๋ฐ๋„ ์˜ค๋ฅ˜๊ฐ€ ๋‚œ๋‹ค๋ฉด ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ ํ˜•ํƒœ์—์„œ 0์ด ์ œ์™ธ๋œ ๋‚ ์งœ๋กœ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ณด๋ฉด ๋œ๋‹ค. (2026-02-10 ์ด ์•„๋‹Œ 2026-2-10 ์ด๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜๊ธฐ ๋•Œ๋ฌธ) 

 

#์ˆ˜์ • ์ „
{{ $json.data.json.daily[0].date }}

#์ˆ˜์ • ํ›„
{{ $json.data.json.daily[0].date.replace(/\./g, '-') }}

 

 

์ด๋ ‡๊ฒŒ ํ•ด์„œ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ execute step์„ ํด๋ฆญํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์ƒ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด์˜ค๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

[์„ธ๋ฒˆ์งธ, ๋งค์ผ ํŠน์ • ์‹œ๊ฐ„์— ์—…๋ฐ์ดํŠธ๋˜๋„๋ก ํ•˜๊ธฐ]

์˜ค๋ฅธ์ชฝ + ๋ฅผ ํด๋ฆญํ•ด schedule trigger ๋ฅผ ํด๋ฆญํ•ด ์›ํ•˜๋Š” ์ผ์ •์„ ๋„ฃ๊ณ  ๋งจ ์•ž์ชฝ์— ์—ฐ๊ฒฐํ•ด์ฃผ๋ฉด ๋œ๋‹ค. 

012

 

[๋„ค๋ฒˆ์งธ, ๋„ค์ด๋ฒ„ ์ฆ๊ถŒ์—์„œ S&P500 ๋ง๊ณ  ๋‹ค๋ฅธ ์›ํ•˜๋Š” ์ง€ํ‘œ๋“ค๋„ ๋Œ๊ณ  ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด?]

์œ„ ์ž‘์—…์„ ๋ฐ˜๋ณตํ•ด์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค. 

 


์—ฌ๊ธฐ๊นŒ์ง€ ์ž‘์—…ํ–ˆ๋‹ค๋ฉด ์ด๋Ÿฐ ๊ณ ๋ฏผ์ด ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ตœ๊ทผ 7์ผ ์ „ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•  ์ˆœ ์—†์„๊นŒ?

 

์ด๊ฑด ๋‹ค์Œ ๊ธ€์—์„œ ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค. ์ด๊ฒƒ๊นŒ์ง€ ๊ฐ€๋Šฅํ•˜๋ฉด ์‘์šฉํ•  ๊ฒƒ๋“ค์ด ๋งŽ์•„์ง„๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ๋งˆ์ผ€ํ„ฐ ์ž…์žฅ์—์„œ ๋ฉ”ํƒ€/๊ตฌ๊ธ€ ๊ด‘๊ณ  ๊ด€๋ฆฌ์ž API๋ฅผ ์—ฐ๋™ โ–บ ๊ฐ ๋งค์ฒด ๊ด‘๊ณ  ์„ฑ๊ณผ๋ฅผ ์ตœ๊ทผ 30์ผ ์ „ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ์ž๋™์œผ๋กœ ๊ตฌ๊ธ€ ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ(๋ฐ์ผ๋ฆฌ ๋ฆฌํฌํŠธ ๋‚ด ๋กœ์šฐ ์‹œํŠธ)์— ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋งค์ฒด ๊ด‘๊ณ  ๊ด€๋ฆฌ์ž ๋“ค์–ด๊ฐ€์„œ ๋ฆฌํฌํŠธ ๋‹ค์šด๋ฐ›๊ณ  ๋ฐ์ผ๋ฆฌ ๋ฆฌํฌํŠธ์— ๋กœ์šฐ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

์—ฌํŠผ, ์œ„ ๊ด€๋ จ ๋‚ด์šฉ์€ ๋‹ค์Œ ๊ธ€์—์„œ ์ข€ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ฒ ๋‹ค.