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

๐Ÿ› ๏ธ ํ”„๋กœ์ ํŠธ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. ๋กœ๊ทธ์ธ ๋ฐ ํšŒ์›๊ฐ€์ž…
  2. ๊ทธ๋ฃน์—์„œ ๊ตํ™˜์ผ๊ธฐ ๋ฐ ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์—ฌ๋ถ€ ๊ณต์œ 
  3. ํˆฌ๋‘๋ฆฌ์ŠคํŠธ ๋ฐ ๋‹ฌ์„ฑ๋ฅ  ๊ณ„์‚ฐ
  4. ์ผ๊ธฐ ๋ถ„์„ ํ›„ ์ด๋ชจ์ง€๋กœ ์ €์žฅ

๐Ÿ‘ฉโ€๐Ÿ’ป ๋‚ด๊ฐ€ ๊ธฐ์—ฌํ•œ ๋ถ€๋ถ„

  1. ๋ชฉํ‘œ ๋“ฑ๋ก/์ˆ˜์ •/์‚ญ์ œ ๊ธฐ๋Šฅ

  2. ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์—ฌ๋ถ€ ๊ธฐ๋ก (์ผ๋ณ„ ์ด์ง„ ์ƒํƒœ ์ €์žฅ)

    1. findTodayGoalStatus(goal, date)๋กœ ์˜ค๋Š˜ ๊ธฐ๋ก ์กด์žฌ ์—ฌ๋ถ€ ์กฐํšŒ
    2. ์—†์œผ๋ฉด ์‹ ๊ทœ ์ €์žฅ (true ์ƒํƒœ)
    3. ์žˆ์œผ๋ฉด ์ƒํƒœ ์—…๋ฐ์ดํŠธ (trueโ†’false ๋˜๋Š” falseโ†’true)
  3. ๋ชฉํ‘œ ์ข…๋ฃŒ ํ›„ ํ†ต๊ณ„ ์ฒ˜๋ฆฌ ๋ฐ ์—…์  ์ €์žฅ

  4. ๊ตํ™˜์ผ๊ธฐ ์ž‘์„ฑ ์ˆœ์„œ ๋กœ์ง ๊ตฌํ˜„

    1. ๊ทธ๋ฃน ํ„ด ์ˆœ์„œ ํ๋ฆ„ ์ œ์–ด

      • group.getCurrentTurn()๊ณผ ๊ทธ๋ฃน์˜ ์œ ์ € ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์›ํ˜• ํ(Circular Queue) ๋ฐฉ์‹์œผ๋กœ ํ„ด์„ ์ˆœํ™˜ ์ฒ˜๋ฆฌ.
      • ๋งค์ผ ์ฒ˜์Œ ์ผ๊ธฐ ์ž‘์„ฑ ์‹œ์ ์—์„œ group.getLastTurnDate()๋ฅผ ํ™•์ธํ•˜๊ณ , ๋‹น์ผ์ด ์ƒˆ ๋‚ ์ด๋ฉด
        • group.setLastTurnDate(today)๋กœ ๋‚ ์งœ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ณ ,
        • (currentTurn + 1) % users.size() ๊ณ„์‚ฐ์„ ํ†ตํ•ด ๋‹ค์Œ ์œ ์ €์—๊ฒŒ ํ„ด์„ ๋ถ€์—ฌ.
      • ์ด ๊ตฌ์กฐ๋Š” ์ •์  ์ธ๋ฑ์Šค ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์ˆœํ™˜ ์‹œ์Šคํ…œ์œผ๋กœ, ์ƒํƒœ ๋™๊ธฐํ™”๋ฅผ ํ†ตํ•ด ์ค‘๋ณต ์ž‘์„ฑ ๋ฐฉ์ง€์™€ ์ž๋™ํ™”๋œ ์ˆœ๋ฒˆ ์ œ์–ด๋ฅผ ๊ตฌํ˜„ํ•จ.
    2. ์œ ์ € ์ธ์ฆ ๊ธฐ๋ฐ˜ ์ฐจ๋ก€ ํ™•์ธ ๋ฐ ์ ‘๊ทผ ์ œ์–ด

      • Principal์—์„œ ํ˜„์žฌ ๋กœ๊ทธ์ธ๋œ ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ์ž ์ •๋ณด(User)๋ฅผ ์กฐํšŒํ•จ.

      • ํ˜„์žฌ ํ„ด์— ํ•ด๋‹นํ•˜๋Š” ์œ ์ €(group.getUsers().get(currentTurn))์™€ ๋กœ๊ทธ์ธ ์‚ฌ์šฉ์ž์˜ ID๋ฅผ ๋น„๊ตํ•˜์—ฌ, ๋ณธ์ธ์˜ ์ฐจ๋ก€์ผ ๋•Œ๋งŒ ์ผ๊ธฐ ์ž‘์„ฑ ํŽ˜์ด์ง€ ์ ‘๊ทผ ํ—ˆ์šฉ.

      • ์ฐจ๋ก€๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์ฒ˜๋ฆฌ์™€ ํ•จ๊ป˜ "์ง€๊ธˆ์€ ์ฐจ๋ก€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค." ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ.

        โ†’ ์ด๋Š” Access Control(์ ‘๊ทผ ์ œ์–ด) ๊ตฌํ˜„์— ํ•ด๋‹นํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ํ˜ผ๋ž€ ๋ฐฉ์ง€์™€ UX ์ธก๋ฉด์—์„œ๋„ ์ค‘์š”ํ•จ.

    3. ์‹œ์ž‘์ผ๊ณผ ๊ทธ๋ฃน ์ธ์› ์ˆ˜ ๊ธฐ๋ฐ˜ ๋‚ ์งœ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ

      • ๊ทธ๋ฃน ์ธ์› ์ˆ˜๋งŒํผ ๋‚ ์งœ๋ฅผ ๊ฑฐ์Šฌ๋Ÿฌ ์˜ฌ๋ผ๊ฐ€ List<LocalDate>๋ฅผ ๊ตฌ์„ฑ.
      • ์ด๋Š” ์ผ๊ธฐ ์ž‘์„ฑ ๊ธฐ์ค€ ๊ธฐ๊ฐ„ ์„ค์ •์˜ ๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋กœ ์‚ฌ์šฉ๋จ.
      • ์‚ฌ์šฉ์ž์˜ ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์ƒํƒœ๋ฅผ ํ•ด๋‹น ๋‚ ์งœ ๋‹จ์œ„๋กœ ์กฐํšŒํ•˜๋Š” ๋ฐ ํ™œ์šฉ๋จ.
    4. ๋ชฉํ‘œ ๋‹ฌ์„ฑ ์ƒํƒœ ๋งคํ•‘ ๋ฐ ๊ตฌ์กฐํ™”

      • ์‚ฌ์šฉ์ž ๋ชฉํ‘œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ชฉํ‘œ์— ๋Œ€ํ•ด GoalStatus ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ ์งœ๋ณ„๋กœ ์กฐํšŒ.
      • {๋ชฉํ‘œ ID: {๋‚ ์งœ ๋ฌธ์ž์—ด: ์„ฑ๊ณต ์—ฌ๋ถ€(Boolean)}} ํ˜•ํƒœ์˜ **2์ค‘ ๋งต(Map)**์„ ๊ตฌ์„ฑํ•˜์—ฌ, ๋ทฐ(View)์—์„œ ๊ตฌ์กฐํ™”๋œ ๋ฐ์ดํ„ฐ๋กœ ๋ Œ๋”๋ง ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ.
      • ์ด๋Š” ์‹œ๊ฐ„-์ƒํƒœ ๊ธฐ๋ฐ˜ ๋ชฉํ‘œ ๋งคํ•‘ ํ…Œ์ด๋ธ”๋กœ, ๋ชฉํ‘œ ๋ถ„์„ ๋ฐ ํšŒ๊ณ  ๊ธฐ๋Šฅ ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ๊ตฌ์กฐ์ž„.
    5. ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ๊ณผ ๋™๊ธฐํ™” ์œ ์ง€

      • ๋‚ ์งœ๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉด ๊ทธ๋ฃน์˜ currentTurn ๋ฐ lastTurnDate๋ฅผ ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ ๋ฐฉ์ง€.
      • ํ„ด์ด ๊ทธ๋ฃน ์œ ์ € ์ˆ˜๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฒฝ์šฐ currentTurn = 0์œผ๋กœ ๋กค๋ฐฑ ์ฒ˜๋ฆฌ ํ›„ DB ์ €์žฅ ์ˆ˜ํ–‰, ์ˆœํ™˜ ๊ตฌ์กฐ ์œ ์ง€.
  5. GPT ๊ธฐ๋ฐ˜ ์ด๋ชจ์ง€ ๊ฐ์ • ์š”์•ฝ ๊ธฐ๋Šฅ

    1. ์‚ฌ์šฉ์ž ์ž…๋ ฅ ์ˆ˜์ง‘ ๋ฐ ํ”„๋กฌํ”„ํŠธ ์ƒ์„ฑ

    2. GPT API ์š”์ฒญ ๊ตฌ์„ฑ

    1. ์‘๋‹ต ํŒŒ์‹ฑ ๋ฐ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ

    4. ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ฒฐ๊ณผ ์ „๋‹ฌ