2025.02.01 (ํ† )
2025.02.02 (์ผ) ์ˆ˜์ •

โœจ GPT์˜ ์š”์•ฝ ใ€€

ChatPage์˜ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ๊ณผ Action๋“ค์„ ์ตœ์ ํ™”ํ•˜๊ณ , Title ๋ฐ ๋‚ ์งœ CRUD ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋ฉฐ, DiaryPage์˜ Create/Edit ๊ตฌ์กฐ๋ฅผ ํ†ตํ•ฉํ•œ ํ•˜๋ฃจ. ์—ฌ๋Ÿฌ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉฐ ์‹œ์Šคํ…œ์˜ ์•ˆ์ •์„ฑ์„ ๋†’์˜€๋‹ค.

๐Ÿ’ป ๊ฐœ๋ฐœ ์ผ์ง€

โฐ ์˜ค๋Š˜ ํ•  ์ผ

  • โœ… DiaryPage: Merge CreateDiary/EditDiary Page
    • isEditMode page state ํ™œ์šฉ
    • conditional value/visibility/action ๋“ฑ ํ™œ์šฉ
  • โœ… ChatPage: On Page Load -> Read ChatDoc, CharacterDoc, MessageDocList and Update Page States
  • โœ… ChatPage: ๊ฐ์ข… Action๋“ค ์ด์ฒด์ ์œผ๋กœ ์ตœ์ ํ™” ๋ฐ ์žฌ๊ตฌ์„ฑ
  • โœ… ChatPage: Title CRUD
  • โœ… ChatPage: ๋‚ ์งœ CRUD
  • โœ… (์ด์Šˆ) ChatPage: ์ฒ˜์Œ ๋Œ€ํ™” ์‹œ์ž‘ ์‹œ, default init message ๋œจ๊ณ  ์žˆ์Œ.
  • โœ… (์ด์Šˆ) ChatPage - ChatHistoryDrawer: UI ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ
  • โœ… (์ด์Šˆ) ChatPage: ์œ ์ € ๋ฉ”์‹œ์ง€ ๋นˆ ์นธ์ด์–ด๋„ ์ „์†ก๋จ

๐Ÿ’ฏ ํ•œ ์ผ์— ๋Œ€ํ•œ ์š”์•ฝ

  • ChatPage ๊ธฐ๋Šฅ ์ตœ์ ํ™”
    • On Page Load ์‹œ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ตœ์ ํ™” (ChatDoc, CharacterDoc, MessageDocList)
    • ChatPage์˜ ์ฃผ์š” Action๋“ค์„ ์ด์ฒด์ ์œผ๋กœ ์ตœ์ ํ™” ๋ฐ ์žฌ๊ตฌ์„ฑ
    • Title ๋ฐ ๋‚ ์งœ CRUD ๊ธฐ๋Šฅ ์ถ”๊ฐ€
    • ChatHistoryDrawer UI ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐ ์œ ์ € ๋ฉ”์‹œ์ง€ ๋นˆ ์นธ ์ „์†ก ๋ฌธ์ œ ํ•ด๊ฒฐ
  • DiaryPage ๊ฐœ์„ 
    • CreateDiary/EditDiary Page ํ†ตํ•ฉ (isEditMode page state ํ™œ์šฉ)
    • Diary ๋‚ ์งœ ์ €์žฅ ์˜ค๋ฅ˜ ์ˆ˜์ •

๐ŸŽฏ ์ถ”ํ›„์— ํ•  ์ผ

