sanga-log
โ† BACK
Projectsยท2026. 03. 10ยท- views

๋ฏธ๊ตญ์—์„œ ์œ ํ–‰ํ•˜๋Š” AI ํŒฉํญ ์„œ๋น„์Šค๋ฅผ ํ•œ๊ตญ ๋ฒ„์ „์œผ๋กœ ๋งŒ๋“ค์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ถฉ์ฒญ๋„ ํ• ๋ฏธ AI๋กœ ํฌ์žฅํ•œ ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ๊ธฐ.

AIClaude์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธํšŒ๊ณ 

์‹œ์ž‘์€ ๋”ด ๋‚˜๋ผ ์–˜๊ธฐ์˜€์Šต๋‹ˆ๋‹ค

๋ฏธ๊ตญ ๊ฐœ๋ฐœ์ž ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ์š”์ฆ˜ "Roast My ~" ์‹œ๋ฆฌ์ฆˆ๊ฐ€ ํ•œ์ฐฝ ํ™”์ œ์ž…๋‹ˆ๋‹ค. Roast My Strava, Roast My Code, Roast My Github... AIํ•œํ…Œ ๋‚ด ๊ฒฐ๊ณผ๋ฌผ์„ ๊ฐ€์ ธ๋‹ค ์ฃผ๋ฉด ์‹ ๋ž„ํ•˜๊ฒŒ ๊นŒ๋‹ฌ๋ผ๊ณ  ํ•˜๋Š” ์ฝ˜์…‰ํŠธ์ž…๋‹ˆ๋‹ค.

๋ณด๋ฉด์„œ ๋”ฑ ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑฐ ์žฌ๋ฐŒ๊ฒ ๋‹ค!

๋งˆ์นจ ๊ทธ ๋‚  LinkedIn ํ”„๋กœํ•„์„ ์ˆ˜์ •ํ–ˆ์–ด์„œ์ธ์ง€ ๋ฐ”๋กœ ๋ˆˆ์— ๋“ค์–ด์™”์Šต๋‹ˆ๋‹ค. LinkedIn ํ”„๋กœํ•„ ํŒฉํญ ์„œ๋น„์Šค! ์šฐ๋ฆฌ๋‚˜๋ผ์—๋„ ์žˆ์„๊นŒ ์‹ถ์–ด์„œ ์ฐพ์•„๋ดค๋Š”๋ฐ ์•„์ง์€ ์—†์—ˆ๊ณ , ํ•ด์™ธ์— ์žˆ๋Š” ๋น„์Šทํ•œ ์„œ๋น„์Šค๋“ค๋„ ์ง์ ‘ ๋“ค์–ด๊ฐ€๋ดค๋”๋‹ˆ ํ•˜๋‚˜๊ฐ™์ด ์ž‘๋™์„ ์•ˆ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šคํฌ๋ž˜ํ•‘ API ํ• ๋‹น๋Ÿ‰์ด ๋‹ค ์ฐผ๊ฑฐ๋‚˜, LinkedIn์ด ๋ด‡ ์ ‘๊ทผ์„ ์•„์˜ˆ ๋ง‰์•„๋ฒ„๋ฆฐ ๊ฑฐ์˜€์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐ”~๋กœ ๋งŒ๋“ค๊ธฐ๋กœ ๋ง˜๋จน์—ˆ์Šต๋‹ˆ๋‹ค! ์ด์™•์ด๋ฉด ํ•œ๊ตญ์‹์œผ๋กœ! ๐Ÿ‡ฐ๐Ÿ‡ท


๋ชฉ์ ๋ถ€ํ„ฐ ๋ถ„๋ช…ํžˆ

์ด ํ”„๋กœ์ ํŠธ๋Š” ์˜จ์ „ํžˆ ๋‚˜์™€ Claude ๋‘˜์ด์„œ ๋งŒ๋“  ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค. ๊ธฐํš ๋‹จ๊ณ„์—์„œ๋ถ€ํ„ฐ Claude์™€ ํ•จ๊ป˜ ๊ณ„์†ํ•ด์„œ ๋Œ€ํ™”๋ฅผ ์ฃผ๊ณ ๋ฐ›์œผ๋ฉฐ ๋งŒ๋“ค์–ด๋‚˜๊ฐ”์Šต๋‹ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ์ด๊ฒƒ์ €๊ฒƒ ๊ฑฐ์ฐฝํ•˜๊ฒŒ ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๋Œ€ํ™”ํ•˜๋‹ค ๋ณด๋‹ˆ ๊ฒฐ๊ตญ ํ•˜๋‚˜๋กœ ์ •๋ฆฌ๋์Šต๋‹ˆ๋‹ค.

๋น ๋ฅด๊ณ  ๊ฐ„๋‹จํ•˜๊ฒŒ, ์žฌ๋ฏธ์žˆ์–ด ๋ณด์ด๋Š” ๊ฑธ ๋งŒ๋“ค์ž.

