Skip to content
/ server Public

๋„ˆโ€ฆ T์•ผ? ๐Ÿค–๐Ÿ’ฌ: MBTI ๊ธฐ๋ฐ˜ T/F ์œ„๋กœ ๋ฐฉ์‹ ๋ถ„๋ฅ˜ ๊ฒŒ์ž„

Notifications You must be signed in to change notification settings

NLP-TF/server

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

61 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๋„ˆโ€ฆ T์•ผ? ๐Ÿค–๐Ÿ’ฌ

MBTI ๊ธฐ๋ฐ˜ T/F ์œ„๋กœ ๋ฐฉ์‹ ๋ถ„๋ฅ˜ ๊ฒŒ์ž„ โ€“ FastAPI + KoBERT + Hugging Face


๐Ÿ“š API Documentation

๊ธฐ๋ณธ ์ •๋ณด

  • Base URL: http://localhost:8000
  • API ๋ฒ„์ „: v1
  • ์ธ์ฝ”๋”ฉ: UTF-8

์—”๋“œํฌ์ธํŠธ ๋ชฉ๋ก

1. ๊ฒŒ์ž„ ์‹œ์ž‘

์ƒˆ๋กœ์šด ๊ฒŒ์ž„ ์„ธ์…˜์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

  • URL: POST /api/v1/game/start
  • ์š”์ฒญ ๋ณธ๋ฌธ:
    {
      "nickname": "์‚ฌ์šฉ์ž๋‹‰๋„ค์ž„",
      "user_type": "T"  // "T" ๋˜๋Š” "F" ์ค‘ ํ•˜๋‚˜
    }
  • ์„ฑ๊ณต ์‘๋‹ต (200):
    {
      "session_id": "์ƒ์„ฑ๋œ_์„ธ์…˜_ID",
      "message": "Game started successfully"
    }
  • ์—๋Ÿฌ ์‘๋‹ต:
    • 400: ์ž˜๋ชป๋œ ์š”์ฒญ (์˜ˆ: ์ž˜๋ชป๋œ user_type)
    • 500: ์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜

2. ๋ผ์šด๋“œ ์ •๋ณด ์กฐํšŒ

ํŠน์ • ๋ผ์šด๋“œ์˜ ์ƒํ™ฉ๊ณผ ์˜ˆ์‹œ ์‘๋‹ต์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

  • URL: GET /api/v1/game/round/{session_id}/{round_number}
  • ๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ:
    • session_id: ๊ฒŒ์ž„ ์„ธ์…˜ ID
    • round_number: ๋ผ์šด๋“œ ๋ฒˆํ˜ธ (1-5)
  • ์„ฑ๊ณต ์‘๋‹ต (200):
    {
      "round_number": 1,
      "situation": "์—ฐ์ธ_๊ฐˆ๋“ฑ",
      "scenario": "๋‹น์‹ ์˜ ์—ฐ์ธ์ด ๋‹น์‹ ์˜ ๊ณ„ํš์„ ๋ฌด์‹œํ•˜๊ณ  ๋‹ค๋ฅธ ์•ฝ์†์„ ์žก์•˜์„ ๋•Œ ์–ด๋–ป๊ฒŒ ๋ฐ˜์‘ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?",
      "example_response": "๊ดœ์ฐฎ์•„, ๋‹ค์Œ์— ๊ฐ™์ด ํ•˜์ž."
    }
  • ์—๋Ÿฌ ์‘๋‹ต:
    • 400: ์ž˜๋ชป๋œ ์š”์ฒญ
    • 404: ํ•ด๋‹น ๋ผ์šด๋“œ ๋˜๋Š” ์„ธ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†์Œ

3. ์‘๋‹ต ์ œ์ถœ ๋ฐ ์ ์ˆ˜ ํ™•์ธ

