[n8n] ์๋ํ ์ํฌํ๋ก์ฐ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ์ค์ต
n8n์ ๋ค์ํ ์ฑ๊ณผ ์๋น์ค๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ฐ๋ณต์ ์ธ ์์ ์ ์ฒ๋ฆฌํ๋ ์ํฌํ๋ก์ฐ ์๋ํ ํ๋ซํผ์ด๋ค. ์ฝ๋ฉ ์์ด ๋ง์ฐ์ค ๋๋๊ทธ๋ก ๋ ธ๋(Node)๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฒ๋ง์ผ๋ก ๋ฐ์ดํฐ ์์ง, ์๋ฆผ ๋ฐ์ก, ์ด๋ฉ์ผ ์ ์ก, API ํธ์ถ ๋ฑ์ ์์ฝ๊ฒ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ํ์ฉํ๋ฉด ๋์ฑ ๋ณต์กํ๊ณ ๊ณ ๋ํ๋ ์์ ๋ ๊ฐ๋ฅํ๋ค.
ํนํ AI ์๋์ n8n์ ์ฌ๋ฌ ์๋น์ค์ AI ๋ชจ๋ธ์ ์ด์ด์ฃผ๋ ๊ฐ๋ ฅํ ์ค์ผ์คํธ๋ ์ด์ ํ๋ธ ์ญํ ์ ํ๋ค. ์ธ๋ถ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ AI๋ก ์์ฝ·๋ถ๋ฅ·์์ฑํ ๋ค, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ฉ์ผ·๋ฉ์ ์ ·์คํ๋ ๋์ํธ·DB ๋ฑ์ผ๋ก ์ ๋ฌํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ํ๋์ ์ํฌํ๋ก์ฐ๋ก ๊ตฌ์ฑํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๊ณ ๊ฐ ๋ฌธ์๋ฅผ AI๋ก ๋ถ์ํ์ฌ ์ฌ๋์ผ๋ก ์๋ ๋ผ์ฐํ ํ๊ฑฐ๋ ๋งค์ผ ์์นจ ํน์ ๋ด์ค๋ฅผ ํฌ๋กค๋งํด์ AI ์์ฝ๋ณธ์ ๋ ธ์ ์ ์๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์๋ค.
Make, Zapier ๊ฐ์ ๊ฒฝ์ ๋๊ตฌ์ ๋ฌ๋ฆฌ n8n์ ์ ํ ํธ์คํ (Self-hosting)์ ์ง์ํ๋ค๋ ์ฅ์ ๋ ์๋ค. Docker๋ง ๋ค๋ฃฐ ์ค ์๋ค๋ฉด ์๋๋ก์ง NAS๋ ๊ฐ์ธ ์๋ฒ์ ์ค์นํด์ ์คํ ํ์ ์ ํ ์์ด ์๋ฒ ๋น์ฉ๋ง์ผ๋ก ์ด์ํ ์ ์๋ค. ์ ํ ํธ์คํ ์ ๋ฐ์ดํฐ๊ฐ ์ธ๋ถ ํด๋ผ์ฐ๋๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ด๋ถ ์๋ฒ์์๋ง ์ฒ๋ฆฌ๋๋ฏ๋ก ๋ณด์๊ณผ ๋ฐ์ดํฐ ์ฃผ๊ถ ์ธก๋ฉด์์๋ ์ ๋ฆฌํ๋ค.
ํธ๋ฆฌ๊ฑฐ ์ข ๋ฅ 3๊ฐ์ง
- Manual Trigger: ๊ฐ๋ฐ ์ค ํ ์คํธ/์๋ ์คํ์ด ํ์ํ ๋ ์ฌ์ฉ
- Schedule Trigger: ๋งค์ผ/๋งค์ฃผ/๋งค์๊ฐ์ฒ๋ผ ์ ๊ธฐ์ ์ธ ์คํ์ด ํ์ํ ๋
- Webhook: ์ธ๋ถ ์ฑ์ด๋ ์๋น์ค๊ฐ HTTP ์์ฒญ์ ๋ณด๋์ ๋ (์ด๋ฒคํธ)
์ํฌํ๋ก์ฐ ๊ตฌ์ฑ