์™„๋ฒฝ๋ณด๋‹ค๋Š” ์ผ๋‹จ ๋งŒ๋“ค์–ด์„œ ์„ธ์ƒ์— ๋‚ด๋†“๊ณ  ๋ฐ˜์‘๋ถ€ํ„ฐ ๋ณด๋Š” ๊ฑธ ๋ชฉํ‘œ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ์ง„์งœ ์‚ฌ๋žŒ๋“ค์ด ์ด๊ฑธ ์“ธ๊นŒ? ๊ถ๊ธˆํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฌด๋ฃŒ API ํ• ๋‹น๋Ÿ‰์ด ์–ผ๋งˆ๋‚˜ ๋นจ๋ฆฌ ์†Œ์ง„๋ ์ง€ ๊ธฐ๋Œ€๋์Šต๋‹ˆ๋‹ค.


์ฒซ ๋ฒˆ์งธ ๊ธฐ์ˆ  ๊ฒฐ์ • โ€” ์Šคํฌ๋ž˜ํ•‘์„ ํฌ๊ธฐํ•˜์ง€ ์•Š๋Š”๋‹ค

LinkedIn์€ ์Šคํฌ๋ž˜ํ•‘์„ ์ฒ ์ €ํ•˜๊ฒŒ ๋ง‰์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์†Œ์†ก๊นŒ์ง€ ๊ฐ„ ์ผ€์ด์Šค๊ฐ€ ์žˆ์„ ์ •๋„์ž…๋‹ˆ๋‹ค. ๊ทผ๋ฐ ์ฐพ์•„๋ณด๋‹ˆ ์•„์ง ๊ฐ€๋Šฅํ•œ API๋“ค์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ Claude์™€ ๊ธฐ๋ณธ UI๋ถ€ํ„ฐ ๋น ๋ฅด๊ฒŒ ๋งŒ๋“ค์–ด์„œ ์Šคํฌ๋ž˜ํ•‘์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ์–ด๋–ค ์—๋Ÿฌ๊ฐ€ ๋‚˜๋Š”์ง€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜๋Š”๋ฐ, ํ•˜๋‹ค๋ณด๋‹ˆ ๊ณ ๋ฏผ์ด ์ƒ๊ฒผ์Šต๋‹ˆ๋‹ค.

API๊ฐ€ ๋ง‰ํžˆ๊ฑฐ๋‚˜ ํ• ๋‹น๋Ÿ‰์ด ๋‹ค ์ฐจ๋ฉด ์–ด๋–กํ•˜์ง€?

๊ทธ๋ž˜์„œ RapidAPI ๋งˆ์ผ“ํ”Œ๋ ˆ์ด์Šค๋ฅผ ๋’ค์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค. LinkedIn ์Šคํฌ๋ž˜ํ•‘ API๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ์ฐพ์•„๋ดค์Šต๋‹ˆ๋‹ค. ์œ ๋ฃŒ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๊ธ‰์†๋„๋กœ ๋Š˜์–ด๋‚ฌ์„ ๋•Œ ๊ณ ๋ คํ•˜๊ธฐ๋กœ ํ•˜๊ณ , ์šฐ์„  ๋ฌด๋ฃŒ๋ฅผ ์—ด์‹ฌํžˆ ์ฐพ์•„์„œ 8๊ฐœ๋ฅผ ๋ชจ์•˜์Šต๋‹ˆ๋‹ค! ํ•˜๋‚˜์˜ RapidAPI ํ‚ค๋กœ ์—ฌ๋Ÿฌ API๋ฅผ ๋ฌด๋ฃŒ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑธ ์•Œ๊ฒŒ ๋˜๋ฉด์„œ, ํ•˜๋‚˜๊ฐ€ ํ•œ๋„์— ๊ฑธ๋ฆฌ๋ฉด ๋‹ค์Œ API๋กœ ๋„˜๊ธฐ๋Š” fallback chain ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ• ๋‹น๋Ÿ‰ ๋ฌธ์ œ๋Š” ํ•ด๊ฒฐ!๐ŸŒž

๊ทธ๋ฆฌ๊ณ  ์Šคํฌ๋ž˜ํ•‘ ์ฐจ๋‹จ ๋ฌธ์ œ๋Š” ๋” ์žฌ๋ฐŒ๊ฒŒ ํ’€์–ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ง‰ํžˆ๋Š” ๊ฒฝํ—˜ ์ž์ฒด๋ฅผ ์žฌ๋ฏธ์žˆ๋Š” UX๋กœ ๋งŒ๋“ค์–ด๋ฒ„๋ฆฌ์ž! ์—๋Ÿฌ ํŽ˜์ด์ง€๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋Œ€์‹ , ์ฐจ๋‹จ๋‹นํ•˜๋Š” ์ˆœ๊ฐ„์„ ํ• ๋ฏธ ๋งํˆฌ๋กœ ํ’€์–ด๋‚ด๋ฉด ์˜คํžˆ๋ ค ๋” ์›ƒ๊ธฐ์ง€ ์•Š์„๊นŒ?

