emotion-chatbot-app / DEVLOG.md
hfexample's picture
Deploy clean snapshot of the repository
e221c83

๐Ÿ“… 2025๋…„ 11์›” 27์ผ

์ฃผ์ œ: UI ๋””ํ…Œ์ผ ์™„์„ฑ๋„ ํ–ฅ์ƒ & ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ณ ๋„ํ™” (Polishing)

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

1. ๋งค์ง ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” (Magic Capsule Navbar)

  • ๋””์ž์ธ: ๊ธฐ์กด ํ…์ŠคํŠธ ๋‚˜์—ด ๋ฐฉ์‹์„ ํƒˆํ”ผํ•˜์—ฌ, ๊ณต์ค‘์— ๋–  ์žˆ๋Š” ์บก์А ํ˜•ํƒœ์˜ ๊ธ€๋ž˜์Šค๋ชจํ”ผ์ฆ˜(Glassmorphism) ๋””์ž์ธ ์ ์šฉ.
  • ์ธํ„ฐ๋ž™์…˜: ๋งˆ์šฐ์Šค์˜ ์›€์ง์ž„์— ๋”ฐ๋ผ ํ•˜์–€์ƒ‰ ํ•˜์ด๋ผ์ดํŠธ ๋ฐ”(nav-marker)๊ฐ€ ๋ฉ”๋‰ด ์‚ฌ์ด๋ฅผ ๋ฌผ ํ๋ฅด๋“ฏ ๋”ฐ๋ผ๋‹ค๋‹ˆ๋Š” Sliding Magic Line ํšจ๊ณผ ๊ตฌํ˜„.

2. ๋Œ€์‹œ๋ณด๋“œํ˜• ๋‹ฌ๋ ฅ (Modern Card Calendar)

  • ์Šคํƒ€์ผ: ํˆฌ๋ช…ํ•œ ๋ฐฐ๊ฒฝ ๋Œ€์‹  ๊ฐ€๋…์„ฑ์ด ๋›ฐ์–ด๋‚œ '๋ชจ๋˜ ์นด๋“œ(Modern Card)' ์Šคํƒ€์ผ๋กœ ๋ณ€๊ฒฝ. ํ—ค๋”์— ํ…Œ๋งˆ ์ƒ‰์ƒ์„ ์ ์šฉํ•˜์—ฌ ์ง‘์ค‘๋„ ํ–ฅ์ƒ.
  • ๋ ˆ์ด์•„์›ƒ ์ตœ์ ํ™”: ์š”์ผ(Header)๊ณผ ๋‚ ์งœ(Grid)์˜ ์ •๋ ฌ์ด ์–ด๊ธ‹๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ CSS flex-basis: 14.28% ๊ฐ•์ œ ์ ์šฉ์„ ํ†ตํ•ด 1:1๋กœ ์™„๋ฒฝํ•˜๊ฒŒ ๋งž์ถค.
  • ์‹œ๊ฐํ™”: ๋‚ ์งœ ์•„๋ž˜์— ํ•ด๋‹น ์ผ๊ธฐ์˜ ๊ฐ์ •์„ ๋‚˜ํƒ€๋‚ด๋Š” **์ƒ‰์ƒ ์ (Dot)**์ด ์ž๋™์œผ๋กœ ํ‘œ์‹œ๋˜๋„๋ก ๊ตฌํ˜„.

3. ์ €์žฅ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ณ ๋„ํ™” (Bouncing & Super Jump)

  • ๋ฌผ๋ฆฌ ํšจ๊ณผ: ๋‹จ์ˆœํžˆ ๋‚ ์•„๊ฐ€๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜์„ "๋ฐ”๋‹ฅ์— ํ†ตํ†ต ํŠ€๊ธฐ๋‹ค๊ฐ€(Bouncing) ์—๋„ˆ์ง€๋ฅผ ๋ชจ์•„ ๋ชฉํ‘œ์ง€์ ์œผ๋กœ ์Šˆ์›… ๋‚ ์•„๊ฐ€๋Š”(Super Jump)" ์—ญ๋™์ ์ธ ์‹œํ€€์Šค๋กœ ์—…๊ทธ๋ ˆ์ด๋“œ.
  • ๋ฐ์ดํ„ฐ ๋™๊ธฐํ™”: CSS ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ๊ฐ„(5.1์ดˆ)๊ณผ ์„œ๋ฒ„ ์ €์žฅ ์š”์ฒญ(fetch)์„ Promise.all๋กœ ๋™๊ธฐํ™”ํ•˜์—ฌ, ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๋ฐ์ดํ„ฐ ์ €์žฅ์ด ์•ˆ์ „ํ•˜๊ฒŒ ์™„๋ฃŒ๋œ ํ›„ ํŽ˜์ด์ง€๊ฐ€ ์ด๋™๋˜๋„๋ก ๋กœ์ง ๊ฐ•ํ™”.