- ํธ๋ฆฌ๊ฑฐ: ์ํฌํ๋ก์ฐ ์์์
- ๋ ธ๋: ์์ ์ ์ํํ๋ ๊ธฐ๋ณธ ๋จ์
- ์ฃ์ง: ๋ ธ๋์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์
๊ธฐ๋ณธ ์ํฌํ๋ก์ฐ ๋ง๋ค์ด๋ณด๊ธฐ
๐ก ์ํฌํ๋ก์ฐ ๋ชฉํ: ZenQuotes์์ ๋ช ์ธ ์กฐํ → OpenAI API๋ก ๋ฒ์ญ → ์ด๋ฉ์ผ๋ก ์ ๋ฌ
HTTP Request ๋ ธ๋ ์์ฑ
์ฐ์ธก ๋
ธ๋ ํจ๋(๋จ์ถํค N) > HTTP Request ๊ฒ์ ํ ์ถ๊ฐ

ZenQuotes API Endpoint:
GET https://zenquotes.io/api/random
OpenAI > Message a model ๋ ธ๋ ์ถ๊ฐ

โ OpenAI Credential ์ถ๊ฐ
โก Resource: Text
โข Operation: Message a Model
โฃ Model: gpt-4o-mini ๊ฐ์ ์ ๋ ดํ ๋ชจ๋ธ ์ ํ
โค Messages (์ข์ธก Input ๋ ธ๋์์ Execute previous nodes ๋ฒํผ ํด๋ฆญํ๋ฉด ์ด์ ๋ ธ๋ ๋ฐ์ดํฐ ์กฐํ ๊ฐ๋ฅ)
๏ฟญ Type: Text
๏ฟญ Role: User
๏ฟญ Prompt:
Please translate this quote, but not the author to Korean. Include the author name, even though you don't need to translate it.
Quote: {{ $json.q }}
Author: {{ $json.a }}
Reply only with the translation no chatter or extra words.
Input ํจ๋์ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋๋๊ทธํ๊ฑฐ๋ {{ $json.q }} ์ค๊ดํธ๋ฅผ ์
๋ ฅํด์ ํ์ํ ์์ฑ์ ์ง์ ์ฐธ์กฐํ ์ ์๋ค. $json ๋ณ์๋ ๋ฐ๋ก ์ด์ ๋
ธ๋์์ ๋ฐ์ JSON ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ฆฌํจ๋ค.
n8n์์ {{ expression }} ์ค๊ดํธ ์์ชฝ์ ์๋ฐ์คํฌ๋ฆฝํธ ํํ์์ด๋ค. {{ ๋ฅผ ์
๋ ฅํ๊ณ ํ ์นธ ๋์ฐ๊ฑฐ๋ ์ค๊ดํธ ํํ์ ์์์ $๋ฅผ ์
๋ ฅํ๋ฉด ์๋์์ฑ ์ ์์ด ํ์๋๋ค.
{{ new Date() }} // Date: 2026-04-26T09:03:19.840-04:00
์ค๊ดํธ ํํ์์ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ผ๋ฏธํฐ ํ๋๋ฅผ Expression ๋ชจ๋๋ก ์ ํํด์ผ ํ๋ค. Fixed๋ ์ด๋ฆ ๊ทธ๋๋ก ๊ณ ์ ๋ ๊ฐ์ ๋ฃ๋ ๋ชจ๋๋ก, ์ ์ ์ธ ๊ฐ์ ๋ค๋ฃฐ ๋ ์ฌ์ฉํ๋ค.

์คํ ํ ์คํธ
ํธ๋ฆฌ๊ฑฐ ์ผ์ชฝ Execute Workflow ๋ฒํผ ํด๋ฆญ. ์ฐธ๊ณ ๋ก Manual Trigger๋ Executions ํฌ๋ ๋ง์ด ์ฐจ๊ฐ๋์ง ์๋๋ค.

OpenAI ๋ ธ๋ ๋๋ธํด๋ฆญ ํ ์๋์ฒ๋ผ ๋ฒ์ญ ๊ฒฐ๊ณผ ๋์ค๋ฉด ์ฑ๊ณต.

์ด๋ฉ์ผ ๋ ธ๋ ์ถ๊ฐ
Gmail > Send a message ์ถ๊ฐ.

Credential ์ถ๊ฐ ํ ์๋์ฒ๋ผ ํ๋ ์
๋ ฅ. text ์์ฑ์ Message ํ๋๋ก ๋๋๊ทธํ๋ฉด ์๋์ผ๋ก ์ถ๊ฐ๋๋ค.

Execute step ๋๋ฌ์ ํ ์คํธ. ์๋์ฒ๋ผ ๋ฉ์ผ ๋์ฐฉํ๋ฉด ์ฑ๊ณต.

Add option > Append n8n Attribution์ ์ฒดํฌํด์ ํ๋ฉด This email was sent … ํธํฐ๊ฐ ํฌํจ๋์ง ์๋๋ค.

Schedule Trigger ์ถ๊ฐ
๋
ธ๋ ํจ๋(๋จ์ถํค N) > schedule ๊ฒ์ > Schedule Trigger ์ถ๊ฐ.

๊ธฐ์กด ์๋ ํธ๋ฆฌ๊ฑฐ์ ์ฃ์ง๋ฅผ ์ ๊ฑฐํ๊ณ , ์ค์ผ์ค ํธ๋ฆฌ๊ฑฐ ์ฃ์ง ์ฐ๊ฒฐ.

์ค์ผ์ค ํธ๋ฆฌ๊ฑฐ ์๊ฐ ์ค์ . ์๋ ์์ ์ด๋ฏธ์ง์์ 5๋ถ ๊ฐ๊ฒฉ์ผ๋ก ์คํ๋๋ค.

์ฐ์ธก ์๋จ Publish ๋ฒํผ์ ํด๋ฆญํ๋ฉด ์ค์ผ์ค์ด ํ์ฑํ๋๋ค. ์ค์ผ์ค ํธ๋ฆฌ๊ฑฐ๋ฅผ ์คํํ ๋๋ง๋ค Executions ํฌ๋ ๋ง์ด ์ฐจ๊ฐ๋๋ฏ๋ก ์ฃผ์ํ์. ์ค์ผ์ค์ ๋นํ์ฑํํ๋ ค๋ฉด Unpublish ๋ฒํผ์ ํด๋ฆญํ๋ค.

Executions ํญ์์ ์ด์ ์คํ ๋ด์ญ์ ํ์ธํ ์ ์๊ณ , ๊ฐ ๋ ธ๋๋ฅผ ๋๋ธํด๋ฆญํ๋ฉด ๋ฐ์ดํฐ ๋ฑ ์ธ๋ถ ์ ๋ณด๋ฅผ ๋ณผ ์ ์๋ค.

๋ ธ๋ ์คํ ์์
์ ์ฉํ ๋จ์ถํค
๏ฟญ ์ด๋ฆ ๋ณ๊ฒฝ: ๋ ธ๋ ์ ํ >Space
๏ฟญ ๋ ธ๋ ์ข ๋ฅ ๋ณ๊ฒฝ: ๋ ธ๋ ์ ํ >R
๏ฟญ ๋ ธ๋ ๋ณต์ :Cmd+D
๋ ธ๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ํ๋ฆ์ ๋ฐ๋ผ ์ผ์ชฝ → ์ค๋ฅธ์ชฝ์ผ๋ก ์คํ๋๋ค. ํ๋์ ๋ ธ๋์์ ์ฌ๋ฌ ๋ธ๋์น๋ก ๋๋๋ ๊ฒฝ์ฐ ์ → ์๋ ๋ธ๋์น ์์๋ก ์คํ๋๋ค. ์๋ ์ด๋ฏธ์ง์ฒ๋ผ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ์ ๋ 1๋ฒ ๋ธ๋์น๊ฐ ๋จผ์ ์คํ๋๊ณ , ๊ทธ๋ค์ 2๋ฒ ๋ธ๋์น๊ฐ ์คํ๋๋ค.

์กฐ๊ฑด·๋ถ๊ธฐ·๋ฃจํ ์ํฌํ๋ก์ฐ ์ค์ต
๐ก ์ํฌํ๋ก์ฐ ํ๋ฆ
- ์ ๋จธ API์์ ์ ๋จธ ๋ฐ์์ค๊ธฐ (ICanHazDadJoke ์ด์ฉ)
- GET ์ฑ๊ณต(200 OK): 2๋ฒ ์งํ
- GET ์คํจ: 30์ด ๋๊ธฐ ํ ๋ค์ ์๋
- AIํํ
์กฐํํ ์ ๋จธ๊ฐ ์ฌ๋ฐ๋์ง ์ฌ๋ถ ํ๊ฐ
- ์ฌ๋ฐ๋ค๊ณ ํ๋จ: ์ด๋ฉ์ผ ์ ์ก ํ ์ํฌํ๋ก์ฐ ์ข ๋ฃ
- ์ฌ๋ฏธ์์ผ๋ฉด:
- 5์ด ๋๊ธฐ
- ์ ๋จธ ๋ค์ ์กฐํ
- AI๊ฐ ์ฌ๋ฐ๋ค๊ณ ํ๊ฐํ ๋๊น์ง ๋ฐ๋ณต
- ํ๊ฐ ์ค๋ฅ: ๋ค์ ํ๊ฐ ์์ฒญ
HTTP Request ๋ ธ๋
์์ฒญ ์ ๋ณด ์
๋ ฅ ํ Execute step ๋๋ฌ์ ์ ๋จธ API ์ ์์ ์ผ๋ก ์กฐํ๋๋์ง ํ์ธํ๋ค. ์๋ต ๋ฐ์ดํฐ์์ status ๊ฐ์ด 200์ด๋ฉด ์์ฒญ ์ฑ๊ณต์ ๋ํ๋ธ๋ค.

- Method:
GET - URL:
https://icanhazdadjoke.com - Send Headers:
์ฒดํฌ - Headers
- Name:
Accept - Value:
application/json
- Name:
If ๋ ธ๋ ์ถ๊ฐ
HTTP Request ๋
ธ๋ ๋ค์ If ๋
ธ๋๋ฅผ ์ถ๊ฐํด์ API ์กฐํ ๊ฒฐ๊ณผ๊ฐ ์ ์์ธ์ง ํ์ธํ๋ค. json.status ๊ฐ์ด 200์ด๋ฉด ์ฑ๊ณต, ๊ทธ๋ ์ง ์์ผ๋ฉด ์คํจ๋ก ๋ถ๊ธฐํ๋ค.

API ์กฐํ ์คํจ ๋ถ๊ธฐ — Wait ๋ ธ๋
Wait ๋ ธ๋๋ฅผ ์ถ๊ฐํด์ API ์กฐํ์ ์คํจํ์ ๋ 30์ด ๋๊ธฐ ํ ๋ค์ ์๋ํ๋๋ก ์ค์ ํ๋ค.

๊ทธ๋ค์ Wait ๋ ธ๋์ ์ฃ์ง๋ฅผ ๋๋๊ทธํด์ HTTP Request์ ์ฐ๊ฒฐํ๋ค.

API ์กฐํ ์ฑ๊ณต ๋ถ๊ธฐ — OpenAI ๋ ธ๋
์ ๋จธ API ์กฐํ์ ์ฑ๊ณตํ๋ค๋ฉด AI๋ฅผ ์ด์ฉํด์ ํด๋น ์ ๋จธ๊ฐ ์ฌ๋ฐ๋์ง ํ๊ฐํ๋ค.
If ๋
ธ๋์ ์ฑ๊ณต ๋ถ๊ธฐ๋ฅผ OpenAI ๋
ธ๋์ ์ฐ๊ฒฐํ๊ณ , API ์๋ต์ $json.joke ๊ฐ์ ์
๋ ฅ๊ฐ์ผ๋ก ์ ๋ฌํ๋ค. AI๊ฐ ์ ๋จธ๋ฅผ ํ๊ฐํ ๋ค ์ฌ๋ฐ์ผ๋ฉด is_funny, ์ฌ๋ฏธ์์ผ๋ฉด is_not_funny ๊ฐ์ ๋ฐํํ๋๋ก ํ๋กฌํํธ๋ฅผ ๊ตฌ์ฑํ๋ค.

ํ๋กฌํํธ์์ <joke>...</joke> ์ฒ๋ผ ํ๊ทธ๋ก ์
๋ ฅ๊ฐ์ ๊ฐ์ธ๋ฉด AI๊ฐ ์ง์๋ฌธ๊ณผ ์ค์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ฌ์์ง๋ค. ์ด์ฒ๋ผ ์
๋ ฅ ๋ฒ์๋ฅผ ๋ช
ํํ ํ์ํ๋ ๋ฐฉ์์ XML ํ๊ทธ ์คํ์ผ ํ๋กฌํํ
์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
Tell me if this joke is funny:
<joke>
{{ $json.joke }}
</joke>
Reply ONLY with `is_funny` or `is_not_funny`. Anything else is NOT allowed.
Be extremely critical. You're hard to please.
AI ์๋ต ์ค๋ฅ ์ฒ๋ฆฌ — If ๋ ธ๋
AI๊ฐ ์๋ชป๋ ์๋ต์ ๋ฐํํ์ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด If ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ค. ์๋ต๊ฐ์ด is_funny, is_not_funny ๋ ๋ค ์๋ ๊ฒฝ์ฐ ์ค๋ฅ๋ก ํ๋จํ๊ณ , ๋ค์ OpenAI ๋
ธ๋๋ก ๋์๊ฐ์ ์ ๋จธ๋ฅผ ์ฌํ๊ฐํ๋๋ก ์ค์ ํ๋ค.

์ด If ๋
ธ๋์์ true ๋ถ๊ธฐ๋ is_funny, is_not_funny ๋ ์ค ์ด๋ ๊ฐ๋ ์๋ ์ค๋ฅ ๋ฐ์ ์ํฉ์ ์๋ฏธํ๋ค. If ๋
ธ๋์ true ๋ถ๊ธฐ ์ฃ์ง๋ฅผ ๋๋๊ทธํด์ OpenAI๋ก ์ฐ๊ฒฐํ๋ค.

์ฌ๋ฐ๋ ์ ๋จธ์ธ์ง ํ๋จ — If ๋ ธ๋
AI๊ฐ ์ ๋จธ๋ฅผ ํ๊ฐํ๋ ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์ง ์์๋ค๋ฉด, AI ์๋ต๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ฌ๋ฐ๋ ์ ๋จธ์ธ์ง ํ๋จํด์ผ ํ๋ค. ์๋ต๊ฐ์ด is_funny ์ธ์ง ํ์ธํ๋ If ๋
ธ๋๋ฅผ ์ถ๊ฐํ๋ค.

์ด์ If ๋ ธ๋์ false ๋ถ๊ธฐ(ํ์ฉ๋ ์๋ต๊ฐ) ์ฃ์ง๋ฅผ ๋๋๊ทธํด์ ์ฐ๊ฒฐํ๋ค.

์ฌ๋ฐ๋ ์ ๋จธ ์ด๋ฉ์ผ ์ ์ก
AI๊ฐ ์ฌ๋ฐ๋ค๊ณ ํ๊ฐํ๋ฉด(true ๋ถ๊ธฐ) ์ด๋ฉ์ผ์ ๋ณด๋ด๊ธฐ ์ํด Gmail > Send a message ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ค.

์ด์ If ๋ ธ๋ true ๋ถ๊ธฐ(์ฌ๋ฐ๋ ์ ๋จธ) ์ฃ์ง๋ฅผ ๋๋๊ทธํด์ ์ฐ๊ฒฐํ๋ค.

์ฌ๋ฏธ์๋ ์ ๋จธ ๋ค์ ์กฐํ
AI๊ฐ ์ ๋จธ๋ฅผ ์ฌ๋ฏธ์๋ค๊ณ ํ๊ฐํ๋ค๋ฉด, false ๋ถ๊ธฐ๋ฅผ ํตํด Wait ๋ ธ๋๋ก ์ด๋ํ๋๋ก ์ค์ ํ๋ค. Wait ๋ ธ๋๋ ๊ณผ๋ํ API ํธ์ถ์ ๋ฐฉ์งํ๊ธฐ ์ํ ๋๊ธฐ ๋จ๊ณ๋ค.

๋๊ธฐ๊ฐ ๋๋๋ฉด ์๋ก์ด ์ ๋จธ๋ฅผ ์กฐํํ๊ธฐ ์ํด Wait ๋ ธ๋๋ฅผ HTTP Request ๋ ธ๋์ ์ฐ๊ฒฐํ๋ค.

'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [CLI] ์ ์ฉํ ์ ธ(Shell) ํฐ๋ฏธ๋ ๋จ์ถํค/ํ ๋ชจ์ (0) | 2026.04.10 |
|---|---|
| [OS] ํ๋ ๋งํฌ, ์ฌ๋ณผ๋ฆญ ๋งํฌ ์ฐจ์ด์ (0) | 2025.10.19 |
| [JS] ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ (0) | 2025.07.20 |
| [CS] ๋ฒ ์ง์ ๊ณก์ ์๋ฆฌ ์ดํดํ๊ธฐ feat. ์นด์คํ ์กฐ ์๊ณ ๋ฆฌ์ฆ (0) | 2025.06.23 |
| [JS] async ํจ์๊ฐ await๋ฅผ ๋ง๋ฌ์ ๋ ๋์ ํ๋ฆ (1) | 2025.06.14 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[CLI] ์ ์ฉํ ์ ธ(Shell) ํฐ๋ฏธ๋ ๋จ์ถํค/ํ ๋ชจ์
[CLI] ์ ์ฉํ ์ ธ(Shell) ํฐ๋ฏธ๋ ๋จ์ถํค/ํ ๋ชจ์
2026.04.10 -
[OS] ํ๋ ๋งํฌ, ์ฌ๋ณผ๋ฆญ ๋งํฌ ์ฐจ์ด์
[OS] ํ๋ ๋งํฌ, ์ฌ๋ณผ๋ฆญ ๋งํฌ ์ฐจ์ด์
2025.10.19 -
[JS] ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ
[JS] ๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ
2025.07.20 -
[CS] ๋ฒ ์ง์ ๊ณก์ ์๋ฆฌ ์ดํดํ๊ธฐ feat. ์นด์คํ ์กฐ ์๊ณ ๋ฆฌ์ฆ
[CS] ๋ฒ ์ง์ ๊ณก์ ์๋ฆฌ ์ดํดํ๊ธฐ feat. ์นด์คํ ์กฐ ์๊ณ ๋ฆฌ์ฆ
2025.06.23