โ””โ”€ 8๊ฐœ RapidAPI๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹œ๋„
    โ”œโ”€ ์„ฑ๊ณต โ†’ AI ๋ถ„์„์œผ๋กœ ์ด๋™
    โ””โ”€ ์ „๋ถ€ ์‹คํŒจ
         โ”œโ”€ 429 ํ• ๋‹น๋Ÿ‰ ์ดˆ๊ณผ -> "ํ• ๋ฏธ๋–ผ๊ฐ€ ๋„ˆ๋ฌด ์ธ๊ธฐ๊ฐ€ ๋งŽ์•„๋ถ€๋Ÿฌ์„œ ์š”์ฒญ ํ•œ๋„๋ฅผ ๋„˜๊ฒจ๋ถ€๋ €์–ด์œ ~"
         โ”œโ”€ 403 ์Šคํฌ๋ž˜ํ•‘ ์ฐจ๋‹จ -> "LinkedIn์ด ํ• ๋ฏธ ๋ชป ๋“ค์–ด์˜ค๊ฒŒ ๋ง‰์•„๋ถ€๋ €์–ด์œ ~"
         โ””โ”€ PDF/์Šคํฌ๋ฆฐ์ƒท ์—…๋กœ๋“œ๋กœ ์•ˆ๋‚ด

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


๋‘ ๋ฒˆ์งธ ๊ธฐ์ˆ  ๊ฒฐ์ • โ€” PC์™€ ๋ชจ๋ฐ”์ผ์„ ๋‹ค๋ฅด๊ฒŒ

๊ฑฐ์˜ ๋‹ค ๋งŒ๋“ค์–ด๊ฐˆ๋•Œ์ฏค ํ…Œ์ŠคํŠธํ•˜๋‹ค๋ณด๋‹ˆ ํ•˜๋‚˜๊ฐ€ ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. LinkedIn ํ”„๋กœํ•„์„ PDF๋กœ ์ €์žฅํ•˜๋Š” ๊ธฐ๋Šฅ์ด PC์—์„œ๋งŒ ๋ฉ๋‹ˆ๋‹ค. ๋ชจ๋ฐ”์ผ ์•ฑ์—๋Š” ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค.

์ž ๊น ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ, ๊ทธ๋Ÿฌ๋ฉด ๋‘˜ ๋‹ค ์ง€์›ํ•˜๋ฉด ๋˜์ง€! ํ•˜๋Š” ๋งˆ์Œ์œผ๋กœ ๋ฐ”๋กœ ์ž‘์—…์— ๋“ค์–ด๊ฐ”์Šต๋‹ˆ๋‹ค.

  • ๐Ÿ’ป PC: LinkedIn โ†’ ๋”๋ณด๊ธฐ โ†’ PDF๋กœ ์ €์žฅ โ†’ ์—…๋กœ๋“œ
  • ๐Ÿ“ฑ ๋ชจ๋ฐ”์ผ: ํ”„๋กœํ•„ ์Šคํฌ๋ฆฐ์ƒท ์ดฌ์˜ โ†’ ์—…๋กœ๋“œ โ†’ AI Vision์œผ๋กœ ๋ถ„์„

PDF๋Š” ํ…์ŠคํŠธ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ฝ‘ํžˆ๋‹ˆ๊นŒ ๋ถ„์„ ์ •ํ™•๋„๊ฐ€ ๋†’๊ณ , ์Šคํฌ๋ฆฐ์ƒท์€ AI์˜ ์ด๋ฏธ์ง€ ๋ถ„์„ ๋Šฅ๋ ฅ์„ ์“ฐ๋Š” ๊ฒ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ฐฉ๋ฒ•์ด๋“  ๊ฐ™์€ /api/roast ์—”๋“œํฌ์ธํŠธ๋กœ ๋“ค์–ด์˜ค๊ณ , ํŒŒ์ผ ํƒ€์ž…์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ๋งŒ ๋‹ฌ๋ผ์ง€๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.


์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ โ€” ํ† ์Šค Frontend Fundamentals ์ ์šฉ

ํด๋” ๊ตฌ์กฐ๋ฅผ ์žก์„ ๋•Œ ํ† ์Šค Frontend Fundamentals๋ฅผ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค โ€” ํ•จ๊ป˜ ์ˆ˜์ •๋˜๋Š” ์ฝ”๋“œ๋Š” ๊ฐ™์€ ๋””๋ ‰ํ† ๋ฆฌ์—. ์˜ˆ๋ฅผ ๋“ค์–ด ๊ฒฐ๊ณผ ํ™”๋ฉด์„ ๊ณ ์น˜๋ฉด ResultScreen.tsx์™€ CringeGauge.tsx๋Š” ๊ฑฐ์˜ ํ•ญ์ƒ ๊ฐ™์ด ์ˆ˜์ •๋˜๋Š”๋ฐ, ์ด ๋‘˜์ด ๋‹ค๋ฅธ ํด๋”์— ์žˆ์œผ๋ฉด ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋А๋ผ ์ •์‹ ์—†์Šต๋‹ˆ๋‹ค.

app/
โ”œโ”€โ”€ components/           # ์ „์—ญ ๊ณต์œ  UI (2๊ฐœ ์ด์ƒ ๋„๋ฉ”์ธ์—์„œ ์‚ฌ์šฉ)
โ”‚   โ””โ”€โ”€ HalmiSpinner.tsx
โ”‚
โ”œโ”€โ”€ domains/              # ํ™”๋ฉด๋ณ„ ๋„๋ฉ”์ธ (ํ•จ๊ป˜ ์ˆ˜์ •๋˜๋Š” ์ฝ”๋“œ ์‘์ง‘)
โ”‚   โ”œโ”€โ”€ result/
โ”‚   โ”‚   โ”œโ”€โ”€ ResultScreen.tsx
โ”‚   โ”‚   โ””โ”€โ”€ CringeGauge.tsx  # result ์ „์šฉ โ€” ๋‹ค๋ฅธ ๊ณณ์—์„œ ์•ˆ ์”€
โ”‚   โ””โ”€โ”€ upload/
โ”‚       โ”œโ”€โ”€ UploadScreen.tsx
โ”‚       โ””โ”€โ”€ UploadZone.tsx
โ”‚
โ”œโ”€โ”€ lib/                  # ์ „์—ญ ๊ณต์œ  ํƒ€์ž…/์œ ํ‹ธ
โ””โ”€โ”€ api/                  # API ๋ผ์šฐํŠธ