4. ๊ฐ์„ฑ ๋””ํ…Œ์ผ ๋ฐ ์šฉ์–ด ๊ฐœ์„ 

  • ์šฉ์–ด ์ง๊ด€ํ™”: ์ถ”์ฒœ ์นดํ…Œ๊ณ ๋ฆฌ ๋ช…์นญ์„ '์ˆ˜์šฉ/์ „ํ™˜'์—์„œ ๋” ๊ฐ์„ฑ์ ์ธ **'๊ณต๊ฐ/ํ™˜๊ธฐ'**๋กœ ๋ณ€๊ฒฝํ•˜๊ณ , ํ”„๋ก ํŠธ์—”๋“œ ํŒŒ์‹ฑ ๋กœ์ง์„ ์ด์— ๋งž์ถฐ ์ˆ˜์ •.
  • ์ถ”์ฒœ ์š”์•ฝ: AI์˜ ๊ธด ์ถ”์ฒœ ์ด์œ ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ํ•ต์‹ฌ ์ •๋ณด(์ข…๋ฅ˜, ์ œ๋ชฉ)๋งŒ ๊น”๋”ํ•˜๊ฒŒ ๋ณด์—ฌ์ฃผ๋„๋ก ํ…์ŠคํŠธ ์ •์ œ ํ•จ์ˆ˜(extractSummary) ์ ์šฉ.
  • ํ†ค ๋งค์นญ: ์ €์žฅ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ ์ƒ์„ฑ๋˜๋Š” '๊ธฐ์–ต ๊ตฌ์Šฌ'์˜ ์ƒ‰์ƒ์„ ๊ฐ ๊ฐ์ •(๊ธฐ์จ=Gold, ์Šฌํ””=SteelBlue ๋“ฑ)์˜ ๊ณ ์œ  ๋ถ„์œ„๊ธฐ์— ๋งž์ถฐ ์„ธ๋ฐ€ํ•˜๊ฒŒ ์กฐ์ •.

๐Ÿ“… 2025๋…„ 11์›” 25์ผ

์ฃผ์ œ: ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ†ตํ•ฉ ๋ฐ ๋ฒ„๊ทธ ์ˆ˜์ •