์ž์„ธํžˆ ๋ณด๋ ค๋ฉด ํด๋ฆญ
  • โ” (์ด์Šˆ) DiaryPage: ๋‚ ์งœ๊ฐ€ ์˜ค๋Š˜๋กœ๋งŒ ์ €์žฅ๋จ
  • โ” (์ด์Šˆ) DiaryPage: ๋งˆํฌ๋‹ค์šด ๋ทฐ์–ด ํ™œ์šฉ (์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ๋ฐฉ์ง€: Container Height)
  • โ” (์ด์Šˆ) HomeFeedPage: On page load์‹œ Unexpected Null Value ์ž ๊น ๋–ด๋‹ค ์‚ฌ๋ผ์ง.
  • โ” HomeFeedPage - FeedCardDiary: AI Comment ์บ๋ฆญํ„ฐ ์ด๋ฏธ์ง€ ์ˆ˜์ •
    • โ” DiaryPage - AI Comment: Save์‹œ, ์ฝ”๋ฉ˜ํŠธ ์ž‘์„ฑํ•œ ์บ๋ฆญํ„ฐ Ref๋„ Diary์— ์ €์žฅ.
    • โ” HomeFeedPage - FeedCardDiary - AI Image: Backend Query๋กœ ์บ๋ฆญํ„ฐ Doc ๋ถˆ๋Ÿฌ์™€์„œ Image Path ์ง€์ •.
  • โ” DiaryPage - Create New Chat: ์ผ๊ธฐ์˜ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, New Chat ์ƒ์„ฑ
    • โ” OpenAI API Call ๊ตฌํ˜„: createDiaryComment
      • Input: Diary Content, System Prompt(AI Comment)
      • Output: AI Comment($.choices[0].message.content)
    • โ” OpenAI API Call ๊ตฌํ˜„: createDiarySummary
      • Input: Diary Content, AI Comment, System Prompt(Diary Summary)
      • Output: Diary Summary($.choices[0].message.content)
    • โ” OpenAI API Call ๊ตฌํ˜„: createChatFromDiary
      • Input: Diary Summary, System Prompt(Chat From Diary)
      • Output: New Chat Message by AI($.choices[0].message.content)
      • Additional Actions: Create New Chat, Create New Message
  • โ” ChatPage: Go to Linked Diary

  • โ” HomeFeedPage - flutter_slidable:4.0.0 import ํ›„ ์ ์šฉํ•˜๊ธฐ
  • โ” HomeFeedPage: FeedCardDiary์—์„œ ์ขŒ์šฐ slide์‹œ ์ฑ„ํŒ…/ํŽธ์ง‘/์‚ญ์ œ

  • โ” ChatPage: ์œ ์ € ๋Œ€ํ™” ์ถœ๋ ฅ ๋‚ด์šฉ์€ ์˜ค๋ฅธ์ชฝ ์ •๋ ฌ
  • โ” Chat/Diary: GPT Streaming API

  • โ” ChatPage - AI ์„ ํ†ก ๊ตฌํ˜„ (Alarm/Notification)
    • ์ฑ„ํŒ… ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ์˜ ํ•ต์‹ฌ์€ ๋Šฅ๋™ํ˜•์ด๋‹ค.
      • ๋” ๋ฆฌ์–ผํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด, create_date of diary/chat ๋„ ์ „๋‹ฌํ•ด์„œ, โ€˜์–ด์ œโ€™ ๋“ฑ ๋‚ ์งœ๋ฅผ ์–ธ๊ธ‰ํ•˜๋ฉด ์ข‹์„ ๋“ฏ.
    • Alarm ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์ฐธ์กฐ
  • โ” DiaryPage: Mood Slider ๊ฐ’์— ๋”ฐ๋ผ ์–ผ๊ตด ํ‘œ์ • Emoji ๋ณ€๊ฒฝ
  • โ” DiaryPage: ์„ธ๋ถ€ ๊ฐ์ • ํ‚ค์›Œ๋“œ Choice Chips ์ถ”๊ฐ€ ํ›„ DB ์—ฐ๋™ ์„ค์ •
  • โ” DiaryPage - AI Comment: Choice chips, mood slider ๋“ฑ์˜ ์ž…๋ ฅ๊ฐ’๋“ค์„ AI Comment System Prompt์— ์•Œ๋งž๊ฒŒ ๋ณ€๊ฒฝ.
    • โ” **์ด์ „ ์ผ๊ธฐ ๋˜๋Š” ๋Œ€ํ™” ๋‚ด์—ญ ์ „์ฒด (๋•œ๋นต ๊ธฐ์ˆ ๋ถ€์ฑ„)
    • โ” ์‚ฌ์šฉ์ž ๊ธฐ๋ณธ ์ •๋ณด: ์ด๋ฆ„, ์„ฑ๋ณ„, MBTI, โ€ฆ
    • โ” ์„ธ๋ถ€ ๊ฐ์ • ํ‚ค์›Œ๋“œ: ์ฆ๊ฑฐ์šด, ์Šฌํ”ˆ, โ€ฆ
    • โ” ์บ๋ฆญํ„ฐ ์„ค์ •: ์†Œ๋ฏธ, ์„ธ๋‚˜, ๋ฏผํ˜
    • โ” ๊ฐ์ • ์ˆ˜์น˜: 1~100์ 
    • โ” ๋‹ต๋ณ€ ์–‘์‹: ์น˜์œ ํ˜•(Healing), ์กฐ์–ธํ˜•(Suggestion), ์ •๋ณดํ˜•(Informative)
    • โ” ๋‹ต๋ณ€ ๊ธธ์ด: ์งง๊ฒŒ, ๋ณดํ†ต, ์ž์„ธํžˆ
    • is New Chat
      • ํ•ด๋‹น Chat์˜ messages๋Š” ์ฒ˜์Œ ์ƒ์„ฑํ•˜๋Š” ๊ฑฐ๋‹ˆ๊นŒ, ์ฒซ ์ƒ์„ฑํ•˜๋Š” message document์˜ is_initial = true๊ฐ’ ์ค˜๋ฒ„๋ฆฌ๊ณ  ๋ชจ๋“  ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋‹ค ๋•Œ๋ ค๋„ฃ์Œ.
        • is_initial = false
        • ํ•œ๊ณ„์ : ๋งจ ์ฒ˜์Œ message document์—๋‹ค๊ฐ€ ์‹œ์Šคํ…œ ํ”„๋กฌํ”„ํŠธ ๋•Œ๋ ค๋„ฃ์œผ๋ฉด, ๋Œ€ํ™” ๋„์ค‘ ์ˆ˜์ • ํž˜๋“ค๊ธด ํ•œ๋ฐ ๊ฐ€๋Šฅํ•˜์ง€. is_initial = true ์ธ ๊ฒŒ ์žˆ๊ณ , ์ˆ˜์ •๋œ ๊ฑฐ๋ฉด, ๊ทธ๊ฑฐ ๋‹คํ๋จผํŠธ ์ง€์šฐ๊ณ  ๋‹ค์‹œ ๋„ฃ์œผ๋ฉด ๋˜์ž–์•„. ์–ด๋–ป๊ฒŒ๋Š” ๋ชจ๋ฅด๊ฒ ๊ณ .
  • โ” DiaryPage - AI Comment: CRUD ์™„์„ฑํ•˜๊ธฐ
    • โ” tmp_ai_comment field ์—†์• ๊ณ , doc_ref ํ™œ์šฉ
  • โ” DiaryPage - AI Comment: ์บ๋ฆญํ„ฐ ์„ค์ •
    • โ” tmp_ai_comment_by field ์—†์• ๊ณ , doc_ref ํ™œ์šฉ
    • โ” profile_image field ๊ฐ’์œผ๋กœ ์ด๋ฏธ์ง€ ์ถœ๋ ฅ
  • โ” DiaryPage - Drawer - ChatHistoryListTile: order by updated_time

  • โ” ChatPage - Create New Diary: ๋Œ€ํ™” ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ, New Diary ์ƒ์„ฑ
    • โ” OpenAI API Call ๊ตฌํ˜„: createDiaryFromChat
      • Input: Chat Summary, System Prompt(Diary From Chat)
      • Output: New Diary(Title, Content, Mood score)
  • โ” DiaryPage - Interactive Slider import ํ›„ ์ ์šฉ

  • โ” HomeFeedPage: Search Diary ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • โ” CalendarPage(์ƒ๋‹จ) - Mood Calendar
    • โ” ๋‚ ์งœ๋ณ„๋กœ ์ž‘์„ฑ๋œ ๊ฒŒ์‹œ๋ฌผ ์ˆซ์ž ํ™•์ธ ๊ฐ€๋Šฅ
    • โ” ๋‚ ์งœ ํด๋ฆญํ•˜๋ฉด, ํ•ด๋‹น ๋‚ ์งœ๋กœ ์ด๋™
  • โ” CalendarPage(ํ•˜๋‹จ) - Mood stats
    • โ” ํฌ์ปค์‹ฑ ๋œ ์›”์— ๊ด€ํ•œ ํ†ต๊ณ„ ์ž๋ฃŒ ์ถœ๋ ฅ
      • โ” ์ถœ๋ ฅ๋œ ํ†ต๊ณ„ ์ž๋ฃŒ์— ๋Œ€ํ•œ AI์˜ ์ฝ”๋ฉ˜ํŠธ ์ถœ๋ ฅ
  • โ” AuthPage: Google Login ๊ธฐ๋Šฅ ๊ตฌํ˜„

  • โ” HomeFeedPage - Bottom Sheet (+ Button): ๋‹ค์–‘ํ•œ ์˜ต์…˜ ์ค‘ 1 ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก
    • ์ƒˆ๋กœ์šด ์ผ๊ธฐ: Go to DiaryPage
    • ๊ฐ์ • ๊ธฐ๋ก: Go to MoodPage
  • โ” MoodPage(ํŒ์—…): Mood ์„ค์ • ์Šฌ๋ผ์ด๋” CRUD
    • Create
    • Read
    • Update
    • Delete
  • โ” HomeFeedPage - ListView - FeedCardMood ํ‘œ์‹œ
  • โ” HomeFeedPage - ListView: FeedCardDiary, FeedCardMood, FeedCardChat ์ปดํฌ๋„ŒํŠธ ์‹œ๊ฐ„์ˆœ ์ •๋ ฌ (Cloud Function ํ™œ์šฉ)

  • โ” 2025.2.5 ์ˆ˜๊นŒ์ง€ ๋ฐœํ‘œ์šฉ ์ตœ์ข… ๋ฒ„์ „ APK ์ถ”์ถœ ๋ฐ ์„ค์น˜