ํŒ๋‹จ ๊ธฐ์ค€์€ ๋”ฑ ํ•˜๋‚˜์˜€์Šต๋‹ˆ๋‹ค. "์ด ์ปดํฌ๋„ŒํŠธ ๋‹ค๋ฅธ ํ™”๋ฉด์—์„œ๋„ ์“ฐ๋‚˜?"

์“ฐ๋ฉด components/ ์•ˆ ์“ฐ๋ฉด ํ•ด๋‹น ๋„๋ฉ”์ธ ํด๋” ์•ˆ. ์‹ฌํ”Œํ•˜๋‹ˆ๊นŒ ์ข‹์Šต๋‹ˆ๋‹ค.


์ƒํƒœ ๊ด€๋ฆฌ โ€” ์ƒํƒœ ๋จธ์‹ ์œผ๋กœ 7๊ฐœ ํ™”๋ฉด ๊ด€๋ฆฌ

page.tsx ํ•˜๋‚˜์—์„œ ์ƒํƒœ ๋จธ์‹  ํŒจํ„ด์œผ๋กœ ํ™”๋ฉด์„ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. Router ์—†์ด!

type Screen = 'landing' | 'scraping' | 'blocked' | 'upload' | 'loading' | 'result' | 'error'

// ํ๋ฆ„
landing โ†’ scraping โ†’ (์„ฑ๊ณต) โ†’ loading โ†’ result
                   โ†’ (์‹คํŒจ) โ†’ blocked โ†’ upload โ†’ loading โ†’ result

AI ๋ชจ๋ธ ์„ ํƒ โ€” Claude์—์„œ Gemini๋กœ ๊ฐˆ์•„ํƒ„ ์ด์œ 

์ฒ˜์Œ์—” Claude Sonnet 4๋ฅผ ์ผ์Šต๋‹ˆ๋‹ค. ๊ทผ๋ฐ ๋น„์šฉ์ด ๊ฑธ๋ ธ์Šต๋‹ˆ๋‹ค. ๋ฐ”์ด๋Ÿด ์„œ๋น„์Šค๋ผ ํŠธ๋ž˜ํ”ฝ์„ ์˜ˆ์ธกํ•  ์ˆ˜๊ฐ€ ์—†๋Š”๋ฐ, ๊ฑด๋‹น ๋น„์šฉ์ด ๋‚˜๊ฐ€๋ฉด ๋ถ€๋‹ด์ด ํฝ๋‹ˆ๋‹ค.

์š”๊ตฌ์‚ฌํ•ญGemini 2.5 Flash
๋ฌด๋ฃŒ ๋˜๋Š” ์ €๋ ดโœ…
์ด๋ฏธ์ง€/PDF ๋ฉ€ํ‹ฐ๋ชจ๋‹ฌโœ…
ํ•œ๊ตญ์–ด (์ถฉ์ฒญ๋„ ์‚ฌํˆฌ๋ฆฌ) ์„ฑ๋Šฅโœ…
JSON ์ถœ๋ ฅ ์•ˆ์ •์„ฑโœ…

์‘๋‹ต์€ ๊ตฌ์กฐํ™”๋œ JSON์œผ๋กœ ๋ฐ›๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค:

{
  "cringeScore": 72,
  "detectedWords": ["์„ฑ์žฅํ•˜๋Š”", "์ž„ํŒฉํŠธ", "์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜"],
  "roastText": "์•„์ด๊ตฌ~ ์ด ํ”„๋กœํ•„ ์“ธ ๋•Œ ๋ถ€๋„๋Ÿฝ์ง€ ์•Š์•˜์–ด์œ ?...",
  "tips": ["...", "...", "..."]
}

detectedWords๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ›์œผ๋‹ˆ๊นŒ ๊ฒฐ๊ณผ ํ™”๋ฉด์—์„œ ๋ฑƒ์ง€๋กœ ์˜ˆ์˜๊ฒŒ ๋ณด์—ฌ์ค„ ์ˆ˜ ์žˆ๊ณ , Slack ๋กœ๊ทธ์—๋„ ๋ฐ”๋กœ ์ฐํž™๋‹ˆ๋‹ค.


ํ”„๋กฌํ”„ํŠธ ์—”์ง€๋‹ˆ์–ด๋ง โ€” "๋ฐœ์ž‘ ๋ฒ„ํŠผ" ์‹œ์Šคํ…œ