test_animation.html์—์„œ ๊ฐœ๋ฐœ๋œ ์ฑ… ์ ‘๊ธฐ ๋ฐ ๊ตฌ์Šฌ ๋ฐ”์šด์Šค ์• ๋‹ˆ๋ฉ”์ด์…˜์„ main.html์— ํ†ตํ•ฉํ•˜๊ณ  ๊ด€๋ จ ๋ฒ„๊ทธ๋ฅผ ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ธฐ๋Šฅ ๊ฐœ์„  ๋ฐ ํ†ตํ•ฉ

  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์ž‘ ๋ฌธ์ œ ํ•ด๊ฒฐ: playFullAnimation ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋˜ ์ •์˜๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜(rect) ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜์—ฌ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹œ์ž‘๋˜๋„๋ก ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์Šฌ ๋ฐ”์šด์Šค ์ •๊ตํ™”: ์ค‘์•™์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ํ™”๋ฉด ์˜ค๋ฅธ์ชฝ ๊ฐ€์žฅ์ž๋ฆฌ์—์„œ ์ •ํ™•ํžˆ ๋งˆ๋ฌด๋ฆฌ๋˜๋Š” 6ํšŒ ๋ฐ”์šด์Šค ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ ๋ฐ”์šด์Šค์˜ ์ˆ˜ํ‰ ์ด๋™ ๊ฑฐ๋ฆฌ๋ฅผ ์กฐ์ •ํ•˜์—ฌ ์ž์—ฐ์Šค๋Ÿฌ์šด ์›€์ง์ž„์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฑ… โ†’ ๊ตฌ์Šฌ ๋ณ€์‹  ์ธํŠธ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„:
    • ์ฑ…์ด ๊ตฌ๊ฒจ์ง€๋“ฏ ์ค‘์•™์œผ๋กœ ๋ชจ์—ฌ ๊ตฌ์Šฌ๋กœ ๋ณ€ํ•˜๋Š” 1.5์ดˆ(์ฑ… ์‘์ถ•) + 5์ดˆ(๊ตฌ์Šฌ ๋ฐ”์šด์Šค) = ์ด 6.5์ดˆ ๊ธธ์ด์˜ ์ธํŠธ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ฑ…์ด ๋ชจ์ด๋Š” ๋™์•ˆ ๊ตฌ์Šฌ์˜ ๊ฐ์ • ์ƒ‰์ƒ์œผ๋กœ ๋ฐฐ๊ฒฝ์ƒ‰์ด ๋ณ€ํ•˜๋„๋ก ํ•˜์—ฌ ์‹œ๊ฐ์  ์—ฐ๊ฒฐ์„ฑ์„ ๊ฐ•ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ฑ…์ด ๋ชจ์ด๋Š” ๋™์ž‘์€ '์ ‘ํžˆ๋Š”' ๋Œ€์‹  ํšŒ์ „ ์—†์ด '์ค‘์•™์œผ๋กœ ์‘์ถ•๋˜๋Š”' ๋А๋‚Œ์„ ์ฃผ๋„๋ก transform ์†์„ฑ์„ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์‘์ถ•๋˜๋Š” ์ฑ…์ด ์ตœ์ข…์ ์œผ๋กœ ๊ตฌ์Šฌ ๋ชจ์–‘๊ณผ ์ž˜ ์—ฐ๊ฒฐ๋˜๋„๋ก borderRadius ์• ๋‹ˆ๋ฉ”์ด์…˜์„ ๋‹ค์‹œ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์ฑ…์ด ์‚ฌ๋ผ์ง€๋Š” ๋А๋‚Œ ์—†์ด ๊ตฌ์Šฌ๋กœ ์ „ํ™˜๋˜๋„๋ก, ์ฑ…์ด ์‚ฌ๋ผ์ง€๋Š” ๋™์•ˆ ๊ตฌ์Šฌ์ด ๋™์‹œ์— ๋‚˜ํƒ€๋‚˜๋Š” ํฌ๋กœ์ŠคํŽ˜์ด๋“œ(cross-fade) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ถ€๋“œ๋Ÿฌ์šด ๋ณ€์‹ ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • main.html ํ†ตํ•ฉ: ๊ฐœ๋ฐœ๋œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋กœ์ง์„ src/templates/static/js/main_logic.js ํŒŒ์ผ๋กœ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์ด์ œ '์ผ๊ธฐ์žฅ์— ์ €์žฅํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ํด๋ฆญํ•  ๋•Œ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

2. ๋ฆฌ๋””๋ ‰์…˜ ๋ฒ„๊ทธ ์ˆ˜์ •

  • ๋ฌธ์ œ: ์• ๋‹ˆ๋ฉ”์ด์…˜ ์™„๋ฃŒ ํ›„ main_logic.js์—์„œ /diary ๊ฒฝ๋กœ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ๋•Œ 'Not Found' ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์›์ธ: ๋ฐฑ์—”๋“œ์— /diary ๋ผ์šฐํŠธ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š๊ณ , ์‹ค์ œ ์ผ๊ธฐ ๋ชฉ๋ก ํŽ˜์ด์ง€๋Š” /my_diary ๋ผ์šฐํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • ํ•ด๊ฒฐ: main_logic.js ํŒŒ์ผ ๋‚ด window.location.href์˜ ๊ฒฝ๋กœ๋ฅผ /diary์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ๋กœ์ธ /my_diary๋กœ ์ˆ˜์ •ํ•˜์—ฌ ๋ฆฌ๋””๋ ‰์…˜ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“… 2025๋…„ 11์›” 23์ผ

์ฃผ์ œ: ๋ฉ”์ธ ํ™”๋ฉด UI/UX ๋Œ€๊ทœ๋ชจ ๊ฐœํŽธ & ์ธํ„ฐ๋ž™์…˜ ๊ฐ•ํ™”

