animal_test / README.md
Jay1121's picture
Update README.md
1d786d4 verified

A newer version of the Gradio SDK is available: 6.13.0

Upgrade
metadata
title: Animal Test
emoji: ๐Ÿ’ป
colorFrom: green
colorTo: red
sdk: gradio
sdk_version: 5.49.1
app_file: app.py
pinned: false
license: mit

Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference

๐Ÿพ ๋‚˜๋งŒ์˜ ํ…Œ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ โ€“ ๋™๋ฌผ ์œ ํ˜• ํ…Œ์ŠคํŠธ ํ”„๋กœ์ ํŠธ

๋ฉ”ํƒ€์ธ์ง€ + ์ƒํ™ฉ ํŒ๋‹จ๋ ฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, ์‹ค์ œ ์‚ฌํšŒ์ƒํ™œ ์† ํŒจํ„ด์„ 11๊ฐ€์ง€ "์‚ฌํšŒ์  ๋™๋ฌผ" ํƒ€์ž…์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์žฌ๋ฏธ์šฉ ์›น ํ…Œ์ŠคํŠธ์ž…๋‹ˆ๋‹ค.

"๋‚˜๋Š” ๋ˆˆ์น˜๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ์™œ ์‚ฌ๋žŒ ๊ด€๊ณ„๋Š” ํ•ญ์ƒ ๊ผฌ์ผ๊นŒ?" ๊ฐ™์€ ๊ณ ๋ฏผ์„ ๋ฐ์ดํ„ฐยท์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ’€์–ด๋ณธ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๐Ÿ”— Demo & Links

(Privacy) ์„ฑ๋ณ„ / ์—ฐ๋ น๋Œ€ / ๋ฌธํ•ญ ์‘๋‹ต ์™ธ์˜ ๊ฐœ์ธ์ •๋ณด๋Š” ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“š Table of Contents

  1. ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
  2. ์ด๋ก ์  ๋ฐฐ๊ฒฝ: ๋ฉ”ํƒ€์ธ์ง€ vs ์ƒํ™ฉ ํŒ๋‹จ๋ ฅ
  3. ์ธก์ • ์„ค๊ณ„ & ์ ์ˆ˜ ๊ตฌ์กฐ
  4. ํƒ€์ž… ๋ถ„๋ฅ˜ ๋กœ์ง
  5. Tech Stack & ์•„ํ‚คํ…์ฒ˜
  6. UI ๊ตฌ์กฐ
  7. CSS ์ปค์Šคํ„ฐ๋งˆ์ด์ง• & ๋™์  HTML
  8. ๋ฐฐํฌ: Hugging Face + ๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ
  9. ์‚ฌ์šฉ ํŒ
  10. ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ (Roadmap)
  11. ์ฐธ๊ณ  ๋ฌธํ—Œ

๐ŸŽฏ ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

๋ฌธ์ œ์˜์‹

  • ํ•™๊ต์—์„œ๋Š” ์ •๋‹ต/์ฑ„์  ๊ธฐ์ค€์ด ๋ถ„๋ช…ํ•ด์„œ, ๋‚ด ์‹ค๋ ฅ์ด ์–ด๋А ์ •๋„์ธ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฝ๋‹ค.
  • ํšŒ์‚ฌยท์‚ฌํšŒ์ƒํ™œ์—์„œ๋Š”:
    • ํ‰๊ฐ€ ๊ธฐ์ค€์ด ์ƒ๋Œ€์  + ์ฃผ๊ด€์ 
    • ๊ฐ™์€ ํ–‰๋™๋„ ๋งฅ๋ฝ์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๋‹ค๋ฅด๊ฒŒ ํ•ด์„
    • ์ •๋‹ต์„ ์•Œ๋ ค์ฃผ๋Š” ์‚ฌ๋žŒ๋„ ์—†์Œ

์ด๋•Œ ์ž์ฃผ ๋ณด์ด๋Š” ํŒจํ„ด:

  • "๋‚˜๋Š” ๋ถ„๋ช… ๋ˆˆ์น˜๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ, ์™œ ์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์€ ๋‚˜์—๊ฒŒ ์ž์ฃผ ํ™”๋ฅผ ๋‚ผ๊นŒ?"
  • "์ƒํ™ฉ์„ ์ž˜ ์ฝ๋Š” ๊ฑด์ง€, ๊ณผํ•˜๊ฒŒ ํ•ด์„ํ•˜๋Š” ๊ฑด์ง€ ๋ชจ๋ฅด๊ฒ ์–ดโ€ฆ"
  • "์™œ ๋‚˜๋งŒ ์ด๋ ‡๊ฒŒ ํž˜๋“ค์ง€? ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋‹ค ์ด์ƒํ•œ ๊ฑฐ์•ผ."