์ถฉ์ฒญ๋„ ์‚ฌํˆฌ๋ฆฌ ํ• ๋จธ๋‹ˆ๊ฐ€ ํŒฉํญํ•ด์ฃผ๋Š” ์„œ๋น„์Šค๋‹ˆ๊นŒ ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. ํ•œ๊ตญ์ธ๋“ค์ด LinkedIn์—์„œ ์ œ์ผ ๋งŽ์ด ์“ฐ๋Š” ๋‹จ์–ด๋“ค์„ ์กฐ์‚ฌํ•ด์„œ ํ”„๋กฌํ”„ํŠธ์— ์ง์ ‘ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฑธ "๋ฐœ์ž‘ ๋ฒ„ํŠผ"์ด๋ผ๊ณ  ์ด๋ฆ„ ๋ถ™์˜€๋Š”๋ฐ AI๊ฐ€ ์ด ๋‹จ์–ด๋“ค์„ ๋ณด๋ฉด ๋ฐ˜๋“œ์‹œ ๋ฐ˜์‘ํ•˜๋„๋ก ๋งŒ๋“  ํด๋ฆฌ์…ฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

์œ ํ˜•์˜ˆ์‹œ
์„ฑ์žฅ ์ง‘์ฐฉํ˜•"๋งค์ผ ์„ฑ์žฅํ•˜๋Š”", "๋Ÿฌ๋‹ ์ปค๋ธŒ", "์ž๊ธฐ์ฃผ๋„์ "
ํ˜์‹ /๋ฌธ์ œํ•ด๊ฒฐ ํ—ˆ์„ธํ˜•"์ž„ํŒฉํŠธ", "๊ฐ€์น˜ ์ฐฝ์ถœ", "์ธ์‚ฌ์ดํŠธ"
์†Œํ†ต/ํ˜‘์—… ๊ต๊ณผ์„œํ˜•"์›ํ™œํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜", "์˜ค๋„ˆ์‹ญ", "๋“œ๋ฆฌ๋ธ"
๊ฒธ์†ํ•œ ์ฒ™ ์ž๋ž‘ํ˜•"๊ฐ์‚ฌํ•˜๊ฒŒ๋„", "์šด ์ข‹๊ฒŒ๋„", "humbled to"
์Šคํƒ€ํŠธ์—… ์šฉ์–ด ๋‚จ๋ฐœํ˜•"์• ์ž์ผ", "๊ทธ๋กœ์Šค", "MVP", "ํ”ผ๋ด‡"
์ˆซ์ž ์—†๋Š” ์„ฑ๊ณผํ˜•"๋งค์ถœ์„ ์„ฑ์žฅ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค" (์–ผ๋งˆ๋‚˜?)
๋ป”ํ•œ ์ž๊ธฐ์†Œ๊ฐœํ˜•"๋” ๋‚˜์€ ์„ธ์ƒ์„ ๋งŒ๋“ค๊ณ  ์‹ถ์€", "๋‹ค์–‘ํ•œ ๊ฒฝํ—˜"
๋‹น์—ฐํ•œ ์Šคํ‚ฌ ๋‚˜์—ดํ˜•์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜, ํŒ€์›Œํฌ, ๋ฆฌ๋”์‹ญ, ์„ฑ์‹คํ•จ

๊ฐ์„ฑ ์„ค๊ณ„ โ€” ํŒฉํญ๊ณผ ์‘์›์€ ๋”ฐ๋กœ

์ฒ˜์Œ์—” AIํ•œํ…Œ "๋งˆ์ง€๋ง‰์—” ๋”ฐ๋œปํ•˜๊ฒŒ ๋งˆ๋ฌด๋ฆฌํ•ด์ค˜"๋ผ๊ณ  ์‹œ์ผฐ๋Š”๋ฐ, ํ†ค์ด ๋งค๋ฒˆ ๋‹ฌ๋ผ์ ธ์„œ ์–ด์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ญํ• ์„ ๋‚˜๋ˆ ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.

  • AI โ†’ ๋๊นŒ์ง€ ํŒฉํญ๋งŒ. ์ž๊ธฐ๊ฐ€ ์ž˜ํ•˜๋Š” ๊ฒƒ์— ์ง‘์ค‘
  • HalmiCheer ์ปดํฌ๋„ŒํŠธ โ†’ ๊ณ ์ • ์‘์› ๋ฌธ๊ตฌ๋กœ ๋งˆ๋ฌด๋ฆฌ

๋ธŒ๋žœ๋”ฉ โ€” ํ• ๋ฏธ๋–ผ์˜ ํƒ„์ƒ

๋ฏธ๊ตญ์— "Roast My"๊ฐ€ ์žˆ๋‹ค๋ฉด, ํ•œ๊ตญ์—๋Š” ๋ญ๊ฐ€ ์–ด์šธ๋ฆด๊นŒ?

"๋ผ๋–ผ๋Š”~" ๋“œ๋ฆฝ์ด ๋– ์˜ฌ๋ž์Šต๋‹ˆ๋‹ค. ๊ผฐ๋Œ€ ์–ด๋ฅธ์ด ์ Š์€ ์‚ฌ๋žŒ ํ›ˆ์ˆ˜ ๋‘๋Š” ๊ทธ ๋А๋‚Œ. ๊ฑฐ๊ธฐ์„œ ๋””์ž์ด๋„ˆ๋กœ ์ผํ•˜๋Š” ์นœํ•œ ์นœ๊ตฌ๊ฐ€ ์˜ˆ์ „์— ๋งŒ๋“ค์–ด์คฌ๋˜ ํž™๋จธ๋‹ˆ ์‚ฌ์ง„์ด ๋– ์˜ค๋ฅด๋ฉด์„œ ๋”ฑ ๋งž์•„๋–จ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