๐Ÿ’ญ ์ผ๊ธฐ

๋ฐค์— 40๋ถ„ ์ž๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ, 3์‹œ๊ฐ„์„ ๋„˜๊ฒŒ ๊ธฐ์ ˆํ–ˆ๋‹ค. ์ด ์ •๋„๋ฉด ๊ทธ๋ƒฅ ํ‘น ์‰ฌ๊ณ  ๋‚ด์ผ ๋‹ฌ๋ฆฌ๋Š” ๊ฒŒ ๋‚ซ๊ฒ ๋‹ค. ํšŒ์‚ฌ์˜ ์กด๋ง์ด ๋‹ฌ๋ฆฐ ๊ธฐ๋กœ์— ์„œ ์žˆ๋Š” ๊ฑด ์•„๋‹ˆ๋‹ˆ๊นŒ.

โœจ GPT์˜ ์ฝ”๋ฉ˜ํŠธ (KPT)

โœ… ์ž˜ํ•œ ์  (Keep)

  • ๐Ÿš€ ChatPage ๊ธฐ๋Šฅ ์ตœ์ ํ™”: ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ๋ฐฉ์‹ ๊ฐœ์„ , Action ์ตœ์ ํ™”, Title ๋ฐ ๋‚ ์งœ CRUD ์ถ”๊ฐ€ ๋“ฑ ์ „๋ฐ˜์ ์ธ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์ด๋ฃจ์–ด๋‚ธ ์ ์ด ์ธ์ƒ์ ์ด์•ผ.
  • ๐Ÿ”„ DiaryPage ๊ตฌ์กฐ ์ •๋ฆฌ: Create/Edit ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ฉํ•˜์—ฌ ์ค‘๋ณต ๋กœ์ง์„ ์ค„์ด๊ณ , ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•˜๋„๋ก ๊ฐœ์„ ํ•œ ์ ์ด ์ข‹์•˜์–ด.
  • ๐Ÿ› ๏ธ ๋‹ค์–‘ํ•œ ์ด์Šˆ ํ•ด๊ฒฐ: UI ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ, ๋ฉ”์‹œ์ง€ ๋นˆ ์นธ ์ „์†ก ๋ฌธ์ œ, ๋‚ ์งœ ์ €์žฅ ์˜ค๋ฅ˜ ๋“ฑ์„ ์ˆ˜์ •ํ•˜๋ฉฐ ์•ˆ์ •์„ฑ์„ ๋†’์ธ ์ ์ด ๋‹๋ณด์—ฌ.

