Skip to content

Latest commit

ย 

History

History
98 lines (66 loc) ยท 4.72 KB

File metadata and controls

98 lines (66 loc) ยท 4.72 KB

๐ŸŽธ Daily Guitar

AI ๊ธฐ๋ฐ˜ ๊ธฐํƒ€ ์—ฐ์ฃผ ๋ถ„์„ ๋ฐ MCP ๊ธฐ๋ฐ˜ ๊ธฐํƒ€ ์—ฐ์Šต ์–ด์‹œ์Šคํ„ดํŠธ ์„œ๋น„์Šค


๐Ÿ“Œ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

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

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด AI ๊ธฐ๋ฐ˜ ๊ธฐํƒ€ ์—ฐ์Šต ๋ถ„์„ ์„œ๋น„์Šค Daily Guitar๋ฅผ ๊ธฐํšํ–ˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ์žฅ๋ฅด์™€ ์—ฐ์Šต ๋ฐ์ดํ„ฐ๋ฅผ ๋งฅ๋ฝ์œผ๋กœ GPT์— ์งˆ์˜ํ•ด ์ˆ˜์ค€์— ๋งž๋Š” ๊ณก์„ ์ถ”์ฒœ๋ฐ›๊ณ , MCP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ์—ฐ์Šต ์ผ์ •์„ Google Calendar์— ์ž๋™์œผ๋กœ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ์šธ๊ณผํ•™๊ธฐ์ˆ ๋Œ€ํ•™๊ต ์‚ฐ์—…์ •๋ณด์‹œ์Šคํ…œ์ „๊ณต 2025 ์บก์Šคํ†ค ๊ฒฝ์ง„๋Œ€ํšŒ ๊ธˆ์ƒ(2์œ„) ์ˆ˜์ƒ ๐Ÿ†


โœจ ์ฃผ์š” ๊ธฐ๋Šฅ

๐ŸŽต ๊ธฐํƒ€ ์ง€ํŒ UI ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์—ฐ์Šต ์ธํ„ฐํŽ˜์ด์Šค

  • ์ฝ”๋“œยทํฌ๋กœ๋งคํ‹ฑ ๋“ฑ ๋ฃจํ‹ด ์œ ํ˜•์— ๋”ฐ๋ผ ๊ธฐํƒ€ ์ง€ํŒ UI์— ์šด์ง€๋ฒ•์„ ๋™์ ์œผ๋กœ ๋ Œ๋”๋ง
  • ์„ค์ •๋œ BPM์— ๋งž์ถฐ ๋ฉ”ํŠธ๋กœ๋†ˆ ์‚ฌ์šด๋“œ์™€ Pulse ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋™๊ธฐํ™”ํ•ด ์‹œ๊ฐยท์ฒญ๊ฐ ํ”ผ๋“œ๋ฐฑ ๋™์‹œ ์ œ๊ณต
  • ์†๊ฐ€๋ฝ๋ณ„ ์ƒ‰์ƒ ๋งคํ•‘์œผ๋กœ ์ง๊ด€์ ์ธ ์šด์ง€๋ฒ• ์‹œ๊ฐํ™”
  • ํฌ๋กœ๋งคํ‹ฑ ์—ฐ์Šต์€ 12ํ”„๋ ›๊นŒ์ง€ ์ˆœํšŒ, ์ฝ”๋“œ ์ „ํ™˜ ์—ฐ์Šต์€ ์ฝ”๋“œ ๊ตฌ์„ฑยท์ˆœ์„œ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ๊ฐ€๋Šฅ

๐ŸŽ™๏ธ ๋งˆ์ดํฌ ์ž…๋ ฅ ๊ฐ๋„ ์„ค์ • ๋ฐ ์‹ค์‹œ๊ฐ„ ์Œํ–ฅ ๋ถ„์„

  • AudioContext โ†’ MediaStreamSource โ†’ GainNode โ†’ AnalyserNode ๋…ธ๋“œ ์ฒด์ธ ๊ตฌ์„ฑ
  • ์‚ฌ์šฉ์ž๊ฐ€ ์Šฌ๋ผ์ด๋”๋กœ ์ž…๋ ฅ ๊ฐ๋„๋ฅผ ์ง์ ‘ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๋Š” ์„ค์ • ํŽ˜์ด์ง€ ๊ตฌํ˜„
  • RMS ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ณผ๋ฅจ ๊ณ„์‚ฐ
  • requestAnimationFrame ๊ธฐ๋ฐ˜ ๋ถ„์„ ๋ฃจํ”„๋กœ 60fps ์ˆ˜์ค€์˜ ์‹ค์‹œ๊ฐ„ ์Œํ–ฅ ํ”ผ๋“œ๋ฐฑ ์ œ๊ณต