์—ฌ๊ธฐ์„œ ํ•ต์‹ฌ ๋ฌธ์ œ๋Š” '๋Šฅ๋ ฅ' ๋ถ€์กฑ์ด ์•„๋‹ˆ๋ผ, (1) ๋ฉ”ํƒ€์ธ์ง€์™€ (2) ์ƒํ™ฉ ํŒ๋‹จ๋ ฅ์˜ ์กฐํ•ฉ์ด ์•„๋‹๊นŒ? ๋ผ๋Š” ์งˆ๋ฌธ์—์„œ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ถœ๋ฐœํ–ˆ๋‹ค.


๐Ÿ’ก ์ด๋ก ์  ๋ฐฐ๊ฒฝ: ๋ฉ”ํƒ€์ธ์ง€ vs ์ƒํ™ฉ ํŒ๋‹จ๋ ฅ

๊ฐœ๋… ์ •๋ฆฌ

๊ตฌ๋ถ„ ๐Ÿง  ๋ฉ”ํƒ€์ธ์ง€ (Metacognition) ๐Ÿ‘ฅ ์ƒํ™ฉ ํŒ๋‹จ๋ ฅ (Social Intelligence)
๐Ÿ“š ํ•™์ˆ ์  ์ •์˜ "์ž์‹ ์˜ ์ธ์ง€ ๊ณผ์ •์— ๋Œ€ํ•œ ์ธ์ง€" (Flavell, 1979) "ํƒ€์ธ์„ ์ดํ•ดํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ ๋Œ€์ธ ๊ด€๊ณ„์—์„œ ํ˜„๋ช…ํ•˜๊ฒŒ ํ–‰๋™ํ•˜๋Š” ๋Šฅ๋ ฅ" (Thorndike, 1920)
๐Ÿ’ก ์‰ฌ์šด ์ •์˜ - ์ž์‹ ์˜ ์‚ฌ๊ณ  ๊ณผ์ •์„ ๋ชจ๋‹ˆํ„ฐ๋ง/์กฐ์ ˆํ•˜๋Š” ๋Šฅ๋ ฅ
- ์ž์‹ ์ด ํƒ€์ธ์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ์•„๋Š” ๊ฒƒ
- ์ž์‹ ์˜ ๊ฐ•ยท์•ฝ์ ์„ ์•„๋Š” ๊ฒƒ
- ์ž์‹ ์ด ๋ฌด์—‡์„ ๋ชจ๋ฅด๋Š”์ง€ ์•„๋Š” ๊ฒƒ
- ํƒ€์ธ์˜ ๋‚ด๋ฉด ์ƒํƒœ๋ฅผ ๊ฐ์ง€ํ•˜๊ณ , ๋ณต์žกํ•œ ์‚ฌํšŒ์  ์ƒํ™ฉ์„ ์ฝ๋Š” ๋Šฅ๋ ฅ
- ์ง€๊ธˆ ์ด ์ƒํ™ฉ์ด ์–ด๋–ค ์ƒํ™ฉ์ธ์ง€ ์ฝ๋Š” ๊ฒƒ
- ์ƒ๋Œ€์˜ ์ง„์งœ ์˜๋„์™€ ํƒ€์ด๋ฐ, ๋งฅ๋ฝ ์ดํ•ด
๐ŸŽฏ ์ดˆ์  ์ž๊ธฐ ์ž์‹  ์™ธ๋ถ€ ์ƒํ™ฉ๊ณผ ํƒ€์ธ
โ“ ํ•ต์‹ฌ ์งˆ๋ฌธ "๋‚˜๋Š” ์–ด๋–ค ์‚ฌ๋žŒ์ธ๊ฐ€?"
"๋‚˜๋Š” ๋ฌด์—‡์„ ์•Œ๊ณ /๋ชจ๋ฅด๋Š”๊ฐ€?"
"์ง€๊ธˆ ๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”๊ฐ€?"
"์ƒ๋Œ€๋ฐฉ์˜ ์˜๋„๋Š” ๋ฌด์—‡์ธ๊ฐ€?"
โš™๏ธ ๊ธฐ๋Šฅ ์ž๊ธฐ ์ธ์‹ & ์ž๊ธฐ ์กฐ์ ˆ ์‚ฌํšŒ์  ๋งฅ๋ฝ ์ดํ•ด
โš ๏ธ ๋ถ€์กฑํ•  ๋•Œ - "๋‚˜๋Š” ์ž˜ํ•˜๋Š”๋ฐ ์™œ ์ธ์ • ์•ˆ ํ•ด์ฃผ์ง€?"
- ๊ฐ™์€ ์‹ค์ˆ˜ ๋ฐ˜๋ณต
- ํ”ผ๋“œ๋ฐฑ์„ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์ธ์‹ ๋ชปํ•จ
- ์ƒํ™ฉ ์˜ค๋…
- ํƒ€์ด๋ฐ ์‹ค์ˆ˜
- ๋งฅ๋ฝ ๋†“์นจ
- "์™œ ๊ฐ‘์ž๊ธฐ ํ™”๋ฅผ ๋‚ด์ง€?"
๐Ÿข ์‚ฌํšŒ์ƒํ™œ์—์„œ ํ•™๊ต: ๊ฐ๊ด€์  ํ‰๊ฐ€ (๋œ ์ค‘์š”)
โ†’ ์ด๋ฏธ ์ ์ˆ˜/์„ฑ์ ์ด ํ”ผ๋“œ๋ฐฑ ์—ญํ• 
ํšŒ์‚ฌ: ๋ณต์žกํ•œ ๋งฅ๋ฝ (๋งค์šฐ ์ค‘์š”)
โ†’ ์• ๋งคํ•œ ์‹ ํ˜ธ๋ฅผ ์Šค์Šค๋กœ ํ•ด์„ํ•ด์•ผ ํ•จ