์‚ฌ์šฉ์ž์˜ ์‘๋‹ต์„ ์ œ์ถœํ•˜๊ณ  ์ ์ˆ˜๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • URL: POST /api/v1/game/submit
  • ์š”์ฒญ ๋ณธ๋ฌธ:
    {
      "session_id": "์„ธ์…˜_ID",
      "user_response": "์‚ฌ์šฉ์ž ์‘๋‹ต ํ…์ŠคํŠธ",
      "round_number": 1,
      "situation": "์—ฐ์ธ_๊ฐˆ๋“ฑ"
    }
  • ์„ฑ๊ณต ์‘๋‹ต (200):
    {
      "round_number": 1,
      "score": 85,
      "feedback": "์ข‹์€ ๋ฐ˜์‘์ด์—์š”!",
      "is_completed": true
    }
  • ์—๋Ÿฌ ์‘๋‹ต:
    • 400: ์ž˜๋ชป๋œ ์š”์ฒญ
    • 404: ์„ธ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ์ด๋ฏธ ์™„๋ฃŒ๋œ ๋ผ์šด๋“œ

4. ๊ฒŒ์ž„ ๊ฒฐ๊ณผ ์š”์•ฝ

๊ฒŒ์ž„ ๊ฒฐ๊ณผ์™€ ๋ฆฌ๋”๋ณด๋“œ ์ˆœ์œ„๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • URL: GET /api/v1/game/summary/{session_id}
  • ๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ:
    • session_id: ๊ฒŒ์ž„ ์„ธ์…˜ ID
  • ์„ฑ๊ณต ์‘๋‹ต (200):
    {
      "session_id": "์„ธ์…˜_ID",
      "nickname": "์‚ฌ์šฉ์ž๋‹‰๋„ค์ž„",
      "total_score": 420,
      "round_scores": [85, 90, 80, 85, 80],
      "rank": 3,
      "total_players": 150
    }
  • ์—๋Ÿฌ ์‘๋‹ต:
    • 400: ์ž˜๋ชป๋œ ์š”์ฒญ
    • 404: ์„ธ์…˜์„ ์ฐพ์„ ์ˆ˜ ์—†๊ฑฐ๋‚˜ ๊ฒŒ์ž„์ด ์•„์ง ์™„๋ฃŒ๋˜์ง€ ์•Š์Œ

CORS ์„ค์ •

๋‹ค์Œ ๋„๋ฉ”์ธ์—์„œ์˜ ์š”์ฒญ์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค:

์—๋Ÿฌ ์ฒ˜๋ฆฌ

๋ชจ๋“  API๋Š” ํ‘œ์ค€ HTTP ์ƒํƒœ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค:

  • 200: ์„ฑ๊ณต
  • 400: ์ž˜๋ชป๋œ ์š”์ฒญ
  • 404: ๋ฆฌ์†Œ์Šค๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Œ
  • 500: ์„œ๋ฒ„ ๋‚ด๋ถ€ ์˜ค๋ฅ˜

์—๋Ÿฌ ์‘๋‹ต ์˜ˆ์‹œ:

{
  "detail": "์—๋Ÿฌ ๋ฉ”์‹œ์ง€"
}

์ฐธ๊ณ  ์‚ฌํ•ญ

  • ๋ชจ๋“  ์š”์ฒญ์€ JSON ํ˜•์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์ธ์ฆ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, ์ถ”ํ›„ API ํ‚ค ๋˜๋Š” JWT ํ† ํฐ์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ค์ œ ๋ฐฐํฌ ์‹œ์—๋Š” HTTPS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

Error Responses

All error responses follow this format:

{
  "detail": "Error message here"
}

Common Error Status Codes

  • 400 Bad Request: Invalid request data
  • 401 Unauthorized: Missing or invalid authentication
  • 403 Forbidden: Insufficient permissions
  • 404 Not Found: Resource not found
  • 422 Unprocessable Entity: Validation error
  • 500 Internal Server Error: Server error

๐Ÿš€ ๋น ๋ฅธ ์‹œ์ž‘