๐Ÿค– AI ๊ธฐ๋ฐ˜ ๊ณก ์ถ”์ฒœ

  • ์‚ฌ์šฉ์ž์˜ ์—ฐ์Šต ๊ธฐ๋ก๊ณผ ์žฅ๋ฅด๋ฅผ ๋งฅ๋ฝ์œผ๋กœ GPT-4o-mini์— ์งˆ์˜ํ•ด ์ˆ˜์ค€์— ๋งž๋Š” ๊ณก 3๊ฐœ ์ถ”์ฒœ
  • YouTube Data API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด ์‹ ๋ขฐ๋„ ๋†’์€ ์˜์ƒ ๋งํฌ ์ œ๊ณต
  • GPT๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์•„ํ‹ฐ์ŠคํŠธ๋ช…ยท๊ณก๋ช…์œผ๋กœ ํ•œ์ •ํ•ด ์œ ํšจํ•˜์ง€ ์•Š์€ ๋งํฌ ๋ฌธ์ œ ํ•ด๊ฒฐ

๐Ÿ“… MCP ๊ธฐ๋ฐ˜ Google Calendar ์—ฐ๋™

  • ์ž์—ฐ์–ด๋กœ ์ž…๋ ฅ๋œ ์—ฐ์Šต ์ผ์ • ์š”์ฒญ์„ MCP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜
  • Google Calendar API์™€ ์—ฐ๊ฒฐํ•ด ์ฑ„ํŒ… ๋‚ด์—์„œ ์ผ์ • ๊ด€๋ฆฌ ์™„๊ฒฐ
  • Google Identity ๊ธฐ๋ฐ˜ ๋กœ๊ทธ์ธ๊ณผ OAuth2 Token Client ๊ธฐ๋ฐ˜ ์บ˜๋ฆฐ๋” ๊ถŒํ•œ ํš๋“์„ ๋ถ„๋ฆฌํ•ด ๊ตฌํ˜„

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๋ถ„๋ฅ˜ ๊ธฐ์ˆ 
Framework React
Language TypeScript
Styling Tailwind CSS
์ƒํƒœ ๊ด€๋ฆฌ Zustand
์ธํ”„๋ผ AWS S3, CloudFront
AI GPT-4o-mini, MCP
์™ธ๋ถ€ API Google Calendar API, YouTube Data API

๐Ÿ—๏ธ ๊ธฐ์ˆ  ์„ ํƒ ์ด์œ 

React

๊ธฐํƒ€ ์ง€ํŒ UI, ๋ฉ”ํŠธ๋กœ๋†ˆ ์• ๋‹ˆ๋ฉ”์ด์…˜, ์‹ค์‹œ๊ฐ„ ์Œํ–ฅ ๋ถ„์„ ๋“ฑ ์‚ฌ์šฉ์ž ์ธํ„ฐ๋ž™์…˜๊ณผ ์ƒํƒœ ๋ณ€ํ™”๊ฐ€ ๋นˆ๋ฒˆํ•œ ์„œ๋น„์Šค๋กœ, ๋ชจ๋ฐ”์ผ ์ „์šฉ ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. SSR๋ณด๋‹ค ํด๋ผ์ด์–ธํŠธ ์ค‘์‹ฌ์˜ ๋น ๋ฅธ ์ธํ„ฐ๋ž™์…˜์ด ์ค‘์š”ํ–ˆ๊ณ  React SPA๊ฐ€ ์ ํ•ฉํ•˜๋‹ค๊ณ  ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

Zustand