Dunningโ€“Kruger ๊ด€์ 

๋Šฅ๋ ฅ์ด ๋‚ฎ์„์ˆ˜๋ก ์ž์‹ ์˜ ๋Šฅ๋ ฅ์„ ๊ณผ๋Œ€ํ‰๊ฐ€ํ•˜๋Š” ๊ฒฝํ–ฅ (Dunning & Kruger, 1999).

์ฆ‰, "์‹ค์ˆ˜๋Š” ๋ณธ์ธ์ด ์ œ์ผ ๋ชจ๋ฅด๊ณ , ์ฃผ๋ณ€์€ ๋‹ค ์•Œ๊ณ  ์žˆ๋‹ค" ๋ผ๋Š” ๋น„๋Œ€์นญ์ด ์กด์žฌ.

์ด ํ…Œ์ŠคํŠธ๋Š” ์ด ๋‘ ์ถ•์„ ๋™์‹œ์— ๋‹ค๋ฃจ์–ด:

  • **"๋‚˜๋Š” ๋ˆˆ์น˜๊ฐ€ ๋น ๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค"**์™€
  • "์‹ค์ œ ์ƒํ™ฉ์—์„œ ๋ˆˆ์น˜๋ฅผ ์ œ๋Œ€๋กœ ๋ณด๊ณ  ์žˆ๋Š”๊ฐ€"

์˜ ๊ฐ„๊ทน์„ ๊ฐ€๋ณ๊ฒŒ ํ™•์ธํ•ด๋ณด๋Š” ์žฌ๋ฏธ์šฉ ๋„๊ตฌ๋‹ค.


๐Ÿ“Š ์ธก์ • ์„ค๊ณ„ & ์ ์ˆ˜ ๊ตฌ์กฐ

1. ๋ฌธํ•ญ ๊ตฌ์„ฑ

์ด 16๋ฌธํ•ญ:

์ž๊ธฐ๋ณด๊ณ  ํŒŒํŠธ (๋ฉ”ํƒ€์ธ์ง€)

  • "๋‚˜๋Š” ์ƒํ™ฉ ํŒ๋‹จ์ด ๋น ๋ฅธ ํŽธ์ด๋‹ค"
  • "๋‚˜๋Š” ์‚ฌ๋žŒ๋“ค์˜ ๊ฐ์ • ๋ณ€ํ™”๋ฅผ ์ž˜ ์บ์น˜ํ•œ๋‹ค" ๋“ฑ

ํƒ€์ธ ํ‰๊ฐ€ ์ถ”์ • ํŒŒํŠธ

  • "์ฃผ๋ณ€ ์‚ฌ๋žŒ๋“ค์€ ๋‚˜๋ฅผ ๋ˆˆ์น˜ ๋น ๋ฅด๋‹ค๊ณ  ๋А๋ผ๋Š” ํŽธ์ด๋‹ค"
  • "์‚ฌ๋žŒ๋“ค์€ ๋‚ด๊ฐ€ ๋Œ€ํ™” ํ๋ฆ„์„ ์ž˜ ์ดํ•ดํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค" ๋“ฑ