ํ• ๋ฏธ๋–ผ ์ด๋ฆ„ ์ง€์€ ์ˆœ๊ฐ„ ์ด๋ฏธ ๋ฐ˜์€ ๋œ ๋А๋‚Œ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐˆ ์„œ๋น„์Šค ๋งŒ๋“œ๋Š” ๊น€์— ์ƒ๊ฐ๋‚œ ๊ฑด๋ฐ, ์ด์Šคํ„ฐ์—๊ทธ๋„ ํ•˜๋‚˜ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค. ์žฌ๋ฐŒ์„ ๊ฒƒ ๊ฐ™์•„์„œ.

๐Ÿซ ๋™์„œ์‹ํ’ˆ ๋‹ด๋‹น์ž๋‹˜ ๋ณด๊ณ  ๊ณ„์‹œ์œ ? ํ• ๋ฏธ๋–ผ ร— ๋ฏธ๋–ผ ์ฝœ๋ผ๋ณด ์–ด๋–ป๊ฒ ์–ด์œ ~ ๐Ÿ’›

์ด๋Ÿฐ ์“ธ๋ฐ์—†๋Š” ๋””ํ…Œ์ผ ๋„ฃ์„ ๋•Œ๊ฐ€ ์ œ์ผ ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค.๐Ÿ˜„


๋ชจ๋‹ˆํ„ฐ๋ง โ€” Sentry + Slack์œผ๋กœ ๋

์—๋Ÿฌ๋Š” Sentry, ์ •์ƒ ์‚ฌ์šฉ ๋กœ๊ทธ๋Š” Slack Webhook. ์‹ฌํ”Œํ•˜๊ฒŒ ๊ฐ”์Šต๋‹ˆ๋‹ค.

๐Ÿ‘ต ํŒฉํญ ์™„๋ฃŒ!
โ€ข ์˜ค๊ธ€ ์ ์ˆ˜: 72/100 (๋ถ€๋„๋Ÿฝ์ง€ ์•Š์•˜์–ด์œ ? ๐Ÿ’€)
โ€ข ํ—ˆ์„ธ ๋‹จ์–ด: ์„ฑ์žฅํ•˜๋Š”, ์ž„ํŒฉํŠธ, ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜
โ€ข ๋ถ„์„ ๋ฐฉ์‹: URL ์Šคํฌ๋ž˜ํ•‘

์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ์“ฐ๋‹ค๊ฐ€ ์—๋Ÿฌ๊ฐ€ ํ„ฐ์ง€๋ฉด ๋ฐ”๋กœ๋ฐ”๋กœ ๋Œ€์‘ํ•˜๊ณ  ์‹ถ์—ˆ๊ณ , API ํ• ๋‹น๋Ÿ‰์ด ์–ผ๋งˆ๋‚˜ ์†Œ์ง„๋˜๊ณ  ์žˆ๋Š”์ง€, ์—…๋กœ๋“œ ๋ฐฉ์‹์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋น„์œจ์€ ์–ด๋–ค์ง€๋„ ํ™•์ธํ•˜๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. DB๋‚˜ ์–ด๋“œ๋ฏผ ํŒจ๋„๊นŒ์ง€ ๋งŒ๋“ค ํ•„์š”๋Š” ์—†์–ด์„œ, Slack์œผ๋กœ ๊ฐ„๋‹จํ•œ ์ •๋ณด๋งŒ ์˜ค๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์ด๋“œ ํ”„๋กœ์ ํŠธ์—๋Š” ์ด๊ฒŒ ๋”ฑ์ž…๋‹ˆ๋‹ค.


๋Ÿฐ์นญ ํ›„ โ€” ์‹ค์„œ๋น„์Šค์—์„œ ํ„ฐ์ง„ ๊ฒƒ๋“ค

๋ฐฐํฌํ•˜๊ณ  ํ•˜๋ฃจ ๋งŒ์— ์ฝ”๋“œ๋กœ๋Š” ์ ˆ๋Œ€ ์žก์„ ์ˆ˜ ์—†์—ˆ๋˜ ๋ฌธ์ œ๋“ค์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ถ„๋ช… ์ด์ƒ์—†์—ˆ๋Š”๋ฐ...

1. ํ•œ๊ธ€ LinkedIn URL ์Šคํฌ๋ž˜ํ•‘ ์‹คํŒจ

์ƒ์•„-์ด-1234567 ๊ฐ™์ด ํ•œ๊ธ€์ด ์„ž์ธ username์„ ๋„ฃ์œผ๋ฉด 8๊ฐœ API๊ฐ€ ์ „๋ถ€ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. RapidAPI ์Šคํฌ๋ž˜ํผ๋“ค์ด ๋น„์˜๋ฌธ username์„ ์•„์˜ˆ ๋ชป ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฑฐ์˜€์Šต๋‹ˆ๋‹ค.