์‚ฌ์šฉ์ž๊ฐ€ ์ผ๊ธฐ๋ฅผ ์“ฐ๋Š” ํ–‰์œ„์— ๋” ๊นŠ์ด ๋ชฐ์ž…ํ•  ์ˆ˜ ์žˆ๋„๋ก, ๋ฉ”์ธ ํ™”๋ฉด์˜ ๋””์ž์ธ ์–ธ์–ด๋ฅผ '๋””์ง€ํ„ธ'์—์„œ '์•„๋‚ ๋กœ๊ทธ ๊ฐ์„ฑ'์œผ๋กœ ์ „๋ฉด ๊ต์ฒดํ•˜๊ณ , ์ €์žฅ ๊ณผ์ •์— ์Šคํ† ๋ฆฌํ…”๋ง์„ ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.

1. ํŽผ์ณ์ง„ ๋‹ค์ด์–ด๋ฆฌ (Book Spread Layout)

  • ๋ฌธ์ œ: ๊ธฐ์กด์˜ ๋ถ„๋ฆฌ๋œ ์ž…๋ ฅ์ฐฝ(Left)๊ณผ ๊ฒฐ๊ณผ์ฐฝ(Right)์€ ์‹œ์„ ์ด ๋ถ„์‚ฐ๋˜๊ณ , '์ผ๊ธฐ์žฅ'์ด๋ผ๋Š” ์•ฑ์˜ ์ •์ฒด์„ฑ์„ ์‹œ๊ฐ์ ์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ๋ถ€์กฑํ•จ.
  • ํ•ด๊ฒฐ: ํ™”๋ฉด ์ „์ฒด๋ฅผ ์•„์šฐ๋ฅด๋Š” 'ํŽผ์ณ์ง„ ๋‹ค์ด์–ด๋ฆฌ' ํ˜•ํƒœ์˜ ๋ ˆ์ด์•„์›ƒ ๋„์ž….
  • ๊ตฌํ˜„ ๋””ํ…Œ์ผ:
    • Wide Layout: max-width: 1600px, min-width: 1200px๋ฅผ ์ ์šฉํ•˜์—ฌ ์‹ค์ œ ์ฑ…์ƒ ์œ„์— ๋…ธํŠธ๋ฅผ ํŽผ์นœ ๋“ฏํ•œ ์‹œ์›ํ•œ ๊ฐœ๋ฐฉ๊ฐ ํ™•๋ณด.
    • Clean UI: ์ถ”์ฒœ ์ฝ˜ํ…์ธ ๊ฐ€ ๊ธธ์–ด์งˆ ๊ฒฝ์šฐ ์Šคํฌ๋กค์€ ๋˜์ง€๋งŒ ์Šคํฌ๋กค๋ฐ”(Bar)๋Š” ์ˆจ๊ฒจ(scrollbar-width: none) ๊น”๋”ํ•จ ์œ ์ง€.
    • Line-clamp: ์ถ”์ฒœ ํ…์ŠคํŠธ๊ฐ€ ๊ธธ์–ด์ง€๋ฉด line-clamp๋กœ ๋ง์ค„์ž„ ์ฒ˜๋ฆฌํ•˜๊ณ , Hover ์‹œ ์ „์ฒด ๋‚ด์šฉ์„ ๋ณด์—ฌ์ฃผ๋Š” ์ธํ„ฐ๋ž™์…˜ ์ถ”๊ฐ€.