์ƒํ™ฉ ๋ฐ˜์‘ ํŒŒํŠธ (์ผ๋ฐ˜ + ๋ฏธ๋ฌ˜ํ•œ ์ƒํ™ฉ)

์‹ค์ œ ์‚ฌํšŒ์  ์ƒํ™ฉ์„ ์ œ์‹œํ•˜๊ณ , ๊ทธ๋•Œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋ณธ์ธ์˜ ๋ฐ˜์‘์„ ์„ ํƒ:

  • ์ •๋ฐ˜์‘
  • ์ž๊ธฐ๊ณผ์‹œํ˜•
  • ๊ณผ์ž‰ํ•ด์„ํ˜•
  • ํšŒํ”ผํ˜•

์ „๋žต์  ์‚ฌ๊ณ (Booster)

์žฅ๊ธฐ์  ๊ณ„์‚ฐ/์ „๋žต ์„ฑํ–ฅ์„ ์ฒดํฌํ•˜๋Š” ๋ฌธํ•ญ๋“ค

2. ์ ์ˆ˜ ๊ตฌ์กฐ

๋ฉ”ํƒ€์ธ์ง€ ์ ์ˆ˜

๋†’์„์ˆ˜๋ก ์ž๊ธฐ ์ธ์‹/์ž๊ธฐ ์ฑ„์  ๋Šฅ๋ ฅ์ด ๋†’์€ ํŽธ

์ƒํ™ฉ ํŒ๋‹จ ์ ์ˆ˜

๊ฐ ์ƒํ™ฉ์—์„œ์˜ ๋ฐ˜์‘์„ 4๊ฐ€์ง€ ํŒจํ„ด์œผ๋กœ ๋ถ„๋ฅ˜:

  • ์ •๋ฐ˜์‘
  • ์ž๊ธฐ๊ณผ์‹œ
  • ๊ณผ์ž‰ํ•ด์„
  • ํšŒํ”ผ

์ƒํ™ฉ์˜ ๋‚œ์ด๋„(๋ช…ํ™•ํ•œ/๋ฏธ๋ฌ˜ํ•œ)์— ๋”ฐ๋ผ ๊ฐ€์ค‘์น˜ ๋ถ€์—ฌ

์ „๋žต ์ ์ˆ˜

  • ์ „๋žต์  ์‚ฌ๊ณ  ๊ด€๋ จ 4๋ฌธํ•ญ ํ‰๊ท 
  • ๋†’์„์ˆ˜๋ก ์žฅ๊ธฐ์  ๊ณ„์‚ฐ/์ „๋žต ์„ฑํ–ฅ ๊ฐ•ํ•จ

๐Ÿพ ํƒ€์ž… ๋ถ„๋ฅ˜ ๋กœ์ง

ํ•ต์‹ฌ ์ปจ์…‰:

  • ๋ฉ”ํƒ€์ธ์ง€ (High/Low) ร— ์ƒํ™ฉ ํŒ๋‹จ๋ ฅ (High/Low)
  • ๋ฐ˜์‘ ํŒจํ„ด (์ •๋ฐ˜์‘ / ์ž๊ธฐ๊ณผ์‹œ / ๊ณผ์ž‰ํ•ด์„ / ํšŒํ”ผ)
  • ์ „๋žต ์„ฑํ–ฅ (High/Low)

โ†’ 11๊ฐ€์ง€ ๋™๋ฌผ ํƒ€์ž…์œผ๋กœ ๋งคํ•‘

๊ฐœ๋…์  pseudo-code


def compute_scores(answer_dict):
# โ‘  ๋ฉ”ํƒ€์ธ์ง€
self_eval = score_self_eval(answer_dict)    # Q1Q2
other_eval = score_other_eval(answer_dict)  # Q3Q4
meta_score = (self_eval + other_eval) / 2

# โ‘ก ์ƒํ™ฉ ํŒ๋‹จ๋ ฅ
counts = count_reaction_patterns(answer_dict)  # ์ •๋ฐ˜์‘/์ž๊ธฐ๊ณผ์‹œ/๊ณผ์ž‰ํ•ด์„/ํšŒํ”ผ ๊ฐœ์ˆ˜
situ_score = weighted_situ_score(counts)

# โ‘ข ์ „๋žต์  ์‚ฌ๊ณ 
strategy_score = mean_strategy_items(answer_dict)  # Q13~Q16