์—๋Ÿฌ ํ™”๋ฉด๋ณด๋‹ค ์‚ฌ์ „ ์•ˆ๋‚ด๊ฐ€ ๋‚ซ๋‹ค๊ณ  ๋ดค์Šต๋‹ˆ๋‹ค. ํ•œ๊ธ€์ด ๊ฐ์ง€๋˜๋ฉด "์Šคํฌ๋ž˜ํ•‘์ด ์•ˆ ๋  ์ˆ˜ ์žˆ์–ด์œ " ๋ฌธ๊ตฌ๋ฅผ ๋ฏธ๋ฆฌ ๋„์›Œ์„œ, ์—…๋กœ๋“œ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์œ ๋„ํ•˜๋„๋ก ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.

2. Gemini JSON ํŒŒ์‹ฑ ์‹คํŒจ

๊ฐ„ํ—์ ์œผ๋กœ 500์ด ํ„ฐ์กŒ์Šต๋‹ˆ๋‹ค. Gemini๊ฐ€ JSON์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ๊ฐ€๋” json ... ๋งˆํฌ๋‹ค์šด ์ฝ”๋“œ๋ธ”๋ก์œผ๋กœ ๊ฐ์‹ธ๊ฑฐ๋‚˜, ์•ž๋’ค์— ์„ค๋ช… ํ…์ŠคํŠธ๋ฅผ ๋ถ™์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœ JSON.parse()๋กœ๋Š” ๋‹น์—ฐํžˆ ํ„ฐ์ง‘๋‹ˆ๋‹ค.

2๋‹จ๊ณ„ ํŒŒ์‹ฑ์œผ๋กœ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค:

try {
  // 1์ฐจ: ์ฝ”๋“œ๋ธ”๋ก ์ œ๊ฑฐ ํ›„ ํŒŒ์‹ฑ
  const cleaned = text.replace(/```[\s\S]*?\n([\s\S]*?)```/g, "$1").trim();
  result = JSON.parse(cleaned);
} catch {
  // 2์ฐจ: ์‘๋‹ต์—์„œ ์ฒซ ๋ฒˆ์งธ { ~ ๋งˆ์ง€๋ง‰ } ๋ฅผ ์ง์ ‘ ์ถ”์ถœ
  const firstBrace = text.indexOf("{");
  const lastBrace = text.lastIndexOf("}");
  if (firstBrace !== -1 && lastBrace > firstBrace) {
    result = JSON.parse(text.slice(firstBrace, lastBrace + 1));
  }
}

1์ฐจ์—์„œ ์ •๊ทœ์‹์œผ๋กœ ์ฝ”๋“œ๋ธ”๋ก์„ ์ œ๊ฑฐํ•˜๊ณ , ์‹คํŒจํ•˜๋ฉด 2์ฐจ์—์„œ JSON ๊ฐ์ฒด์˜ ์‹œ์ž‘({)๊ณผ ๋(})์„ ์ง์ ‘ ์ฐพ์•„ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค. Gemini๊ฐ€ ์ฝ”๋“œ๋ธ”๋ก ์•ž๋’ค์— ์–ด๋–ค ํ…์ŠคํŠธ๋ฅผ ๋ถ™์ด๋“  JSON๋งŒ ์ •ํ™•ํžˆ ๊บผ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์‹ฑ ์‹คํŒจ ์‹œ์—๋Š” raw text๋ฅผ Sentry์— ์ฐ์–ด์„œ ๋‚˜์ค‘์— ๋ญ๊ฐ€ ๊นจ๋œจ๋ ธ๋Š”์ง€ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.

3. Gemini๊ฐ€ ๋‚ ์งœ๋ฅผ ๋ชจ๋ฆ…๋‹ˆ๋‹ค!

์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์•Œ๊ฒŒ ๋œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ํ”„๋กœํ•„์— "์‚ผ์„ฑ ์ฒญ๋…„ SW ์•„์นด๋ฐ๋ฏธ 2025๋…„ 1์›”"์ด๋ผ๊ณ  ์ ํ˜€ ์žˆ์œผ๋ฉด, Gemini๊ฐ€ ์ด๊ฑธ ๋ฏธ๋ž˜ ์ผ์ •์œผ๋กœ ์˜ค์ธํ•ด์„œ "์‹œ์ž‘๋„ ์•ˆ ํ•œ ๊ฑธ ๊ฒฝ๋ ฅ์ด๋ผ๊ณ  ์˜ฌ๋ ค ๋†“์œผ๋ฉด ์‚ฌ๋žŒ๋“ค์ด ์•Œ์•„์ฃผ๋Š” ์ค„ ์•„๋Š”๊ฒจ?"๋ผ๊ณ  ํŒฉํญํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. 2025๋…„ 1์›”์€ ์ด๋ฏธ ์ง€๋‚œ ๊ณผ๊ฑฐ์ธ๋ฐ๋„.

LLM์€ ํ•™์Šต ์‹œ์ ์˜ ์ง€์‹๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ, ํ”„๋กฌํ”„ํŠธ์— ํ˜„์žฌ ๋‚ ์งœ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์•Œ๋ ค์ฃผ์ง€ ์•Š์œผ๋ฉด ์‹œ๊ฐ„ ๊ธฐ์ค€์„ ์žก์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ํ•ด๊ฒฐ์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

