์๋ณด๋ฉด ๋น์ ๋ง ์ํด ์ด๋ฏธ์ง ์ ์ํด
์ ๊ฒฝ์ฐ๊ธฐ ์ซ๋ค ํ์๋ฉด ์ฐ์ ์ด๊ฑฐ๋ถํฐ https://www.youtube.com/watch?v=XJ_RTQ43AjY ๋ณด์๊ณ ํด๋ณด์๊ธธ ๋ฐ๋๋๋ค ์ด๊ฒ๋ ์ด๋ ค์ฐ์๋ฉด ๋ธ๋ฃจ ๋ฐ์๋ ๋ ๊ด์ฐฎ๊ณ ๋ฐฉ๋ฒ์ ๋๋ ค์๋๋ฐ ์ด๋ ์ค์ง๋ชจ๋ฅด๊ฒ ์ต๋๋ค^^
ํฑํก ์ฝํ ์ธ ์ ์์๋ผ๋ฉด ๋๊ตฌ๋ ๊ณต๊ฐํ์ค ๊ฒ๋๋ค. ๋งค์ผ ๊ฐ์ ์๊ฐ์ ์์์ ์ ๋ก๋ํ๊ณ , ๋๊ธ์ ๋ต๋ณํ๊ณ , ํธ๋ ๋๋ฅผ ๋ถ์ํ๊ณ , ํด์ํ๊ทธ๋ฅผ ์ฐ๊ตฌํ๋ ์ผ์. ์ฒ์์ ์ฌ๋ฏธ์์ง๋ง, ์๊ฐ์ด ์ง๋ ์๋ก ์ด ๋ฐ๋ณต์ ์ธ ์์ ๋ค์ด ์ฐฝ์์ฑ์ ๊ฐ์๋จน๋๋ค๋ ๊ฑธ ๋๋ผ๊ฒ ๋ฉ๋๋ค.
๋ฐ๋ก ์ด ์ง์ ์์ n8n๊ณผ ๊ฐ์ ์ํฌํ๋ก์ฐ ์๋ํ ๋๊ตฌ๊ฐ ๋น์ ๋ฐํฉ๋๋ค. n8n์ ์คํ์์ค ์ํฌํ๋ก์ฐ ์๋ํ ํ๋ซํผ์ผ๋ก, ์ฝ๋ฉ ์์ด๋ ๋ณต์กํ ์๋ํ ์์คํ ์ ๊ตฌ์ถํ ์ ์๊ฒ ํด์ค๋๋ค. ํนํ ํฑํก๊ณผ ๊ฐ์ ์์ ๋ฏธ๋์ด ์ด์์์ ๋ฐ๋ณต์ ์ธ ์์ ์ ์๋ํํ๋ฉด, ์ฌ๋ฌ๋ถ์ ์ ๋ง ์ค์ํ ์ผ, ์ฆ ์ข์ ์ฝํ ์ธ ๋ฅผ ๋ง๋๋ ๋ฐ ์ง์คํ ์ ์์ต๋๋ค.
๋ชจ๋ ์ํฌํ๋ก์ฐ๋ ํธ๋ฆฌ๊ฑฐ์์ ์์๋ฉ๋๋ค. n8n์์๋ ๋ค์ํ ํธ๋ฆฌ๊ฑฐ๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
์ค์ผ์ค ํธ๋ฆฌ๊ฑฐ: ๋งค์ผ ์คํ 6์์ ์๋์ผ๋ก ์ฝํ ์ธ ๋ฅผ ๊ฒ์ํ๊ณ ์ถ๋ค๋ฉด 'Schedule Trigger' ๋ ธ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. Cron ํํ์์ ์ฌ์ฉํ์ฌ ์ ํํ ์๊ฐ์ ์ค์ ํ ์ ์์ต๋๋ค.
์นํ ํธ๋ฆฌ๊ฑฐ: ์ธ๋ถ ์๋น์ค์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ฆ์ ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์๋ก์ด ํธ๋ ๋๊ฐ ๊ฐ์ง๋๋ฉด ์๋ฆผ์ ๋ฐ๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
ํด๋ง ํธ๋ฆฌ๊ฑฐ: ํน์ ์กฐ๊ฑด์ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๊ณ ์ถ์ ๋ ์ฌ์ฉํฉ๋๋ค. ๊ฒฝ์์ฌ์ ์ ์์์ด ์ฌ๋ผ์๋์ง 10๋ถ๋ง๋ค ์ฒดํฌํ๋ ์์ ๋๋ค.
ํฑํก ์๋ํ์์ ๊ฐ์ฅ ์ค์ํ ๋ถ๋ถ์ ๋๋ค. n8n์ HTTP Request ๋ ธ๋๋ฅผ ํ์ฉํ์ฌ ํฑํก API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
ํธ๋ ๋ ํด์ํ๊ทธ ์์ง: ํฑํก API ๋๋ ์๋ํํฐ ๋ถ์ ๋๊ตฌ์์ ํ์ฌ ํธ๋ ๋ฉ ์ค์ธ ํด์ํ๊ทธ๋ฅผ ์์งํฉ๋๋ค. 'HTTP Request' ๋ ธ๋๋ก API๋ฅผ ํธ์ถํ๊ณ , 'Set' ๋ ธ๋๋ก ํ์ํ ๋ฐ์ดํฐ๋ง ์ถ์ถํฉ๋๋ค.
๊ฒฝ์์ฌ ๋ชจ๋ํฐ๋ง: RSS ํผ๋๋ ์คํฌ๋ํ์ ํตํด ๊ฒฝ์์ฌ์ ์ฝํ ์ธ ๋ฅผ ์ถ์ ํฉ๋๋ค. 'HTML Extract' ๋ ธ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์นํ์ด์ง์์ ํน์ ์ ๋ณด๋ฅผ ์ฝ๊ฒ ์ถ์ถํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ์ ์ : 'Code' ๋ ธ๋์์ JavaScript๋ฅผ ์ฌ์ฉํด ๋ณต์กํ ๋ฐ์ดํฐ ๋ณํ์ ์ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์งํ ํด์ํ๊ทธ ์ค ์กฐํ์๊ฐ 100๋ง ์ด์์ธ ๊ฒ๋ง ํํฐ๋งํ๋ ๋ก์ง์ ์์ฑํ ์ ์์ต๋๋ค.
n8n์ ๊ฐ๋ ฅํ ์ ์ AI ์๋น์ค์์ ํตํฉ์ ๋๋ค. OpenAI, Claude API ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ฝํ ์ธ ์์ด๋์ด๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์บก์ ์๋ ์์ฑ: ์ ๋ก๋ํ ์์์ ์ฃผ์ ๋ฅผ ์ ๋ ฅํ๋ฉด AI๊ฐ ๋งค๋ ฅ์ ์ธ ์บก์ ๊ณผ ํด์ํ๊ทธ๋ฅผ ์๋์ผ๋ก ์์ฑํฉ๋๋ค. 'OpenAI' ๋ ธ๋์ ํ๋กฌํํธ๋ฅผ ์ค์ ํ์ฌ ๋ธ๋๋ ํค์ ๋ง๋ ํ ์คํธ๋ฅผ ๋ง๋ค์ด๋ ๋๋ค.
ํธ๋ ๋ ๋ถ์: ์์งํ ๋ฐ์ดํฐ๋ฅผ AI์๊ฒ ๋ถ์์์ผ ๋ค์ ์ฝํ ์ธ ์ ๋ต์ ์ ์๋ฐ์ ์ ์์ต๋๋ค. "์ด๋ฒ ์ฃผ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ํด์ํ๊ทธ ์กฐํฉ์ ๋ฌด์์ธ๊ฐ?" ๊ฐ์ ์ง๋ฌธ์ ๋ํ ๋ต์ ์ป์ ์ ์์ต๋๋ค.
'IF' ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ํฌํ๋ก์ฐ์ ์กฐ๊ฑด๋ถ ๋ก์ง์ ์ถ๊ฐํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์์ฑ๋ ์บก์ ์ ๊ธธ์ด๊ฐ 150์๋ฅผ ์ด๊ณผํ๋ฉด ์๋์ผ๋ก ์ค์ด๋ ๋ถ๊ธฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋๋ ํน์ ํด์ํ๊ทธ๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ์๋ง ๊ฒ์๋ฅผ ์งํํ๋๋ก ์ค์ ํ ์ ์์ต๋๋ค.
์์ ๊ตฌ์กฐ:
์์งํ ๋ฐ์ดํฐ์ ์์ฑํ ์ฝํ ์ธ ๋ฅผ ์ฒด๊ณ์ ์ผ๋ก ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
Google Sheets ์ฐ๋: 'Google Sheets' ๋ ธ๋๋ก ๋ชจ๋ ๊ฒ์๋ฌผ์ ์ฑ๊ณผ๋ฅผ ์๋์ผ๋ก ๊ธฐ๋กํฉ๋๋ค. ๊ฒ์ ์๊ฐ, ํด์ํ๊ทธ, ์กฐํ์, ์ข์์ ์ ๋ฑ์ ์คํ๋ ๋์ํธ์ ์ ์ฅํ๋ฉด ๋์ค์ ๋ถ์ํ๊ธฐ ์ฝ์ต๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์ฅ: PostgreSQL, MongoDB ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ตฌ์กฐํ๋ ๋ฐ์ดํฐ ์ ์ฅ์๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. ๋๋์ ์ญ์ฌ์ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉํฉ๋๋ค.
ํ์ผ ๊ด๋ฆฌ: 'Write Binary File' ๋ ธ๋๋ก ์์ฑ๋ ์ด๋ฏธ์ง๋ ๋น๋์ค๋ฅผ ๋ก์ปฌ ๋๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง์ ์ ์ฅํฉ๋๋ค.
์ํฌํ๋ก์ฐ๊ฐ ์ ๋๋ก ์๋ํ๋์ง ๋ชจ๋ํฐ๋งํ๋ ๊ฒ๋ ์ค์ํฉ๋๋ค.
Slack/Discord ์๋ฆผ: 'Slack' ๋๋ 'Discord' ๋ ธ๋๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ํ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ๋ฉด ์ฆ์ ์๋ฆผ์ ๋ฐ์ต๋๋ค. "์ ์์์ด ์ฑ๊ณต์ ์ผ๋ก ์ ๋ก๋๋์์ต๋๋ค" ๋๋ "API ํธ์ถ ์คํจ" ๊ฐ์ ๋ฉ์์ง๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
์ด๋ฉ์ผ ์๋ฆผ: 'Send Email' ๋ ธ๋๋ก ์ผ์ผ ๋ฆฌํฌํธ๋ฅผ ์๋์ผ๋ก ๋ฐ์ ์ ์์ต๋๋ค. ์ค๋ ๊ฒ์๋ ์ฝํ ์ธ ์ ์ฑ๊ณผ ์์ฝ์ ๋งค์ผ ์์นจ ์ด๋ฉ์ผ๋ก ๋ฐ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
์๋ฌ ํธ๋ค๋ง: 'Error Trigger' ๋ ธ๋๋ฅผ ์ค์ ํ์ฌ ์ํฌํ๋ก์ฐ์์ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์๋์ผ๋ก ๋ก๊ทธ๋ฅผ ๊ธฐ๋กํ๊ณ ์๋ฆผ์ ๋ณด๋ ๋๋ค.
ํธ๋ ๋ ๊ธฐ๋ฐ ์ฝํ ์ธ ์ ์ ์๋ํ:
๋๊ธ ์๋ ์๋ต ์์คํ :
API ์ ํ ๊ด๋ฆฌ: ํฑํก API๋ ํธ์ถ ํ์ ์ ํ์ด ์์ต๋๋ค. 'Wait' ๋ ธ๋๋ฅผ ํ์ฉํ์ฌ ์์ฒญ ์ฌ์ด์ ์ ์ ํ ์ง์ฐ์ ๋์ธ์.
ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ: ๋ณธ ๊ณ์ ์ ๋ฐ๋ก ์ ์ฉํ๊ธฐ ์ ์ ํ ์คํธ ๊ณ์ ์ผ๋ก ์ถฉ๋ถํ ๊ฒ์ฆํ์ธ์. n8n์ 'Execute Workflow' ๋ ธ๋๋ก ํ ์คํธ ๋ชจ๋๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
๋ฒ์ ๊ด๋ฆฌ: ์ํฌํ๋ก์ฐ๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ๋ฐฑ์ ํ๊ณ , ์ค์ํ ๋ณ๊ฒฝ์ฌํญ์ ๋ฌธ์ํํ์ธ์. n8n์ JSON ํํ๋ก ์ํฌํ๋ก์ฐ๋ฅผ ์ ์ฅํ๋ฏ๋ก Git์ผ๋ก ๋ฒ์ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
์ ์ง์ ํ์ฅ: ์ฒ์๋ถํฐ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ค ํ์ง ๋ง์ธ์. ๊ฐ๋จํ ์ํฌํ๋ก์ฐ๋ถํฐ ์์ํด์ ํ์์ ๋ฐ๋ผ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
n8n์ ํ์ฉํ ํฑํก ์๋ํ๋ ๋จ์ํ ์๊ฐ์ ์ ์ฝํ๋ ๊ฒ์ ๋์ด, ๋ฐ์ดํฐ ๊ธฐ๋ฐ์ ์ ๋ต์ ์ฝํ ์ธ ์ด์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋ฐ๋ณต์ ์ธ ์์ ์์ ํด๋ฐฉ๋๋ฉด, ์ฌ๋ฌ๋ถ์ ๋ ์ฐฝ์์ ์ธ ์ฝํ ์ธ ๋ฅผ ๋ง๋ค๊ณ , ์ปค๋ฎค๋ํฐ์ ๋ ๊น์ด ์ํตํ๋ฉฐ, ๋ธ๋๋๋ฅผ ์ฑ์ฅ์ํค๋ ๋ฐ ์ง์คํ ์ ์์ต๋๋ค.
์ฒ์์ ๋ณต์กํด ๋ณด์ผ ์ ์์ง๋ง, n8n์ ์ง๊ด์ ์ธ ๋๋๊ทธ ์ค ๋๋กญ ์ธํฐํ์ด์ค๋ ๋น๊ฐ๋ฐ์๋ ์ฝ๊ฒ ๋ฐฐ์ธ ์ ์์ต๋๋ค. ํ๋์ฉ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ฉฐ ์ํฌํ๋ก์ฐ๋ฅผ ๋ง๋ค์ด๊ฐ๋ ๊ณผ์ ์ ๋ง์น ๋ ๊ณ ๋ฅผ ์กฐ๋ฆฝํ๋ ๊ฒ์ฒ๋ผ ์ฆ๊ฒ์ต๋๋ค.
์ง๊ธ ๋ฐ๋ก ์์ํด๋ณด์ธ์. ์ฒซ ๋ฒ์งธ ์ํฌํ๋ก์ฐ๋ ๊ฐ๋จํ๊ฒ, ์๋ฅผ ๋ค์ด ๋งค์ผ ํธ๋ ๋ ํด์ํ๊ทธ๋ฅผ ์์งํ์ฌ ์คํ๋ ๋์ํธ์ ์ ์ฅํ๋ ๊ฒ๋ถํฐ ์์ํ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ฐจ AI ํตํฉ, ์๋ ๊ฒ์, ์ฑ๊ณผ ๋ถ์ ๋ฑ์ผ๋ก ํ์ฅํด ๋๊ฐ์ธ์.
n8n ๊ณต์ ์ฌ์ดํธ: https://n8n.io
n8n ๊ณต์ ๋ฌธ์: https://docs.n8n.io
n8n ์ปค๋ฎค๋ํฐ ํฌ๋ผ: https://community.n8n.io
ํฑํก ๊ฐ๋ฐ์ ํ๋ซํผ: https://developers.tiktok.com
n8n ์ํฌํ๋ก์ฐ ํ ํ๋ฆฟ: https://n8n.io/workflows
OpenAI API ๋ฌธ์: https://platform.openai.com/docs
Google Sheets API ๊ฐ์ด๋: https://developers.google.com/sheets/api
n8n ์ ํ๋ธ ํํ ๋ฆฌ์ผ: https://www.youtube.com/@n8n-io
n8n GitHub ์ ์ฅ์: https://github.com/n8n-io/n8n
Slack API ์ฐ๋ ๊ฐ์ด๋: https://api.slack.com
์ด ๋งํฌ๋ค์ ๋ถ๋งํฌํด๋๊ณ , ์ํฌํ๋ก์ฐ๋ฅผ ๊ตฌ์ถํ๋ฉด์ ํ์ํ ๋๋ง๋ค ์ฐธ๊ณ ํ์ธ์. ํนํ n8n ์ปค๋ฎค๋ํฐ ํฌ๋ผ์ ์ค์ ์ฌ๋ก์ ๋ฌธ์ ํด๊ฒฐ ํ์ด ๊ฐ๋ํ ๋ณด๋ฌผ์ฐฝ๊ณ ์ ๋๋ค.
ํฑํก ์ ๋ก๋ ์๋ํ๋ผ๋ฉด, n8n์์ “๋น์ ์ด ์จ๋ ํต์ฌ ๊ตฌ์กฐ(ํธ๋ฆฌ๊ฑฐ→์์ง/์ฒ๋ฆฌ→AI→์กฐ๊ฑด→์ ์ฅ→์๋ฆผ)”๋ฅผ ๊ทธ๋๋ก ์ ๋ก๋ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ฐ๊ฟ ๋ผ์ฐ๋ฉด ๋ฉ๋๋ค. ํต์ฌ์ ํฑํก์ด ๊ณต์์ ์ผ๋ก ์ ๊ณตํ๋ Content Posting API(Direct Post) ํ๋ฆ์ ๋ง์ถฐ n8n ๋ ธ๋๋ฅผ ๋ฐฐ์นํ๋ ๊ฑฐ์์. Source
์๋๋ n8n ๋ ธ๋ ์์(์ค๊ณ๋) + ๊ฐ ๋ ธ๋๊ฐ ํ๋ ์ผ(๊ฐ์ฃผํ ์ค๋ช ) + **์ ๋ก๋ ๋ฐฉ์ 2๊ฐ์ง(์ถ์ฒ ํฌํจ)**์ ๋๋ค.
0) ๋จผ์ ๊ฒฐ์ ํ ๊ฒ: ์ ๋ก๋ ๋ฐฉ์ 2๊ฐ์ง ์ค ๋ฌด์?
A์) URL๋ก ์ ๋ก๋(PULL_FROM_URL) — ์ด๋ณด์/๋ ธ์ฝ๋์ ๊ฐ์ฅ ์ฌ์(์ถ์ฒ)
- ์์ ํ์ผ์ ๋ด๊ฐ ๊ฐ์ง “๊ฒ์ฆ๋ ๋๋ฉ์ธ(verified domain)” URL์ ์ฌ๋ ค๋๊ณ , ํฑํก์ด ๊ทธ URL์์ ์์์ “๊ฐ์ ธ๊ฐ์” ๊ฒ์ํฉ๋๋ค.
- TikTok ๋ฌธ์์์
source=PULL_FROM_URL์ต์ ์ ๊ณต์ ์ ๊ณตํ๊ณ ์์ต๋๋ค. SourceB์) ํ์ผ ์ง์ ์ ๋ก๋(FILE_UPLOAD) — ๊ตฌํ ๋์ด๋ ๋์
- ํฑํก์ด ๋ด๋ ค์ฃผ๋
upload_url๋ก PUT ์ ๋ก๋๋ฅผ ํด์ผ ํ๊ณ , ํ์ผ ํฌ๊ธฐ/์ฒญํฌ ๋ฑ ๊ณ ๋ ค๊ฐ ๋ง์ต๋๋ค. ๋ฌธ์์๋upload_url๋ก PUT ํ๋ ํ๋ฆ์ด ๋์ต๋๋ค. Source1) n8n ์ ๋ก๋ ์๋ํ “ํ์ค ๋ ธ๋ ์ค๊ณ๋” (PULL_FROM_URL ๊ธฐ์ค, ์ถ์ฒ)
์๋๋ ๊ทธ๋๋ก n8n์ ๋ ธ๋๋ก ์ฎ๊ธฐ๋ฉด ๋๋ ๊ตฌ์กฐ์ ๋๋ค.
(1) Schedule Trigger
- ๋งค์ผ/๋งค์ฃผ/ํน์ ์๊ฐ์ ์ ๋ก๋ ์คํ
[๊ฐ์ฃผ] Schedule Trigger: “์ ํด์ง ์๊ฐ์ ์๋์ผ๋ก ์ํฌํ๋ก์ฐ ์์” ๋ ธ๋
(2) (์ ํ) Google Drive Trigger / Dropbox Trigger / S3 Trigger
- “์ ์์์ด ํด๋์ ๋ค์ด์ค๋ฉด ์ ๋ก๋” ๊ฐ์ ๋ฐฉ์์ด๋ฉด ์ฌ์ฉ
- ์ค์ผ์คํ(๋งค์ผ 18์ ์ ๋ก๋)์ด๋ฉด ๊ตณ์ด ์์ด๋ ๋จ
[๊ฐ์ฃผ] Trigger: ์ํฌํ๋ก์ฐ ์์์ (์๊ฐ/์ด๋ฒคํธ/์ ํ์ผ ๋ฑ)
(3) HTTP Request → TikTok OAuth ํ ํฐ ์ค๋น(์ค์)
ํฑํก API๋ ๋ณดํต ์ฌ์ฉ์ access_token์ด ํ์ํฉ๋๋ค. access_token์ ๋ง๋ฃ(24์๊ฐ)๋ ์ ์๊ณ refresh_token์ผ๋ก ๊ฐฑ์ ๊ฐ๋ฅํฉ๋๋ค. Source
- (์ด๋ฏธ ํ ํฐ์ด ์ ์ฅ๋ผ ์๋ค๋ฉด) “๋ง๋ฃ ์ฒดํฌ → ํ์ ์ refresh” ํ๋ฆ ์ถ์ฒ
- refresh๋ ๊ฐ์ ์๋ํฌ์ธํธ(
/v2/oauth/token/)์grant_type=refresh_token์ผ๋ก ํฉ๋๋ค. Source[๊ฐ์ฃผ] access_token: “ํฑํก์ด ์ด ์ฑ/์ํฌํ๋ก์ฐ๋ฅผ ๋ฏฟ๊ณ API ํธ์ถํ๊ฒ ํด์ฃผ๋ ์์ ์ถ์ ์ฆ”
[๊ฐ์ฃผ] refresh_token: “์ถ์ ์ฆ(access_token) ๋ง๋ฃ๋๋ฉด ์ ์ถ์ ์ฆ์ ๋ค์ ๋ฐ๋ ์ด์ ”(4) HTTP Request → Creator Info ์กฐํ(๊ถ์ฅ ๋จ๊ณ)
ํฑํก ๋ฌธ์ ํ๋ฆ์ ๋ฐ๋ฅด๋ฉด Direct Post ์ ์ creator_info/query๋ก ํฌ๋ฆฌ์์ดํฐ ์ค์ (ํ๋ผ์ด๋ฒ์ ์ต์ , ๋์ฃ/์คํฐ์น ๊ฐ๋ฅ ์ฌ๋ถ ๋ฑ)์ ์กฐํํฉ๋๋ค. Source
- Endpoint:
POST https://open.tiktokapis.com/v2/post/publish/creator_info/query/Source[๊ฐ์ฃผ] creator_info/query: “์ ๋ก๋ํ๋ ค๋ ๊ณ์ ์ ์ต์ ์ค์ /๊ฐ๋ฅ ์ต์ ์ ๋จผ์ ํ์ธํ๋ ๋จ๊ณ”
(5) Set ๋ ธ๋ → ๊ฒ์ ์ต์ ๋ง๋ค๊ธฐ(์บก์ /ํ๋ผ์ด๋ฒ์/๋๊ธํ์ฉ ๋ฑ)
์ฌ๊ธฐ์ ์ํฌํ๋ก์ฐ์ “๊ฒ์ ์ ์ฑ ”์ ํ์คํํฉ๋๋ค.
- title(์บก์ )
- privacy_level
- disable_comment / disable_duet / disable_stitch
- cover timestamp ๋ฑ
[๊ฐ์ฃผ] Set ๋ ธ๋: “ํ์ํ ๊ฐ๋ง ์ ๋ฆฌํด์ ๋ค์ ๋ ธ๋๋ค์ด ์ฐ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๋ ธ๋”
(6) (์ ํ) AI ๋ ธ๋ → ์บก์ /ํด์ํ๊ทธ ์๋ ์์ฑ
- ๋น์ ์ด ์์์ ์ ์ ๊ตฌ์กฐ(ํธ๋ ๋ ๋ถ์→AI ์บก์ ) ๊ทธ๋๋ก ๋ฃ์ผ๋ฉด ๋จ
- ์์ฑ๋ ํ ์คํธ๋ (5) Set ๋ ธ๋๋ก ๋ค์ ํฉ์ณ์ ์ต์ข title/description์ ๋ฐ์
[๊ฐ์ฃผ] ํ๋กฌํํธ(Prompt): AI์๊ฒ ์ํ๋ ํค/๊ธธ์ด/ํด์ํ๊ทธ ๊ท์น์ ์๋ ค์ฃผ๋ ์ง์๋ฌธ
(7) IF ๋ ธ๋ → “์ฌ๋ฆด์ง ๋ง์ง” ์ต์ข ํ๋จ(์์ ์ฅ์น)
์:
- ์บก์ 150์ ์ด๊ณผ → ์์ฝ ๋ฃจํธ
- ๊ธ์น์ด ํฌํจ → ์ ๋ก๋ ์ค๋จ + ์ฌ๋ ์๋ฆผ
- ์์ ๊ธธ์ด/ํ์ผํฌ๊ธฐ ์กฐ๊ฑด ๋ฏธ๋ฌ → ๋ณด๋ฅ
[๊ฐ์ฃผ] IF ๋ ธ๋: “์กฐ๊ฑด์ ๋ฐ๋ผ ๋ถ๊ธฐ(Yes/No ๊ธธ ๊ฐ๋ผ์ง)”
(8) ํต์ฌ ์ ๋ก๋ ๋จ๊ณ: HTTP Request →
video/init(PULL_FROM_URL)ํฑํก ๋ฌธ์์ “Post a video” ๋จ๊ณ์์
source=PULL_FROM_URL๋ก init ํธ์ถ์ด ๊ฐ๋ฅํฉ๋๋ค. Source
- Endpoint ์์๊ฐ ๋ฌธ์์ ์์ต๋๋ค:
POST https://open.tiktokapis.com/v2/post/publish/video/init/Source์ด๋ body์:
post_info.title(์บก์ )source_info.source = "PULL_FROM_URL"source_info.video_url = "https://...mp4"
์ ๋ฃ๋ ๊ตฌ์กฐ์ ๋๋ค. Source[๊ฐ์ฃผ] init(์ด๊ธฐํ) ํธ์ถ: “ํฑํก์๊ฒ ‘์ด ์์ ์ฌ๋ฆด ๊ฑด๋ฐ ์ค๋นํด์ค’๋ผ๊ณ ๋ฑ๋กํ๋ ๋จ๊ณ”
(9) HTTP Request → ์ํ ํ์ธ(status/fetch) + Wait(ํด๋ง)
๋ฌธ์์ ๋ฐ๋ฅด๋ฉด
publish_id๋ก ์ ๋ก๋/์ฒ๋ฆฌ ์ํ๋ฅผstatus/fetch๋ก ํ์ธํฉ๋๋ค. Source
- Endpoint:
POST https://open.tiktokapis.com/v2/post/publish/status/fetch/Source- ์ค๊ฐ์ Wait ๋ ธ๋๋ก 10์ด~30์ด ๊ฐ๊ฒฉ์ผ๋ก ๋ช ๋ฒ ์ฌ์๋(์ต๋ Nํ)ํ๋ ๋ฐฉ์์ด ์์ ์ ์ ๋๋ค.
[๊ฐ์ฃผ] status/fetch: “ํฑํก์ด ์์ ์ฒ๋ฆฌ ๋๋๋์ง/๊ฒ์๋๋์ง ํ์ธ”
[๊ฐ์ฃผ] Wait ๋ ธ๋: “์ ๊น ์ฌ์๋ค๊ฐ ๋ค์ ์์ฒญ(๊ณผํธ์ถ ๋ฐฉ์ง/์ฒ๋ฆฌ ๋๊ธฐ)”(10) Google Sheets / DB ์ ์ฅ
์ ๋ก๋ ๊ฒฐ๊ณผ(์๊ฐ, ์บก์ , publish_id, ์ฑ๊ณต/์คํจ, ๋งํฌ ๋ฑ) ๊ธฐ๋ก
[๊ฐ์ฃผ] ์๋ํ๋ “๊ธฐ๋ก”์ด ์์ด์ผ ๊ฐ์ ๋ฉ๋๋ค(์ด๋ค ์บก์ /ํด์ํ๊ทธ๊ฐ ์ฑ๊ณผ ์ข์์ง ๋์ค์ ๋ถ์)
(11) Slack/Discord ์๋ฆผ + Error Trigger
- ์ฑ๊ณต: “์ ๋ก๋ ์๋ฃ + ์์ฝ”
- ์คํจ: “์ด๋ ๋จ๊ณ์์ ์ ์คํจํ๋์ง(log_id ํฌํจ)”
- Error Trigger๋ก ์์ธ ํ๋ฆ ๋ถ๋ฆฌํ๋ฉด ์ด์์ด ํธํด์ง๋๋ค.
2) “FILE_UPLOAD(์ง์ ์ ๋ก๋)”๋ฅผ n8n์์ ํ๋ ค๋ฉด? (๋์ด๋ ๋์)
ํฑํก ๋ฌธ์ ํ๋ฆ์:
video/initํธ์ถ (source=FILE_UPLOAD, ํ์ผ ํฌ๊ธฐ/์ฒญํฌ ์ ๋ณด ํฌํจ) → ์๋ต์ผ๋กupload_url๋ฐ๊ธฐ- ๊ทธ
upload_url์ PUT๋ก ์์ ์ ๋ก๋ (Content-Range,Content-Type: video/mp4๋ฑ)
์ด ๊ตฌ์กฐ์ ๋๋ค. Sourcen8n์์๋ ๊ฐ๋ฅ์ ํ์ง๋ง, ์์ ๋ฐ์ด๋๋ฆฌ ๋ค๋ฃจ๊ธฐ/PUT/ํค๋(Content-Range) ๊ตฌ์ฑ ๋๋ฌธ์ ๊ตฌํ ๋๋๊ฐ ์ฌ๋ผ๊ฐ๋๋ค. (๊ทธ๋์ ๋ณดํต์ URL ์ ๋ก๋๊ฐ ์ฌ์์)
3) ํ์ค์ ์ธ ์ง๋ฆ๊ธธ(ํ ํ๋ฆฟ ์ฐธ๊ณ )
n8n ํ ํ๋ฆฟ ์ค์ “๊ตฌ๊ธ๋๋ผ์ด๋ธ ํด๋ ๊ฐ์ → ์ค๋ช ์์ฑ → ํฑํก ์ ๋ก๋” ํํ๊ฐ ์ค์ ๋ก ์์ต๋๋ค. ๋ค๋ง ์ด ํ ํ๋ฆฟ์ TikTok ๊ณต์ API ๋์ ์ธ๋ถ ์ ๋ก๋ ์๋น์ค(upload-post)๋ฅผ ์ฐ๋ ํ๋ฆ์ ์๋ดํฉ๋๋ค. Source
์ง๊ธ ๋ฐ๋ก ๋ค์ ์ง๋ฌธ 3๊ฐ๋ง ๋ตํด์ค (๊ทธ๋ผ “๋ ธ๋๋ณ ์ค์ ๊ฐ”๊น์ง ๊ฝ์์ค๊ฒ)
์ ๋ก๋ ์๋ํ๋ ๊ฐ์ ๋ง์ด๋ผ๋ ๊ตฌํ์ด ํฌ๊ฒ ๊ฐ๋ฆฝ๋๋ค.
์์์ ์ด๋์ ์ ์ฅ๋ผ ์์ด?
- (a) ๊ตฌ๊ธ๋๋ผ์ด๋ธ/๋๋กญ๋ฐ์ค
- (b) ๋ด ์๋ฒ/S3 ๊ฐ์ URL๋ก ์ ๊ณต ๊ฐ๋ฅ(์ถ์ฒ)
- (c) ๋ก์ปฌ ํ์ผ๋ง ์์
์ ๋ก๋๋ **์์ฝ(์ค์ผ์ค)**์ด์ผ, ์๋๋ฉด ์ ํ์ผ ๋ค์ด์ค๋ฉด ์ฆ์ ์ ๋ก๋์ผ?
ํฑํก์ ์ด๋ค ๊ณ์ ์ด์ผ? (๊ฐ์ธ/๋น์ฆ/์ฌ๋ฌ ๊ณ์ )
- ์ฌ๋ฌ ๊ณ์ ์ด๋ฉด ํ ํฐ/๊ณ์ ๋ณ ๋ถ๊ธฐ ์ค๊ณ๊ฐ ํ์ํด์.
์ฌ๋ฌ๋ถ์ ํ์์ด ํฐ ํ์ด ๋ฉ๋๋ค!
ํ์ํ๋ฌ ๊ฐ๊ธฐ