# โ‘ฃ ์กฐํ•ฉํ•ด์„œ ํƒ€์ž… ๊ฒฐ์ •
animal_type = map_to_animal(meta_score, situ_score, counts, strategy_score)
return animal_type

์˜ˆ์‹œ ํŒจํ„ด

์˜ˆ์‹œ 1: All High

  • ์ž๊ธฐํ‰๊ฐ€ โ†‘, ํƒ€์ธํ‰๊ฐ€์ถ”์ • โ†‘
  • ์‹ค์ œ ์ƒํ™ฉ ์ •๋ฐ˜์‘ ๅคš
  • ์ „๋žต ์ ์ˆ˜ โ†‘

โ†’ ์‹ค์ œ๋กœ๋„ ๋ˆˆ์น˜/๋ฉ”ํƒ€์ธ์ง€ ๋†’๊ณ , ์ฃผ๋ณ€์—์„œ๋„ ๊ทธ๋ ‡๊ฒŒ ๋ณด๋ฉฐ, ์ž์‹ ๊ฐ๋„ ์žˆ๋Š” ํƒ€์ž…

์˜ˆ์‹œ 2: ์ˆจ์€ ๊ณ ์ˆ˜ํ˜•

  • ์ž๊ธฐํ‰๊ฐ€ ๋‚ฎ์Œ
  • ํƒ€์ธํ‰๊ฐ€์ถ”์ • ์ค‘๊ฐ„
  • ์‹ค์ œ ์ •๋ฐ˜์‘ ๅคš

โ†’ ์‹ค์ œ๋กœ๋Š” ์ž˜ ์ฝ๋Š”๋ฐ, ์ž๊ธฐ ํ™•์‹ ์ด ๋ถ€์กฑํ•œ ํƒ€์ž…

์˜ˆ์‹œ 3: ์ž๊ธฐ๊ณผ์‹œํ˜•

  • ์ž๊ธฐํ‰๊ฐ€ โ†‘, ํƒ€์ธํ‰๊ฐ€์ถ”์ • โ†‘
  • ์‹ค์ œ ์ •๋ฐ˜์‘ ์ ๊ณ , ์ž๊ธฐ๊ณผ์‹œ ๋ฐ˜์‘ โ‰ฅ 50%

โ†’ "์•Œ๊ณ  ์žˆ๋‹ค"๊ณ  ์ƒ๊ฐํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ณผ๋„ํ•˜๊ฒŒ ๊ฐœ์ž…ํ•˜๋Š” ํŒจํ„ด

์˜ˆ์‹œ 4: ๊ณผ์ž‰ํ•ด์„ํ˜•

  • ์ž๊ธฐ/ํƒ€์ธํ‰๊ฐ€ ๋‚ฎ~์ค‘
  • ์ •๋ฐ˜์‘ ์ ์Œ + ๊ณผ์ž‰ํ•ด์„ ๋ฐ˜์‘ ๅคš

โ†’ ๋ถˆ์•ˆ์„ ํ‚ค์šฐ๋Š” ์ชฝ์œผ๋กœ ์ƒํ™ฉ์„ ํ•ด์„ํ•˜๋Š” ํƒ€์ž…

ํšŒ์ƒ‰์ง€๋Œ€๋Š” ์™„์ „ํžˆ ์ž๋ฅด์ง€ ์•Š๊ณ , "๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๋™๋ฌผ" ์ชฝ์œผ๋กœ ๋งคํ•‘ํ•˜๋„๋ก ์„ค๊ณ„ํ–ˆ๋‹ค.


๐Ÿ’ป Tech Stack & ์•„ํ‚คํ…์ฒ˜

Tech Stack

  • Language: Python 3.12
  • Framework: gradio==4.44.0
  • Frontend: Custom CSS + ๋™์  HTML
  • Deployment: Hugging Face Spaces (Pro)
  • Data ์ €์žฅ: ๋กœ์ปฌ CSV
    • (์„ฑ๋ณ„ / ์—ฐ๋ น๋Œ€ / ์‘๋‹ต ๋‚ด์šฉ๋งŒ ์ €์žฅ, ์ถ”๊ฐ€ ๊ฐœ์ธ์ •๋ณด ์—†์Œ)

์ „์ฒด ์•„ํ‚คํ…์ฒ˜


๐Ÿ’ป Tech Stack & ์•„ํ‚คํ…์ฒ˜