function buildSystemPrompt() {
  const today = new Date().toISOString().split("T")[0];
  return `...
์˜ค๋Š˜ ๋‚ ์งœ: ${today}
ํ”„๋กœํ•„์— ์ ํžŒ ๋‚ ์งœ/๊ธฐ๊ฐ„์„ ํŒ๋‹จํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์˜ค๋Š˜ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๊ณผ๊ฑฐ/ํ˜„์žฌ/๋ฏธ๋ž˜๋ฅผ ํŒ๋‹จํ•˜์„ธ์š”.
...`;
}

ํ•œ ์ค„ ์ถ”๊ฐ€๋กœ ํ•ด๊ฒฐ๋์ง€๋งŒ, ์ง์ ‘ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ธฐ ์ „๊นŒ์ง€๋Š” ์ „ํ˜€ ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ•œ ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ ์‚ฌ์šฉ์ž์˜ ํ”ผ๋“œ๋ฐฑ์„ ํ†ตํ•ด ๋ฌธ์ œ์ ๋“ค์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์–ด์„œ ํ”ผ๋“œ๋ฐฑ ์˜์—ญ์„ ์ถ”๊ฐ€ํ•˜๊ธธ ์ •๋ง ์ž˜ํ–ˆ๋‹จ ์ƒ๊ฐ์ด ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

4. ํด๋ฆฝ๋ณด๋“œ ๊ถŒํ•œ ๊ฑฐ๋ถ€

๊ฒฐ๊ณผ ํ™”๋ฉด ๊ณต์œ  ๋ฒ„ํŠผ์—์„œ NotAllowedError๊ฐ€ ํ„ฐ์กŒ์Šต๋‹ˆ๋‹ค. navigator.share() โ†’ ์‹คํŒจ โ†’ clipboard.writeText()๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœํ•˜๋Š” ๊ตฌ์กฐ์˜€๋Š”๋ฐ, ๋ฒ„ํŠผ ํด๋ฆญ ํ•œ ๋ฒˆ์œผ๋กœ ๋ณด์•ˆ API๋ฅผ ๋‘ ๊ฐœ ์—ฐ๋‹ฌ์•„ ๋ถ€๋ฅด๋ฉด ๋‘ ๋ฒˆ์งธ์—์„œ ์ œ์Šค์ฒ˜๊ฐ€ ์†Œ๋น„๋œ ๊ฑธ๋กœ ๊ฐ„์ฃผ๋ผ์„œ ๊ฑฐ๋ถ€๋‹นํ•ฉ๋‹ˆ๋‹ค.

navigator.share ์ง€์› ํ™˜๊ฒฝ์ด๋ฉด ๊ทธ๊ฒƒ๋งŒ ์“ฐ๊ณ  ๋ฐ”๋กœ return, ๋ฏธ์ง€์›์ด๋ฉด ํด๋ฆฝ๋ณด๋“œ๋กœ ๋ถ„๊ธฐํ•˜๊ฒŒ ๊ณ ์ณค์Šต๋‹ˆ๋‹ค. ๋‘ API๊ฐ€ ๊ฒฝ์Ÿํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ์—†์•ค ๊ฒ๋‹ˆ๋‹ค.


๋งˆ์น˜๋ฉฐ

ํ• ๋ฏธ๋–ผ๋ฅผ ๋งŒ๋“œ๋Š” ๋‚ด๋‚ด ์žฌ๋ฐŒ์—ˆ์Šต๋‹ˆ๋‹ค. 8๊ฐœ API fallback chain์„ ์—ฎ์„ ๋•Œ, ์ฐจ๋‹จ ํ™”๋ฉด์„ ์Šคํ† ๋ฆฌ๋กœ ๋ฐ”๊ฟ€ ๋•Œ, ์ด์Šคํ„ฐ์—๊ทธ๋ฅผ ์‹ฌ์„ ๋•Œ...๋“ฑ๋“ฑ ์ด๋Ÿฐ ๋””ํ…Œ์ผ ํ•˜๋‚˜ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค ๋•Œ ์žฌ๋ฏธ์žˆ์–ด ํ•  ์œ ์ €๋“ค์„ ์ƒ๊ฐํ•˜๋‹ˆ ๋” ์‹ ๋‚˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๊ทธ๋ƒฅ AI ์ฑ—๋ด‡๊ณผ ์žฌ๋ฐŒ๋Š” ์„œ๋น„์Šค์˜ ์ฐจ์ด๋Š” ๊ฒฐ๊ตญ ๋””ํ…Œ์ผ์—์„œ ๋‚˜์˜จ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌด์—‡๋ณด๋‹ค ๋งŒ๋“œ๋Š” ์‚ฌ๋žŒ์ด ์žฌ๋ฐŒ์–ด์•ผ ์“ฐ๋Š” ์‚ฌ๋žŒ๋„ ์žฌ๋ฐŒ์Šต๋‹ˆ๋‹ค!

์ฃผ๋ณ€์— ๋งŽ์ด๋“ค ๊ณต์œ ํ•ด์ฃผ์„ธ์š”~~๐Ÿ™

๐Ÿ‘‰ ํ• ๋ฏธ๋–ผ ์ง์ ‘ ์จ๋ณด๊ธฐ