# ๐Ÿš€ AI ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๋น ๋ฅธ ํ…Œ์ŠคํŠธ ๊ฐ€์ด๋“œ ## โšก ๊ฐ€์žฅ ๋น ๋ฅธ ๋ฐฉ๋ฒ• (๊ธฐ์กด ์ด๋ฏธ์ง€ ํ™•์ธ) ```bash # 1. ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ npm run dev # 2. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐ”๋กœ ์ ‘์† http://localhost:3000/events/create?event-creation.step=contentPreview ``` โœจ **๋!** ์ž๋™์œผ๋กœ Mock ๋ฐ์ดํ„ฐ(eventId: "1761634317010")๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ธฐ์กด ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. ๐Ÿ’ก **์ด๋ฏธ์ง€๊ฐ€ ์—†์„ ๊ฒฝ์šฐ**: "์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๊ธฐ" ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. --- ## ๐Ÿ“‹ ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ๋กœ ํ…Œ์ŠคํŠธ (์„ ํƒ์‚ฌํ•ญ) ### 1๋‹จ๊ณ„: ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ ```bash npm run dev ``` ### 2๋‹จ๊ณ„: Mock ๋ฐ์ดํ„ฐ ์„ค์ • (3๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ์„ ํƒ) ### โœจ ๋ฐฉ๋ฒ• A: ์›น UI ์‚ฌ์šฉ (๊ฐ€์žฅ ์‰ฌ์›€!) ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด๊ธฐ: ``` http://localhost:3000/init-mock-data.html ``` "LocalStorage์— ์ €์žฅํ•˜๊ธฐ" ๋ฒ„ํŠผ ํด๋ฆญ โ†’ ์™„๋ฃŒ! --- ### ๋ฐฉ๋ฒ• B: ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†” ์‚ฌ์šฉ 1. `http://localhost:3000` ์ ‘์† 2. F12 (๊ฐœ๋ฐœ์ž ๋„๊ตฌ) โ†’ Console ํƒญ 3. ๋‹ค์Œ ์ฝ”๋“œ ๋ณต์‚ฌ & ๋ถ™์—ฌ๋„ฃ๊ธฐ: ```javascript localStorage.setItem('eventCreationData', JSON.stringify({ eventDraftId: "1761634317010", eventTitle: "๋งฅ์ฃผ ํŒŒํ‹ฐ ์ด๋ฒคํŠธ", eventDescription: "๊ฐ•๋‚จ์—์„œ ์—ด๋ฆฌ๋Š” ์‹ ๋‚˜๋Š” ๋งฅ์ฃผ ํŒŒํ‹ฐ์— ์ฐธ์—ฌํ•˜์„ธ์š”!", industry: "์Œ์‹์ ", location: "๊ฐ•๋‚จ", trends: ["ํŒŒํ‹ฐ", "๋งฅ์ฃผ", "์ƒ๋งฅ์ฃผ"], prize: "์ƒ๋งฅ์ฃผ 1์ž”" })); ``` --- ### ๋ฐฉ๋ฒ• C: HTML ํŒŒ์ผ ์ง์ ‘ ์—ด๊ธฐ ```bash open test-localstorage.html ``` ## 3๋‹จ๊ณ„: ์ด๋ฏธ์ง€ ์ƒ์„ฑ ํŽ˜์ด์ง€ ์ ‘์† ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด๊ธฐ: ``` http://localhost:3000/events/create?event-creation.step=contentPreview ``` ## 4๋‹จ๊ณ„: ์ž๋™ ์‹คํ–‰ ํ™•์ธ โœ… 1. ํŽ˜์ด์ง€ ๋กœ๋”ฉ๋˜๋ฉด ์ž๋™์œผ๋กœ ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹œ์ž‘ 2. ๋กœ๋”ฉ ์Šคํ”ผ๋„ˆ์™€ ์ง„ํ–‰๋ฅ  ํ™•์ธ 3. ์•ฝ 60์ดˆ ํ›„ 3๊ฐ€์ง€ ์Šคํƒ€์ผ ์ด๋ฏธ์ง€ ์™„์„ฑ - ์Šคํƒ€์ผ 1: ์‹ฌํ”Œ - ์Šคํƒ€์ผ 2: ํ™”๋ ค - ์Šคํƒ€์ผ 3: ํŠธ๋ Œ๋”” ## ์˜ˆ์ƒ ๊ฒฐ๊ณผ ### ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ - โœ… **์ฆ‰์‹œ ํ‘œ์‹œ**: ๋กœ๋”ฉ ํ›„ ๋ฐ”๋กœ ์ด๋ฏธ์ง€ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ™”๋ฉด - โœ… **3๊ฐœ ์Šคํƒ€์ผ ์ด๋ฏธ์ง€**: SIMPLE, FANCY, TRENDY ๊ฐ๊ฐ ์ตœ์‹  ์ด๋ฏธ์ง€ ํ‘œ์‹œ - โœ… **์ด๋ฏธ์ง€ ์„ ํƒ**: ๋ผ๋””์˜ค ๋ฒ„ํŠผ์œผ๋กœ ์›ํ•˜๋Š” ์Šคํƒ€์ผ ์„ ํƒ - โœ… **์žฌ์ƒ์„ฑ ๋ฒ„ํŠผ**: "์ด๋ฏธ์ง€ ์žฌ์ƒ์„ฑ" ๋ฒ„ํŠผ์œผ๋กœ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ์ƒ์„ฑ ๊ฐ€๋Šฅ - โœ… **ํฌ๊ฒŒ๋ณด๊ธฐ**: ๊ฐ ์ด๋ฏธ์ง€ ํด๋ฆญ ์‹œ ์ „์ฒดํ™”๋ฉด ๋ฏธ๋ฆฌ๋ณด๊ธฐ ### ์ด๋ฏธ์ง€๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ - โš ๏ธ **์—๋Ÿฌ ๋ฉ”์‹œ์ง€**: "์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ์ง€๋ฅผ ๋จผ์ € ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”." - ๐Ÿ”„ **์ƒ์„ฑ ๋ฒ„ํŠผ**: "์ด๋ฏธ์ง€ ์ƒ์„ฑํ•˜๊ธฐ" ๋ฒ„ํŠผ ํด๋ฆญ - โณ **์ƒ์„ฑ ๋Œ€๊ธฐ**: API ์š”์ฒญ ํ›„ 2์ดˆ ๋’ค ์ž๋™์œผ๋กœ ์ด๋ฏธ์ง€ ์กฐํšŒ - โœ… **์ด๋ฏธ์ง€ ํ‘œ์‹œ**: ์ƒ์„ฑ ์™„๋ฃŒ๋œ ์ด๋ฏธ์ง€ ์ž๋™ ํ‘œ์‹œ ## ๋ฌธ์ œ ํ•ด๊ฒฐ ### ~~"์ด๋ฒคํŠธ ์ •๋ณด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค" ์—๋Ÿฌ~~ โ†’ โœ… **ํ•ด๊ฒฐ๋จ!** ์ด์ œ ์ž๋™์œผ๋กœ Mock ๋ฐ์ดํ„ฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ### ~~Network Error / CORS ์—๋Ÿฌ~~ โ†’ โœ… **ํ•ด๊ฒฐ๋จ!** Next.js API proxy๋ฅผ ํ†ตํ•ด CORS ๋ฌธ์ œ ์šฐํšŒ โ†’ ํ”„๋ก ํŠธ์—”๋“œ๊ฐ€ `/api/content/*` โ†’ ๋ฐฑ์—”๋“œ `localhost:8084` ๋กœ ์ž๋™ ํ”„๋ก์‹œ ### ์ด๋ฏธ์ง€ ์ƒ์„ฑ ์‹คํŒจ โ†’ Content API (localhost:8084) ์‹คํ–‰ ์—ฌ๋ถ€ ํ™•์ธ โ†’ ํ„ฐ๋ฏธ๋„์—์„œ ํ™•์ธ: `curl http://localhost:8084/api/v1/content/events/7777/images` ### ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ โ†’ ๋„คํŠธ์›Œํฌ ํƒญ์—์„œ CDN URL ๋กœ๋“œ ์ƒํƒœ ํ™•์ธ โ†’ Azure Blob Storage ์ ‘๊ทผ ๊ถŒํ•œ ํ™•์ธ ## API ํ™•์ธ ```bash # ์ด๋ฒคํŠธ 1761634317010์˜ ์ด๋ฏธ์ง€ ํ™•์ธ curl http://localhost:8084/api/v1/content/events/1761634317010/images # ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋ก์‹œ๋ฅผ ํ†ตํ•œ ํ™•์ธ (๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹คํ–‰ ์ค‘) curl http://localhost:3000/api/content/events/1761634317010/images ``` ## ๋””๋ฒ„๊น… ๋ธŒ๋ผ์šฐ์ € ๊ฐœ๋ฐœ์ž ๋„๊ตฌ (F12) โ†’ Console ํƒญ์—์„œ ๋‹ค์Œ ๋กœ๊ทธ ํ™•์ธ: ``` ๐Ÿ“ฅ Loading generated images for event: 1761634317010 โœ… Images loaded from API: 6 [...] ๐Ÿ“ธ Processing image 1: { id: 1, style: 'SIMPLE', platform: 'INSTAGRAM', ... } โœ… Selected as latest SIMPLE image ๐Ÿ“ธ Processing image 2: { id: 3, style: 'FANCY', platform: 'INSTAGRAM', ... } โœ… Selected as latest FANCY image ๐Ÿ“ธ Processing image 3: { id: 5, style: 'TRENDY', platform: 'INSTAGRAM', ... } โœ… Selected as latest TRENDY image ๐ŸŽจ Image map created with entries: { SIMPLE: 'YES โœ…', FANCY: 'YES โœ…', TRENDY: 'YES โœ…', totalSize: 3 } โœ… ์ด๋ฏธ์ง€ ๋กœ๋“œ ์™„๋ฃŒ! ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ–ผ๏ธ Rendering SIMPLE: { hasImage: true, imageDataExists: true, cdnUrl: 'https://blob...' } โœ… SIMPLE image loaded successfully ``` --- ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ `MOCK_DATA_SETUP.md` ์ฐธ์กฐ