1. Set Up PostgreSQL

  1. Install PostgreSQL if you haven't already:

    • Mac: brew install postgresql
    • Ubuntu: sudo apt-get install postgresql postgresql-contrib
    • Windows: Download from PostgreSQL Downloads
  2. Create a new database and user:

    # Connect to PostgreSQL
    psql postgres
    
    # Create a new database
    CREATE DATABASE mbti_game;
    
    # Create a new user (replace 'password' with a secure password)
    CREATE USER mbti_user WITH PASSWORD 'password';
    
    # Grant privileges
    GRANT ALL PRIVILEGES ON DATABASE mbti_game TO mbti_user;
    
    # Exit psql
    \q
  3. Set up environment variables:

    cp .env.example .env

    Then edit the .env file with your database credentials.

2. ๊ฐ€์ƒํ™˜๊ฒฝ ์„ค์ • ๋ฐ ์˜์กด์„ฑ ์„ค์น˜

# ๊ฐ€์ƒํ™˜๊ฒฝ ์ƒ์„ฑ (macOS/Linux)
python3 -m venv venv
source venv/bin/activate  # Windows: .\venv\Scripts\activate

# ์˜์กด์„ฑ ์„ค์น˜
pip3 install -r requirements.txt

3. ์„œ๋ฒ„ ์‹คํ–‰

# ๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์‹คํ–‰ (์ž๋™ ๋ฆฌ๋กœ๋“œ ํ™œ์„ฑํ™”)
uvicorn app.main:app --reload --host 0.0.0.0 --port 8000 --log-level debug

3. API ํ…Œ์ŠคํŠธ

๊ฒŒ์ž„ ์‹œ์ž‘

curl -X POST http://127.0.0.1:8000/game/start \
  -H "Content-Type: application/json" \
  -d '{"nickname":"ํ…Œ์ŠคํŠธ์œ ์ €", "user_type":"T"}'

๋ผ์šด๋“œ ์ •๋ณด ์กฐํšŒ (์„ธ์…˜๋ณ„ ๋žœ๋ค ์‹œ๋‚˜๋ฆฌ์˜ค)

  • ๊ฐ ์„ธ์…˜๋งˆ๋‹ค 5๊ฐœ์˜ ์ค‘๋ณต ์—†๋Š” ๋žœ๋ค ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๋ฐ˜๋“œ์‹œ ๊ฒŒ์ž„ ์‹œ์ž‘ ํ›„ ๋ฐ›์€ session_id์™€ ๋ผ์šด๋“œ ๋ฒˆํ˜ธ(1~5)๋ฅผ ํ•จ๊ป˜ ์š”์ฒญํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
# 1๋ผ์šด๋“œ ์ •๋ณด ์กฐํšŒ ์˜ˆ์‹œ (์„ธ์…˜ ์ƒ์„ฑ ํ›„)
curl http://127.0.0.1:8000/api/v1/game/round/{session_id}/1
  • {session_id}๋Š” ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ์‘๋‹ต๋ฐ›์€ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ์‘๋‹ต ์˜ˆ์‹œ:
{
  "round_number": 1,
  "situation": "์นœ๊ตฌ๊ฐ€ ์‹œํ—˜์— ๋–จ์–ด์กŒ์„ ๋•Œ",
  "friend_message": "์‹œํ—˜์— ๋–จ์–ด์กŒ์–ด... ๋„ˆ๋ฌด ์†์ƒํ•ด",
  "example_response": ""
}

์‘๋‹ต ์ œ์ถœ ๋ฐ ์ ์ˆ˜ ํ™•์ธ

  • ๋ฐ˜๋“œ์‹œ ๊ฒŒ์ž„ ์‹œ์ž‘ ์‹œ ๋ฐ›์€ session_id์™€ round_number๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
  • ํ•œ ๋ผ์šด๋“œ์— ํ•œ ๋ฒˆ๋งŒ ์‘๋‹ต์ด ํ—ˆ์šฉ๋ฉ๋‹ˆ๋‹ค.