์‚ฌ์šฉ์ž ์ •๋ณด, ์—ฐ์Šต ์ด๋ ฅ, ๋ฃจํ‹ด ์„ค์ • ๋“ฑ ์—ฌ๋Ÿฌ ์ปดํฌ๋„ŒํŠธ์—์„œ ๊ณตํ†ต์œผ๋กœ ์ฐธ์กฐํ•˜๋Š” ์ƒํƒœ๊ฐ€ ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. Context API ๋Œ€๋น„ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋ฅผ ๊ตฌ๋…ํ•˜๋Š” ์ปดํฌ๋„ŒํŠธ๋งŒ ๋ฆฌ๋ Œ๋”๋ง๋˜์–ด ์—ฐ์Šต ์ค‘ BPM, ๋ฉ”ํŠธ๋กœ๋†ˆ ์ƒํƒœ ๋“ฑ ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฐ’์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

AWS S3 + CloudFront

์‚ฌ์šฉ์ž๊ฐ€ ์—…๋กœ๋“œํ•˜๋Š” ๊ธฐํƒ€ ์—ฐ์ฃผ ์˜ค๋””์˜ค ํŒŒ์ผ์€ ์šฉ๋Ÿ‰์ด ํฌ๊ณ  AI ๋ถ„์„ ํ›„ ๊ฒฐ๊ณผ ํŒŒ์ผ๋„ ์ €์žฅํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. S3๋กœ ๋Œ€์šฉ๋Ÿ‰ ์˜ค๋””์˜ค ํŒŒ์ผ์„ ์•ˆ์ •์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  CloudFront๋กœ ์บ์‹ฑํ•ด ํŒŒ์ผ ์‘๋‹ต ์†๋„๋ฅผ ๋†’์˜€์Šต๋‹ˆ๋‹ค.

MCP (Model Context Protocol)

์ž์—ฐ์–ด๋กœ ์ž…๋ ฅ๋œ ์—ฐ์Šต ์ผ์ • ์š”์ฒญ์„ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ด Google Calendar API์™€ ์—ฐ๊ฒฐํ•˜๋Š” ํŒŒ์ดํ”„๋ผ์ธ์ด ํ•„์š”ํ–ˆ์Šต๋‹ˆ๋‹ค. MCP ์„œ๋ฒ„๋ฅผ ํ†ตํ•ด AI ๋ถ„์„ ๊ฒฐ๊ณผ์™€ ์บ˜๋ฆฐ๋” ์ƒ์„ฑ์„ ํ•˜๋‚˜์˜ ์ฑ„ํŒ… ํ๋ฆ„ ์•ˆ์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿšจ ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

GPT ์œ ํŠœ๋ธŒ ๋งํฌ ์‹ ๋ขฐ์„ฑ ๋ฌธ์ œ

๋ฌธ์ œ: GPT๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ์œ ํŠœ๋ธŒ ๋งํฌ๊ฐ€ ์‚ญ์ œ๋œ ์˜์ƒ, ๋น„๊ณต์‹ ์˜์ƒ, ์ง€์—ญ ์ œํ•œ ์˜์ƒ ๋“ฑ ์žฌ์ƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๋งํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์›์ธ: GPT๋Š” ํ•™์Šต ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งํฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋งํฌ๊ฐ€ ํ˜„์žฌ ์œ ํšจํ•œ์ง€ ๊ฒ€์ฆํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ: GPT๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์ฝ˜ํ…์ธ ๋ฅผ ์•„ํ‹ฐ์ŠคํŠธ๋ช…๊ณผ ๊ณก๋ช…์œผ๋กœ๋งŒ ํ•œ์ •ํ•˜๊ณ , YouTube Data API๋ฅผ ์ง์ ‘ ํ˜ธ์ถœํ•ด ์‹ค์ œ๋กœ ์žฌ์ƒ ๊ฐ€๋Šฅํ•œ ์˜์ƒ ๋งํฌ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ๊ตฌ์กฐ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.


๐Ÿ‘ฉโ€๐Ÿ’ป ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

ํ˜„์žฌ๋Š” ์„œ๋ฒ„๊ฐ€ ๋‹ซํ˜€์žˆ๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

# ํŒจํ‚ค์ง€ ์„ค์น˜
npm install

# ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰
npm run dev

# ๋นŒ๋“œ
npm run build