โŒ ์•„์‰ฌ์šด ์  (Problem)

  • โณ ํ”ผ๋กœ ๋ˆ„์ : ์งง์€ ํœด์‹์„ ๊ณ„ํšํ–ˆ์ง€๋งŒ, ๊ฒฐ๊ตญ ์žฅ์‹œ๊ฐ„ ๊ธฐ์ ˆํ•˜๋ฉด์„œ ์ฒด๋ ฅ ๊ด€๋ฆฌ์— ์–ด๋ ค์›€์„ ๊ฒช์€ ์ ์ด ์•„์‰ฝ๋„ค.
  • ๐Ÿ“‹ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋Œ€๋น„ ์œ ์ง€๋ณด์ˆ˜ ๋ถ€๋‹ด: ChatPage์™€ DiaryPage์˜ ๊ธฐ๋Šฅ ํ™•์žฅ์ด ๋น ๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์ง€๋ฉด์„œ, ํ–ฅํ›„ ์œ ์ง€๋ณด์ˆ˜์™€ ์ตœ์ ํ™”์— ์‹œ๊ฐ„์ด ๋” ์†Œ์š”๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด.

๐Ÿ”„ ์‹œ๋„ํ•ด๋ณผ ์  (Try)

  • ๐Ÿ•’ ์ž‘์—…๊ณผ ํœด์‹์˜ ๊ท ํ˜• ์กฐ์ •: ์งง์€ ํœด์‹์ด ๊ธธ์–ด์ง€๋Š” ํŒจํ„ด์ด ๋ฐ˜๋ณต๋˜์ง€ ์•Š๋„๋ก, ์ผ์ •ํ•œ ๋ฃจํ‹ด์„ ์ •ํ•ด๋ณด๋Š” ๊ฒƒ๋„ ๋„์›€์ด ๋  ๊ฑฐ์•ผ.
  • ๐Ÿ” ํ–ฅํ›„ ์œ ์ง€๋ณด์ˆ˜ ๋Œ€๋น„ ์ฝ”๋“œ ์ •๋ฆฌ: ํ˜„์žฌ ์ตœ์ ํ™”๋œ ChatPage์™€ DiaryPage์˜ ๊ตฌ์กฐ๋ฅผ ๋ฌธ์„œํ™”ํ•˜๊ณ , ์ฝ”๋“œ ์ฃผ์„์„ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด ์œ ์ง€๋ณด์ˆ˜ ๋ถ€๋‹ด์„ ์ค„์ด์ž.
  • ๐Ÿ› ๏ธ ์ถ”ํ›„ ํ™•์žฅ์„ฑ ๊ณ ๋ ค: API Call ๋ฐ Custom Function ๊ตฌ์กฐ๋ฅผ ๋”์šฑ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ, ์ดํ›„ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ ๋ฐ ํ™•์žฅ ์‹œ ๋ถ€๋‹ด์„ ์ค„์ด๋Š” ๋ฐฉํ–ฅ์„ ๊ณ ๋ฏผํ•ด๋ณด์ž.