curl -X POST http://127.0.0.1:8000/api/v1/game/submit \
  -H "Content-Type: application/json" \
  -d '{"session_id":"์„ธ์…˜_ID", "user_response":"๊ดœ์ฐฎ์•„? ๋‹ค์Œ์—๋Š” ๋” ์ž˜ํ•  ์ˆ˜ ์žˆ์„ ๊ฑฐ์•ผ!", "round_number":1}'

๊ฒŒ์ž„ ๊ฒฐ๊ณผ ์š”์•ฝ

# ์„ธ์…˜ ID๋กœ ๊ฒฐ๊ณผ ์กฐํšŒ
curl http://127.0.0.1:8000/api/v1/game/summary/์„ธ์…˜_ID

T/F ๋ถ„๋ฅ˜ ๋ชจ๋ธ ์ง์ ‘ ํ…Œ์ŠคํŠธ

curl -X POST http://127.0.0.1:8000/api/v1/predict \
  -H "Content-Type: application/json" \
  -d '{"text": "๊ฐ€์„œ ์นœ๊ตฌํ•œํ…Œ ์–˜๊ธฐํ•ด๋ด."}'

4. ํ…Œ์ŠคํŠธ

# ์œ ๋‹› ํ…Œ์ŠคํŠธ ์‹คํ–‰
pytest

# ์ฝ”๋“œ ์ปค๋ฒ„๋ฆฌ์ง€ ํ™•์ธ (pytest-cov ์„ค์น˜ ํ•„์š”)
pytest --cov=app tests/

๐ŸŽฎ ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

**'๋„ˆT์•ผ?'**๋Š” MBTI์˜ T(Thinking)ํ˜•๊ณผ F(Feeling)ํ˜•์˜ ์œ„๋กœ ์Šคํƒ€์ผ ์ฐจ์ด๋ฅผ AI๊ฐ€ ํ•™์Šตํ•˜๊ณ , ์‚ฌ์šฉ์ž์˜ ๋ฌธ์žฅ์„ ํ‰๊ฐ€ํ•˜์—ฌ ์ ์ˆ˜ํ™”ํ•˜๋Š” ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.
์‚ฌ์šฉ์ž๋Š” ์ž์‹ ๊ณผ ๋ฐ˜๋Œ€ ์„ฑํ–ฅ์˜ ์œ„๋กœ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์žฅ์„ ์ž‘์„ฑํ•˜๊ณ , AI๋Š” KoBERT ๊ธฐ๋ฐ˜ ๋ถ„๋ฅ˜ ๋ชจ๋ธ๋กœ ํ•ด๋‹น ๋ฌธ์žฅ์˜ 'T/F์Šค๋Ÿฌ์›€'์„ ์ˆ˜์น˜ํ™”ํ•ด ํ”ผ๋“œ๋ฐฑํ•ฉ๋‹ˆ๋‹ค.


๐Ÿง  ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์‚ฌ์šฉ์ž ์ž…๋ ฅ ๋ฌธ์žฅ์„ ๊ธฐ๋ฐ˜์œผ๋กœ T/F ์œ ์‚ฌ๋„ ์˜ˆ์ธก
  • ์ ์ˆ˜ํ™” ๋ฐ ๋ˆ„์  ์ ์ˆ˜ ๊ด€๋ฆฌ
  • ๋ผ์šด๋“œ๋ณ„ ์ƒํ™ฉ ์ œ๊ณต ๋ฐ ๋ถ„์„ ๊ฒฐ๊ณผ ๋ฆฌํ„ด
  • ์œ ์ € ์ˆœ์œ„ ๋ฐ ๋ฐฑ๋ถ„์œ„ ํ†ต๊ณ„ ์ œ๊ณต

๐Ÿ›  ๋ฌธ์ œ ํ•ด๊ฒฐ