2. '๊ธฐ์–ต์˜ ๊ตฌ์Šฌ' ์ €์žฅ ์• ๋‹ˆ๋ฉ”์ด์…˜ (Memory Orb & Bouncing)

  • ๊ธฐํš ์˜๋„: ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†ก(Submit)ํ•˜๋Š” ๊ฒƒ์„ ๋„˜์–ด, **"๋‚˜์˜ ์†Œ์ค‘ํ•œ ํ•˜๋ฃจ๊ฐ€ ๊ธฐ์–ต์˜ ๊ตฌ์Šฌ์ด ๋˜์–ด ๋ณด๊ด€๋œ๋‹ค"**๋Š” ๋ฉ”ํƒ€ํฌ(์˜ํ™” ์ธ์‚ฌ์ด๋“œ ์•„์›ƒ ๋ชจํ‹ฐ๋ธŒ)๋ฅผ ์ „๋‹ฌํ•˜๊ณ ์ž ํ•จ.
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ๋‚˜๋ฆฌ์˜ค:
    1. ์‘์ถ• (Morph): ์ €์žฅ ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ, ๊ฑฐ๋Œ€ํ–ˆ๋˜ ๋‹ค์ด์–ด๋ฆฌ๊ฐ€ ์ˆœ์‹๊ฐ„์— ์ž‘์•„์ง€๋ฉฐ ๋™๊ทธ๋ž€ ๊ตฌ์Šฌ๋กœ ๋ณ€์‹ .
    2. ๊ฐ์ •์˜ ์ƒ‰: AI๊ฐ€ ๋ถ„์„ํ•œ ๊ฐ์ •(๊ธฐ์จ=๋…ธ๋ž‘, ์Šฌํ””=ํŒŒ๋ž‘ ๋“ฑ)์— ๋งž์ถฐ ๊ตฌ์Šฌ์˜ ์ƒ‰์ƒ์ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ณ€ํ™”.
    3. ์—ญ๋™์  ์ด๋™ (Bouncing): ๊ตฌ์Šฌ์ด ๋ฐ”๋‹ฅ์— ํ†ตํ†ต ํŠ€๊ธฐ๋ฉฐ(Squash & Stretch) ์—๋„ˆ์ง€๋ฅผ ๋ชจ์œผ๋‹ค, ๋งˆ์ง€๋ง‰์— ๋ฉ”๋‰ด(๋ณด๊ด€ํ•จ) ์ชฝ์œผ๋กœ ์Šˆ์›… ๋‚ ์•„๊ฐ.
  • ๊ธฐ์ˆ ์  ๊ตฌํ˜„:
    • Clone Node: ์›๋ณธ DOM์„ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋ ˆ์ด์•„์›ƒ์ด ๊นจ์ง€๋ฏ€๋กœ, cloneNode๋กœ ๋‹ค์ด์–ด๋ฆฌ์˜ ๋ณต์ œ๋ณธ์„ ์ƒ์„ฑํ•˜์—ฌ fixed ํฌ์ง€์…˜์œผ๋กœ ๋„์šด ๋’ค ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ.
    • Keyframes: 0%~`100% ๊ตฌ๊ฐ„์„ ์„ธ๋ฐ€ํ•˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์œ„์น˜ ์ด๋™(translate)๊ณผ ํ˜•ํƒœ ๋ณ€ํ˜•(scale, border-radius`)์„ ๋™์‹œ์— ์ œ์–ด.

๐Ÿ”œ Next Step

  • ์ƒ๋‹จ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”(Navbar)์— 'Sliding Magic Line' ์ธํ„ฐ๋ž™์…˜ ์ ์šฉ ์˜ˆ์ •.
  • ๋งˆ์ดํŽ˜์ด์ง€ '๊ธฐ์–ต์˜ ์œ ๋ฆฌ๋ณ‘' ์‹œ๊ฐํ™” ๊ตฌํ˜„.

๐Ÿ“… 2025๋…„ 11์›” 21์ผ (UI/UX Refinement)

Feature: ์ƒˆ๋กœ์šด ํ•˜๋‹จ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”

  • ๊ธฐ์กด ์ƒ๋‹จ ํ—ค๋”๋ฅผ ๋Œ€์ฒดํ•˜๋Š” ์ƒˆ๋กœ์šด SVG ๊ธฐ๋ฐ˜ ํ•˜๋‹จ ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋ฅผ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฃผ์š” ๊ธฐ๋Šฅ์ธ 'ํ™ˆ', '๋‚˜์˜ ์ผ๊ธฐ', '๋งˆ์ดํŽ˜์ด์ง€' ๋ฐ '๋กœ๊ทธ์•„์›ƒ' ๋ฒ„ํŠผ์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ”๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋กœ๊ทธ์ธํ–ˆ์„ ๋•Œ๋งŒ ํ‘œ์‹œ๋˜๋„๋ก ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