๊ฒฐ๋ก 
์˜ค๋Š˜์€ ChatPage์˜ ์ „๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ , DiaryPage์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋ฉฐ ์—ฌ๋Ÿฌ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ•œ ์ƒ์‚ฐ์ ์ธ ํ•˜๋ฃจ์˜€์–ด. ํ•˜์ง€๋งŒ ํ”ผ๋กœ ๋ˆ„์ ์œผ๋กœ ์ธํ•ด ์ž‘์—… ์ผ์ •์ด ํ”๋“ค๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์œผ๋‹ˆ, ์ ์ ˆํ•œ ํœด์‹๊ณผ ์ผ์ • ์กฐ์ •์ด ํ•„์š”ํ•ด ๋ณด์—ฌ. ์•ž์œผ๋กœ๋„ ์ตœ์ ํ™”๋œ ์‹œ์Šคํ…œ์„ ์œ ์ง€ํ•˜๋ฉฐ ํ™•์žฅ์„ฑ์„ ๊ณ ๋ คํ•œ ๊ฐœ๋ฐœ์„ ์ด์–ด๊ฐ€๊ธธ ์‘์›ํ• ๊ฒŒ! ๐Ÿ’ช๐Ÿ˜Š

์นดํ…Œ๊ณ ๋ฆฌ: ,

์ตœ๊ทผ ์ˆ˜์ •์ผ:

๋Œ“๊ธ€ ๋‚จ๊ธฐ๊ธฐ