๋ชจ๋ธ ๋กœ๋”ฉ ๋ฌธ์ œ

  • ๋ชจ๋ธ์ด ๋กœ๋“œ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ model_cache ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์‚ญ์ œํ•˜๊ณ  ์žฌ์‹œ๋„ํ•˜์„ธ์š”:
    rm -rf model_cache

ํ† ํฐ ๊ด€๋ จ ์˜ค๋ฅ˜

  • token_type_ids ๊ด€๋ จ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•˜์„ธ์š”.

๋กœ๊ทธ ํ™•์ธ

  • ์„œ๋ฒ„ ๋กœ๊ทธ๋Š” ํ„ฐ๋ฏธ๋„์— ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
  • --log-level debug ์˜ต์…˜์œผ๋กœ ์ƒ์„ธํ•œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿš€ API ์—”๋“œํฌ์ธํŠธ

1. ๊ฒŒ์ž„ ์‹œ์ž‘

POST /api/v1/game/start

์š”์ฒญ ๋ณธ๋ฌธ (JSON):

{
  "nickname": "์‚ฌ์šฉ์ž๋‹‰๋„ค์ž„",
  "user_type": "T" // ๋˜๋Š” "F"
}

์„ฑ๊ณต ์‘๋‹ต (200):

{
  "session_id": "์ƒ์„ฑ๋œ_์„ธ์…˜_ID",
  "message": "Game started successfully"
}

2. ๋ผ์šด๋“œ ์ •๋ณด ์กฐํšŒ

GET /api/v1/game/round/{round_number}

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ:

  • round_number: ๋ผ์šด๋“œ ๋ฒˆํ˜ธ (1-5)

์„ฑ๊ณต ์‘๋‹ต (200):

{
  "round_number": 1,
  "situation": "์นœ๊ตฌ๊ฐ€ ์‹œํ—˜์— ๋–จ์–ด์กŒ์„ ๋•Œ",
  "example_response": "๋„ˆ๋ฌด ์†์ƒํ•˜๊ฒ ๋‹ค. ๊ดœ์ฐฎ์•„? ๊ธฐ๋ถ„์ด ์–ด๋•Œ?"
}

3. ์‘๋‹ต ์ œ์ถœ ๋ฐ ์ ์ˆ˜ ํš๋“

POST /api/v1/game/score

์š”์ฒญ ๋ณธ๋ฌธ (JSON):

{
  "session_id": "์„ธ์…˜_ID",
  "user_response": "์‚ฌ์šฉ์ž_์‘๋‹ต_ํ…์ŠคํŠธ",
  "round_number": 1
}

์„ฑ๊ณต ์‘๋‹ต (200):

{
  "score": 78.5,
  "message": "Response scored successfully"
}

4. ๊ฒŒ์ž„ ๊ฒฐ๊ณผ ์š”์•ฝ

GET /api/v1/game/summary/{session_id}

๊ฒฝ๋กœ ํŒŒ๋ผ๋ฏธํ„ฐ:

  • session_id: ๊ฒŒ์ž„ ์„ธ์…˜ ID

์„ฑ๊ณต ์‘๋‹ต (200):

{
  "session_id": "์„ธ์…˜_ID",
  "nickname": "์‚ฌ์šฉ์ž๋‹‰๋„ค์ž„",
  "user_type": "T",
  "total_score": 350.5,
  "round_scores": [
    {
      "round_number": 1,
      "score": 78.5,
      "user_response": "์‚ฌ์šฉ์ž_์‘๋‹ต_ํ…์ŠคํŠธ",
      "is_correct_style": true
    }
  ],
  "percentile": 85.5,
  "rank": 4,
  "top_players": [
    {
      "nickname": "์ตœ๊ณ ์ˆ˜",
      "user_type": "F",
      "total_score": 480,
      "timestamp": "2025-06-14T12:00:00"
    },
    {
      "nickname": "์ค‘๊ฐ„์ž",
      "user_type": "T",
      "total_score": 420,
      "timestamp": "2025-06-14T11:30:00"
    },
    {
      "nickname": "์ดˆ๋ณด์ž",
      "user_type": "F",
      "total_score": 380,
      "timestamp": "2025-06-14T10:45:00"
    }
  ],
  "feedback": "ํ›Œ๋ฅญํ•ด์š”! ๊ฐ์ •ํ˜•(F) ์Šคํƒ€์ผ์„ ๋งค์šฐ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๊ณ„์‹œ๋„ค์š”!"
}