Tech Stack

  • Language: Python 3.12
  • Framework: gradio==4.44.0
  • Frontend: Custom CSS + ๋™์  HTML
  • Deployment: Hugging Face Spaces (Pro)
  • Data ์ €์žฅ: ๋กœ์ปฌ CSV
    • (์„ฑ๋ณ„ / ์—ฐ๋ น๋Œ€ / ์‘๋‹ต ๋‚ด์šฉ๋งŒ ์ €์žฅ, ์ถ”๊ฐ€ ๊ฐœ์ธ์ •๋ณด ์—†์Œ)

์ „์ฒด ์•„ํ‚คํ…์ฒ˜

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚     ์‚ฌ์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚
              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚    Gradio ์›น ์ธํ„ฐํŽ˜์ด์Šค        โ”‚
โ”‚    - 16๋ฌธํ•ญ ์งˆ๋ฌธ UI           โ”‚
โ”‚    - ๊ฒฐ๊ณผ ํŽ˜์ด์ง€ ์ „ํ™˜          โ”‚
โ”‚    - ๋ฐ˜์‘ํ˜• ๋ ˆ์ด์•„์›ƒ(CSS)     โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚
              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚   Python ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์—”์ง„         โ”‚
โ”‚    - ์ ์ˆ˜ ๊ณ„์‚ฐ                โ”‚
โ”‚    - ํŒจํ„ด ๋ถ„์„                โ”‚
โ”‚    - ๋™๋ฌผ ํƒ€์ž… ๋งคํ•‘            โ”‚
โ”‚    - ๊ฒฐ๊ณผ HTML ํ…œํ”Œ๋ฆฟ ๋ Œ๋”๋ง   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
              โ”‚
              โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚      CSV ๋ฐ์ดํ„ฐ ์ €์žฅ          โ”‚
โ”‚    - ์‘๋‹ต ๋กœ๊ทธ                โ”‚
โ”‚    - ํƒ€์ž… ๋ถ„ํฌ ๋ถ„์„์šฉ          โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿงฉ UI ๊ตฌ์กฐ

Gradio Blocks ๊ธฐ๋ฐ˜์œผ๋กœ, ์งˆ๋ฌธ ์˜์—ญ๊ณผ ๊ฒฐ๊ณผ ์˜์—ญ์„ ๋ถ„๋ฆฌ:

import gradio as gr

with gr.Blocks(
    theme=gr.themes.Soft(primary_hue="purple"),
    css=custom_css,
) as demo:
    # ํ—ค๋”
    gr.HTML("๋‚˜๋ฅผ ๋‹ฎ์€ ์‚ฌํšŒ์  ๋™๋ฌผ์€?")
    
    # ์งˆ๋ฌธ ์˜์—ญ
    with gr.Column(visible=True) as question_area:
        age = gr.Dropdown(["10๋Œ€", "20๋Œ€", "30๋Œ€", "40๋Œ€ ์ด์ƒ"], label="์—ฐ๋ น๋Œ€")
        gender = gr.Dropdown(["์—ฌ์„ฑ", "๋‚จ์„ฑ", "๊ธฐํƒ€"], label="์„ฑ๋ณ„(์„ ํƒ)")
        
        question_widgets = {}
        for q in QUESTIONS:
            question_widgets[q["id"]] = gr.Radio(
                q["options"],
                label=q["text"],
                elem_classes=["q-block"],
            )
        
        submit_btn = gr.Button("๊ฒฐ๊ณผ ํ™•์ธํ•˜๊ธฐ")
    
    # ๊ฒฐ๊ณผ ์˜์—ญ (์ดˆ๊ธฐ์—๋Š” ์ˆจ๊น€)
    result_html = gr.HTML(visible=False)
    
    # ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ โ†’ ์งˆ๋ฌธ ์˜์—ญ ์ˆจ๊ธฐ๊ณ  ๊ฒฐ๊ณผ๋งŒ ๋ณด์—ฌ์ฃผ๋„๋ก ํ•ธ๋“ค๋Ÿฌ์—์„œ ์ฒ˜๋ฆฌ

๐ŸŽจ CSS ์ปค์Šคํ„ฐ๋งˆ์ด์ง• & ๋™์  HTML

๊ธฐ๋ณธ ์Šคํƒ€์ผ๋ง

/* ์ „์ฒด ์ปจํ…Œ์ด๋„ˆ */
.gradio-container {
    font-family: "Noto Sans KR", sans-serif;
    max-width: 760px !important;
}

/* ๋ฌธํ•ญ ์นด๋“œ ์Šคํƒ€์ผ */
.q-block {
    background: #f3e8ff !important;
    border-radius: 14px !important;
    padding: 18px !important;
}

/* ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™” */
@media (max-width: 540px) {
    .gradio-container {
        max-width: 100% !important;
    }
    img {
        max-width: 80vw !important;
    }
}

๊ฒฐ๊ณผ ํŽ˜์ด์ง€ HTML ์ƒ์„ฑ

def build_result_html(animal_code):
    title = TYPE_DETAIL[animal_code]["title"]
    desc = TYPE_DETAIL[animal_code]["ํŠน์„ฑ"]
    inner = TYPE_DETAIL[animal_code]["ํ˜ผ์žฃ๋ง"]
    others = TYPE_DETAIL[animal_code]["๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๋‚˜"]
    praise = TYPE_DETAIL[animal_code]["AI_์นญ์ฐฌ"]
    img_url = ANIMAL_IMAGES[animal_code]
    
    return f"""
    
        
        {title}
        
        
        
        
        
            ์ด ํƒ€์ž…์˜ ํŠน์ง•
            {desc}
        
        
        
        
            
                ๋‚ด ์†๋งˆ์Œ
                {inner}
            
            
                ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ณด๋Š” ๋‚˜
                {others}
            
        
        
        
        
            AI๊ฐ€ ๋ณด๋Š” ์žฅ์ 
            {praise}
        
    
    """

๐ŸŒ ๋ฐฐํฌ: Hugging Face + ๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ

1๏ธโƒฃ Hugging Face์—์„œ Custom Domain ์„ค์ •

  1. Hugging Face Space ์ ‘์†:

  2. Settings โ†’ Custom domain ๋ฉ”๋‰ด ์ด๋™

  3. myanimaltest.site ์ž…๋ ฅ

  4. Hugging Face๊ฐ€ ์•Œ๋ ค์ฃผ๋Š” CNAME ๋Œ€์ƒ ๊ฐ’ ํ™•์ธ

    • ์˜ˆ: xxx-username-xxx.hf.space
    • ์ด ๊ฐ’์ด ๋„๋ฉ”์ธ์ด ๊ฐ€๋ฆฌํ‚ฌ ์ฃผ์†Œ (ํƒ€๊นƒ)

2๏ธโƒฃ ๊ฐ€๋น„์•„ DNS ์„ค์ •

๊ฐ€๋น„์•„ ๋„๋ฉ”์ธ ๊ด€๋ฆฌ โ†’ DNS ๊ด€๋ฆฌ์—์„œ CNAME ๋ ˆ์ฝ”๋“œ ์ถ”๊ฐ€.

๋ฃจํŠธ ๋„๋ฉ”์ธ (myanimaltest.site)์„ ๋ฐ”๋กœ ์ŠคํŽ˜์ด์Šค๋กœ ์—ฐ๊ฒฐ:

Type  : CNAME
Host  : @   # ๋ฃจํŠธ ๋„๋ฉ”์ธ
Value : {Hugging Face์—์„œ ๋ฐ›์€ hf.space ์ฃผ์†Œ}
TTL   : ๊ธฐ๋ณธ๊ฐ’

์„ ํƒ ์‚ฌํ•ญ: www.myanimaltest.site๋„ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ํ•œ ๊ฐœ ๋” ์ถ”๊ฐ€:

Type  : CNAME
Host  : www
Value : {๊ฐ™์€ hf.space ์ฃผ์†Œ}
TTL   : ๊ธฐ๋ณธ๊ฐ’

3๏ธโƒฃ Hugging Face์—์„œ ์ธ์ฆ ์™„๋ฃŒ

  1. DNS ์ „ํŒŒ ํ›„ (์‹ค์ œ๋กœ๋Š” ๋ช‡ ๋ถ„ ์•ˆ์— ๋ฐ˜์˜๋จ)

  2. Hugging Face Custom domain ํ™”๋ฉด์—์„œ Verify / Connect ํด๋ฆญ

  3. myanimaltest.site โ†’ ์ŠคํŽ˜์ด์Šค ์—ฐ๊ฒฐ ์™„๋ฃŒ

์ด์ œ ์‚ฌ์šฉ์ž๋Š” Hugging Face๋ฅผ ๋ชฐ๋ผ๋„, ๋ธŒ๋ผ์šฐ์ €์— myanimaltest.site๋งŒ ์ž…๋ ฅํ•ด ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.