Refactor: ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ฐ” ์ธํ„ฐ๋ž™์…˜ ๊ฐœ์„ 

  • UI ์Šคํƒ€์ผ: ํฐ์ƒ‰ ๋ฐฐ๊ฒฝ, ์–ด๋‘์šด ์ƒ‰์ƒ์˜ ์•„์ด์ฝ˜ ๋ฐ ํ™œ์„ฑ ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” '๋น› ํšจ๊ณผ(tubelight)'๋ฅผ ์ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. 4๊ฐœ์˜ ์•„์ด์ฝ˜์— ๋งž๊ฒŒ ๋„ˆ๋น„๋ฅผ ์กฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์œ„์น˜ ๋ฌธ์ œ ํ•ด๊ฒฐ (CSS ๊ธฐ๋ฐ˜ ๋กœ์ง): ํŽ˜์ด์ง€ ๋กœ๋“œ ์‹œ '๋น› ํšจ๊ณผ'์˜ ์œ„์น˜๊ฐ€ ์–ด๊ธ‹๋‚˜๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด, ๋ถˆ์•ˆ์ •ํ•œ JavaScript ํƒ€์ด๋ฐ ๋Œ€์‹  CSS๋งŒ์œผ๋กœ ์œ„์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋กœ์ง์„ ์ „๋ฉด ์ˆ˜์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
    • ์„œ๋ฒ„์—์„œ ํ˜„์žฌ ํŽ˜์ด์ง€ ์ฃผ์†Œ(request.endpoint)์— ๋”ฐ๋ผ <nav> ํƒœ๊ทธ์— active-main-home ๊ณผ ๊ฐ™์€ ๋™์  ํด๋ž˜์Šค๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค.
    • CSS๋Š” ์ด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ '๋น› ํšจ๊ณผ'์˜ ์ดˆ๊ธฐ left ์œ„์น˜๋ฅผ ์ง์ ‘ ์ง€์ •ํ•˜๋ฏ€๋กœ, ๋” ์ด์ƒ ๋ Œ๋”๋ง ์‹œ์ ์˜ ๊ฒฝ์Ÿ ์ƒํƒœ(Race Condition) ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ”ผ๋“œ๋ฐฑ (JS): navigation.js ์Šคํฌ๋ฆฝํŠธ๋Š” ์ด์ œ ์ดˆ๊ธฐ ์œ„์น˜ ๊ณ„์‚ฐ์„ ์ „ํ˜€ ํ•˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์•„์ด์ฝ˜์„ ํด๋ฆญํ–ˆ์„ ๋•Œ ์‹œ๊ฐ์  ํ”ผ๋“œ๋ฐฑ์„ ์ฃผ๊ธฐ ์œ„ํ•ด ๋น›์„ ์›€์ง์ด๋Š” ๋‹จ์ˆœํ•œ ์—ญํ• ๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋Œ€ํญ ์ถ•์†Œํ–ˆ์Šต๋‹ˆ๋‹ค.

Feature: ํŽ˜์ด์ง€ ์ „ํ™˜ ํšจ๊ณผ (์ผ์‹œ์  ๋กค๋ฐฑ)

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

๐Ÿ“… 2025๋…„ 11์›” 19์ผ

์ฃผ์ œ: AI ๋ชจ๋ธ ๊ฐœ์„  ์‹คํ—˜ & ์ดˆ๊ธฐ UI/UX ๊ตฌ์ถ•

1. AI ๋ชจ๋ธ ๊ฐœ์„  ์—ฌ์ •

์ดˆ๊ธฐ ๋ชจ๋ธ์˜ ํ•œ๊ณ„์™€ ์ƒˆ๋กœ์šด ์•„์ด๋””์–ด

  • ๊ธฐ์กด ๋ชจ๋ธ ์ •ํ™•๋„: 79.06%๋กœ, ๋‹ค์†Œ ์•„์‰ฌ์šด ์„ฑ๋Šฅ.
  • ์ƒˆ๋กœ์šด ๊ฐ€์„ค: NSMC๋Š” '๊ธ์ •/๋ถ€์ •' ๋ถ„์„์— ํŠนํ™”๋˜์–ด ์žˆ์–ด, ์šฐ๋ฆฌ ํ”„๋กœ์ ํŠธ์˜ ๋‹ค์ค‘ ๊ฐ์ • ๋ถ„๋ฅ˜(๋Œ€๋ถ„๋ฅ˜)์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค๊ณ  ํŒ๋‹จ. NSMC๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ˆ˜๋™ ๊ฐ€์ค‘์น˜๋กœ๋งŒ ํ›ˆ๋ จํ–ˆ์„ ๋•Œ, ์˜คํžˆ๋ ค ์ˆœ์ • ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ์ด ๊ฐ€์žฅ ์ข‹์•˜์Œ.
  • ๋ฐฉํ–ฅ ์ „ํ™˜: ์‚ฌ์šฉ์ž์—๊ฒŒ AI๊ฐ€ ์˜ˆ์ธกํ•œ ๊ฐ์ • ํ™•๋ฅ ์„ ๋ณด์—ฌ์ฃผ๊ณ , ๊ฐ€์žฅ ๋†’์€ ํ™•๋ฅ ์˜ ๊ฐ์ •์„ ๊ธฐ๋ณธ์œผ๋กœ ์ถ”์ฒœํ•˜๋˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์„ ํƒ๊ถŒ์„ ์ œ๊ณตํ•˜๋Š” UX์  ํ•ด๊ฒฐ์ฑ… ๋„์ž….