๐ŸŽฎ ๊ฒŒ์ž„ ์ง„ํ–‰ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž๊ฐ€ ๋‹‰๋„ค์ž„๊ณผ ๋ณธ์ธ์˜ MBTI ์œ ํ˜•(T/F)์„ ์ž…๋ ฅํ•˜์—ฌ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  2. ๊ฐ ๋ผ์šด๋“œ๋งˆ๋‹ค ํŠน์ • ์ƒํ™ฉ์ด ์ œ์‹œ๋ฉ๋‹ˆ๋‹ค.
  3. ์‚ฌ์šฉ์ž๋Š” ์ œ์‹œ๋œ ์ƒํ™ฉ์— ๋Œ€ํ•ด ๋ฐ˜๋Œ€ ์„ฑํ–ฅ์˜ ์Šคํƒ€์ผ๋กœ ์‘๋‹ต์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.
    • T ์œ ํ˜• ์‚ฌ์šฉ์ž: F ์Šคํƒ€์ผ๋กœ ๊ฐ์ •์„ ํ‘œํ˜„ํ•˜๋Š” ์‘๋‹ต ์ž‘์„ฑ
    • F ์œ ํ˜• ์‚ฌ์šฉ์ž: T ์Šคํƒ€์ผ๋กœ ๋…ผ๋ฆฌ์ ์ธ ์‘๋‹ต ์ž‘์„ฑ
  4. AI ๋ชจ๋ธ์ด ์‘๋‹ต์„ ๋ถ„์„ํ•˜์—ฌ ์ ์ˆ˜๋ฅผ ๋งค๊ธฐ๊ณ  ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  5. 5๋ผ์šด๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์ด์ , ์ˆœ์œ„, ๋ฐฑ๋ถ„์œ„, ์ƒ์œ„ ํ”Œ๋ ˆ์ด์–ด ์ •๋ณด ๋“ฑ์„ ํฌํ•จํ•œ ์ข…ํ•ฉ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜ ๊ทœ์น™

์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋Š” "๊ธฐ๋Šฅ: ๊ธฐ๋Šฅ์„ค๋ช…" ํ˜•์‹์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

โœ… ์ปค๋ฐ‹ ์œ ํ˜•

์œ ํ˜• ์„ค๋ช…
feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋˜๋Š” ๊ธฐ์กด ๊ธฐ๋Šฅ ์ˆ˜์ •
fix ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ฒ„๊ทธ ์ˆ˜์ •
build ๋นŒ๋“œ ๊ด€๋ จ ์ˆ˜์ •
chore ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ € ์ˆ˜์ • ๋ฐ ๊ธฐํƒ€ ์ˆ˜์ • (์˜ˆ: .gitignore)
docs ๋ฌธ์„œ(์ฃผ์„) ์ˆ˜์ •
style ์ฝ”๋“œ ์Šคํƒ€์ผ ๋ฐ ํฌ๋งทํŒ… ์ˆ˜์ • (๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์Œ)
refactor ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ ์—†์ด ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง (์˜ˆ: ๋ณ€์ˆ˜๋ช… ๋ณ€๊ฒฝ)

๐Ÿ“ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์˜ˆ์‹œ

feat: Add user authentication
fix: Resolve login button bug

About

๋„ˆโ€ฆ T์•ผ? ๐Ÿค–๐Ÿ’ฌ: MBTI ๊ธฐ๋ฐ˜ T/F ์œ„๋กœ ๋ฐฉ์‹ ๋ถ„๋ฅ˜ ๊ฒŒ์ž„

Resources

Stars

Watchers

Forks

Languages