โฑ๏ธ ์‚ฌ์šฉ ํŒ

  • ์ง๊ด€๋Œ€๋กœ ๋น ๋ฅด๊ฒŒ ๋‹ตํ•˜๊ธฐ (์ •๋‹ต ์ฐพ์œผ๋ ค ํ•˜์ง€ ์•Š๊ธฐ)
  • ์—ฌ๋Ÿฌ ๋ฒˆ ๋ฐ˜๋ณตํ•ด์„œ "์น˜ํŠธ"ํ•˜์ง€ ์•Š๊ธฐ
  • ์‹ค์ œ ๊ฒฝํ—˜์„ ๋– ์˜ฌ๋ฆฌ๋ฉด์„œ ์‘๋‹ตํ•˜๊ธฐ
  • ๊ฒฐ๊ณผ๋Š” ์–ด๋””๊นŒ์ง€๋‚˜ ์žฌ๋ฏธ + ์ž๊ธฐ ์ดํ•ด์šฉ
  • "์ข‹์€ ํƒ€์ž… / ๋‚˜์œ ํƒ€์ž…"์ด ์•„๋‹ˆ๋ผ ๋‚ด ํŒจํ„ด์„ ๊ฐ€๋ณ๊ฒŒ ๋“ค์—ฌ๋‹ค๋ณด๋Š” ๊ฑฐ์šธ ์ •๋„๋กœ ์‚ฌ์šฉํ•˜๊ธฐ

๐Ÿ”ฎ ํ–ฅํ›„ ๊ฐœ์„  ๋ฐฉํ–ฅ (Roadmap)

  • ๋ฌธํ•ญ ์‹ ๋ขฐ๋„ / ํƒ€๋‹น๋„ ์ •๋Ÿ‰ ๊ฒ€์ฆ
  • ๊ฐœ๋…์˜ ์กฐ์ž‘์  ์ •์˜ ์ •๊ตํ™”
  • ์‚ฌํšŒ์  ๋ฐ”๋žŒ์ง์„ฑ(social desirability) ๋ณด์ • ๋กœ์ง ์ถ”๊ฐ€
  • UI/UX ๊ฐœ์„  (๋ฐ˜์‘ํ˜•, ์ ‘๊ทผ์„ฑ, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ)
  • ํ…Œ์ŠคํŠธ ๋งํฌ ํ™•์‚ฐ ๋ฐ ์œ ์ž… ์ฑ„๋„ ์‹คํ—˜
  • ์‹œ๊ณ„์—ด๋กœ ๋™์ผ ์‚ฌ์šฉ์ž ๋ณ€ํ™” ์ถ”์  ๊ธฐ๋Šฅ (ํ† ํฐ/์ฟ ํ‚ค ๊ธฐ๋ฐ˜)
  • ์‘๋‹ต ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ํ†ต๊ณ„ ๋Œ€์‹œ๋ณด๋“œ (ํƒ€์ž… ๋ถ„ํฌ, ์—ฐ๋ น/์„ฑ๋ณ„๋ณ„ ํŠน์ง• ๋“ฑ)
  • ๋‹ค๊ตญ์–ด ๋ฒ„์ „ (์˜์–ด ๋“ฑ) ํ™•์žฅ

๐Ÿ’ญ ๋งˆ์น˜๋ฉฐ

"Know thyself (๋„ˆ ์ž์‹ ์„ ์•Œ๋ผ)" โ€“ ์†Œํฌ๋ผํ…Œ์Šค

2,500๋…„ ์ „ ํ…Œ์Šคํ˜•์˜ ๋ง์€ 2024๋…„์—๋„ ์—ฌ์ „ํžˆ ์–ด๋ ต๋‹ค.
์ด ํ…Œ์ŠคํŠธ๋Š” ๊ทธ ์–ด๋ ค์šด ๊ฑธ ์กฐ๊ธˆ์€ ์›ƒ์œผ๋ฉด์„œ ๋“ค์—ฌ๋‹ค๋ณด์ž๋Š” ์‹œ๋„๋‹ค.


๐Ÿ“– ์ฐธ๊ณ  ๋ฌธํ—Œ

  • Flavell, J. H. (1979). Metacognition and cognitive monitoring: A new area of cognitive-developmental inquiry. American Psychologist, 34(10), 906โ€“911. https://doi.org/10.1037/0003-066X.34.10.906

  • Thorndike, E. L. (1920). Intelligence and its uses. Harper's Magazine, 140(837), 227โ€“235.

  • Goleman, D. (2006). Social intelligence: The new science of human relationships. Bantam Books.

  • Dunning, D., & Kruger, J. (1999). Unskilled and unaware of it: How difficulties in recognizing one's own incompetence lead to inflated self-assessments. Journal of Personality and Social Psychology, 77(6), 1121โ€“1134.