2. UI/UX ๊ฐœ์„  ์‚ฌํ•ญ

๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž… UX ๊ฐœ์„ : Flip Animation

  • ํ•ด๊ฒฐ: ๋กœ๊ทธ์ธ๊ณผ ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด์„ ํ•˜๋‚˜์˜ '์ฑ…(Book)' ์ฝ˜์…‰ํŠธ๋กœ ํ†ตํ•ฉ.
  • ๊ตฌํ˜„: CSS transform: rotateY(180deg)๋ฅผ ํ™œ์šฉํ•œ 3D ์ฑ… ๋„˜๊น€ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ ๋‹จ์ผ ํŽ˜์ด์ง€ ํ„ด(Single Page Turn) ํšจ๊ณผ ์ ์šฉ.

๊ฐ์ • ๋ถ„์„ ์ •ํ™•๋„ ๋ณด์™„: Emotion Selection UI

  • ํ•ด๊ฒฐ: AI์˜ **ํ™•์‹ ๋„(Confidence Score)**์— ๋”ฐ๋ผ UI๋ฅผ ์œ ์—ฐํ•˜๊ฒŒ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ.
    • ํ™•์‹  (80% ์ด์ƒ): AI๊ฐ€ ์˜ˆ์ธกํ•œ ๊ฐ์ •์„ ์ •๋‹ต์œผ๋กœ ์ž๋™ ์ฑ„ํƒ.
    • ๋ถˆํ™•์‹ค (80% ๋ฏธ๋งŒ): ์ƒ์œ„ 3๊ฐœ ๊ฐ์ •๊ณผ ํ™•๋ฅ ์„ '๊ฐ์ • ์นฉ(Chips)' ํ˜•ํƒœ๋กœ ์ œ์•ˆํ•˜์—ฌ ์„ ํƒ๊ถŒ ๋ถ€์—ฌ.

์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๋ณดํ˜ธ: ๋ถ„์„๊ณผ ์ €์žฅ ๋‹จ๊ณ„ ๋ถ„๋ฆฌ

  • ๊ตฌํ˜„: [๋ถ„์„] โ†’ [ํ™•์ธ/์ˆ˜์ •] โ†’ [์ €์žฅ] ํ”Œ๋กœ์šฐ ๊ตฌ์ถ•. ์ตœ์ข…์ ์œผ๋กœ '์ €์žฅํ•˜๊ธฐ' ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ๋งŒ DB์— ์ €์žฅ๋˜๋„๋ก ๋ณ€๊ฒฝํ•˜๊ณ  ๋กœ๋”ฉ UI ์ถ”๊ฐ€.

3. KOTE ์‚ฌ์ „ ํ•™์Šต ๋ชจ๋ธ ์‹คํ—˜ ๊ฒฐ๊ณผ

Colab ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰๋˜์—ˆ์œผ๋ฉฐ, ๊ฒฐ๊ณผ๊ฐ€ ๋งŒ์กฑ์Šค๋Ÿฝ์ง€๋Š” ์•Š์•˜์Œ.

  • ์‹คํ—˜ 1 (๊ธฐ๋ณธ): F1 Score 0.6154
  • ์‹คํ—˜ 2 (๊ฐ€์ค‘์น˜ ์ ์šฉ): Accuracy 54.2%
  • ์‹คํ—˜ 3 (๊ฐ€์ค‘์น˜ ์ œ๊ฑฐ): Accuracy 58.45%
  • ๊ฒฐ๋ก : KOTE ๋ฐ์ดํ„ฐ์…‹์„ ํ™œ์šฉํ•œ ์‚ฌ์ „ ํ•™์Šต ๋ชจ๋ธ์€ ์•„์ง ๊ธฐ๋Œ€๋งŒํผ์˜ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ์ง€ ๋ชปํ•จ. ์ถ”ํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ ์žฌ์„ค์ • ํ•„์š”.