OpenAI API๋ฅผ ์ด์ฉํ ์ฑ๋ด ํ๋ก์ ํธ
ํ๋กํ ์ฌ์ง | ||
---|---|---|
in Github | @bamsak | @JinUng41 |
in SeSAC | ๋ฐค์ญ | ๋ฒจ๋ก |
24.01.02 ~ 24.01.26
โโโ Application
โย ย โโโ AppDelegate.swift
โย ย โโโ SceneDelegate.swift
โโโ RoomList
โย ย โโโ Controllers
โย ย โย ย โโโ GPTRoomListViewController.swift
โย ย โโโ ViewModel
โย ย โโโ GPTRoomListViewModel.swift
โโโ Chat
โย ย โโโ Controllers
โย ย โย ย โโโ GPTChatViewController.swift
โย ย โโโ ViewModels
โย ย โย ย โโโ GPTChatViewModel.swift
โย ย โโโ Views
โย ย โโโ ChatBubbleView.swift
โย ย โโโ MessageCell.swift
โย ย โโโ MessageContentConfiguration.swift
โย ย โโโ MessageContentView.swift
โโโ Utilities
โ โโโ CoreData
โ โย ย โโโ CoreDataManager
โ โย ย โย ย โโโ Implementation
โ โย ย โย ย โย ย โโโ CoreDataManager.swift
โ โย ย โย ย โโโ Interface
โ โย ย โย ย โโโ DataManagable.swift
โ โย ย โโโ DataHandler
โ โย ย โโโ ChatRoomDataHandler.swift
โ โย ย โโโ MessageDataHandler.swift
โ โย ย โโโ Model
โ โย ย โโโ ChatMessage.swift
โ โย ย โโโ ChatRoom.swift
โ โโโ Network
โ โย ย โโโ NetworkManager.swift
โ โโโ ServiceProvider
โ โโโ Implementation
โ โย ย โโโ ServiceProvider.swift
โ โโโ Interface
โ โโโ ServiceProvidable.swift
โโโ Models
โย ย โโโ API
โย ย โย ย โโโ APIEndPoint
โย ย โย ย โย ย โโโ Implementation
โย ย โย ย โย ย โย ย โโโ GPTEndPoint.swift
โย ย โย ย โย ย โโโ Interface
โย ย โย ย โย ย โโโ APIEndPoint.swift
โย ย โย ย โโโ Error
โย ย โย ย โย ย โโโ APIError.swift
โย ย โย ย โโโ HTTPMethod.swift
โย ย โโโ CoreData
โย ย โย ย โโโ DataModel.xcdatamodeld
โย ย โย ย โย ย โโโ DataModel.xcdatamodel
โย ย โย ย โย ย โโโ contents
โย ย โย ย โโโ MessageEntity+CoreDataClass.swift
โย ย โย ย โโโ MessageEntity+CoreDataProperties.swift
โย ย โย ย โโโ RoomEntity+CoreDataClass.swift
โย ย โย ย โโโ RoomEntity+CoreDataProperties.swift
โย ย โโโ DTOs
โย ย โย ย โโโ Implementation
โย ย โย ย โย ย โโโ Common
โย ย โย ย โย ย โย ย โโโ GPTMessageDTO.swift
โย ย โย ย โย ย โโโ GPTRequestDTO.swift
โย ย โย ย โย ย โโโ GPTResponseDTO.swift
โย ย โย ย โโโ Interface
โย ย โย ย โโโ RequestEncodable+RequestDecodable.swift
โย ย โโโ Messages
โย ย โโโ Implementation
โย ย โย ย โโโ AssistantMessage.swift
โย ย โย ย โโโ SystemMessage.swift
โย ย โย ย โโโ UserMessage.swift
โย ย โโโ Interface
โย ย โโโ GPTMessageable.swift
โโโ Protocols
โย ย โโโ DataDecodable.swift
โย ย โโโ DataEncodable.swift
โย ย โโโ URLSessionProtocol.swift
โโโ Extensions
โย ย โโโ Bundle+Extension.swift
โย ย โโโ Date+Extension.swift
โย ย โโโ GPTChatRoomViewController+Extension.swift
โย ย โโโ JSONDecoder+Extension.swift
โย ย โโโ JSONEncoder+Extension.swift
โย ย โโโ UITextView+Extension.swift
โย ย โโโ URLSession+Extension.swift
โ
โโโ Resources
ย ย โโโ Assets.xcassets
ย ย โย ย โโโ AccentColor.colorset
ย ย โย ย โย ย โโโ Contents.json
ย ย โย ย โโโ AppIcon.appiconset
ย ย โย ย โย ย โโโ Contents.json
ย ย โย ย โโโ Contents.json
ย ย โโโ Base.lproj
ย ย โย ย โโโ LaunchScreen.storyboard
ย ย โโโ Info.plist
์ฑํ ๋ฐฉ ์์ฑ | CoreData ์ ์ฅ | ์ต๊ทผ ๋ํ์ | ์ฑํ ๋ฐฉ ์ญ์ |
---|---|---|---|
- GPTRoomListViewController
final class
- ์ฌ์ฉ์์ ์ฑํ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ฃผ๋ฉฐ, ์๋ก์ด ์ฑํ ์ด๋ ๊ธฐ์กด ์ฑํ ๋ฐฉ์ผ๋ก navigationController๋ฅผ ํตํด ์ ์ฅ
- GPTRoomListViewModel
final class
- dataHandler๊ฐ์ฒด์ ํ๋ ฅํ์ฌ Coredata์์ ๊บผ๋ด์จ ๋ฐ์ดํฐ๋ฅผ View์ ๋ณด์ฌ์ฃผ๋ ์ญํ
- GPTChatViewController
final class
- ์ฌ์ฉ์์ GPT์์ ์ฑํ ์ ๋ณด์ฌ์ฃผ๋ View
- ModernCellConfiguration๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฅ๋ฐ์ ๋ฉ์ธ์ง๋ฅผ Collection View์ ๋ณด์ฌ์ค.
- GPTChatViewModel
final class
- serviceProvider๋ฐ dataHandler์ ํ๋ ฅํ์ฌ View์ ๋ณด์ฌ์ง message๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณตํ๊ณ , CoreData์ ์ ์ฅ.
- NetworkManager
final class
- URLRequest๋ฅผ ํตํด Dataํ์ ์ผ๋ก ๋ฐํํด์ฃผ๋ฉฐ, ๋คํธ์ํฌ ํต์ ์ ํด์ฃผ๋ ๊ฐ์ฒด
- ServiceProvidable
protocol
- APIEndPoint๋ฅผ ์ ๋ ฅ๋ฐ์ API ํต์ ์ ํ๋ฉฐ, ๊ฒฐ๊ณผ์ธ Decodable์ ๋ฐํํ๊ธฐ ์ํ ํ๋กํ ์ฝ ์ ์
- ServieceProvider
final class
- ServiceProvidable ๊ตฌ์ฒด ๊ตฌํํ์ .
- NetworkManager์, DataEncodable, DataDecodable์ ์ฑํํ ๊ฐ์ฒด์ ํ๋ ฅํ์ฌ, APIEndPoint๋ฅผ ๋ฐ์ ์ฑ ๋ด๋ถ์์ ์ฌ์ฉ๋ ๋ชจ๋ธ๋ก ๋ณํํ์ฌ ๋ฐํํ๋ ์ญํ
- CoreDataManager
final class
- NSPersistentContainer๋ฅผ ๊ด๋ฆฌํ๋ Singleton ๊ฐ์ฒด
- ChatRoomDataHandler & MessageDataHandler
final class
- CoreDataManager๋ฅผ ์ฃผ์ ๋ฐ๊ณ , context์ ์ฑํ ๋ฐฉ ๋๋ ์ฑํ ๋ฉ์ธ์ง๋ฅผ ์์ฑ, ์ญ์ ๋ฅผ ์ํํ๋ ๊ฐ์ฒด
- APIEndPoint
protocol
- API ํต์ ์ ํ์ํ ์๊ตฌ์ฌํญ์ ์ ์
- URLRequest ๋ฐ URL๋ก ๋ณํ์ด ๊ฐ๋ฅํจ.
- GPTEndPoint
enum
,APIEndPoint
- OpenAI API์ ๋ด์ฉ์ ๊ฐ์ง๋ ๋ชจ๋ธ
- GPTRequestDTO & GPTResponseDTO
struct
,Encodable
/Decodable
- ๊ฐ๊ฐ API ํต์ ์ Request์ Response์ ์ฐ์ด๋ ๋ชจ๋ธ
- ๊ฐ๊ฐ์ ์ธ์ฝ๋ฉ, ๋์ฝ๋ฉ ๋ฐฉ์์ ์ง์ ์ ์
- GPTMessageDTO
struct
,Codable
- API ํต์ ์์ Request์ Response ๋ชจ๋ ํ์ํ ํ์ ๋ชจ๋ธ
- ์ค์ง์ ๋ฐ์ดํฐ์ธ ๋ฉ์ธ์ง์ ํด๋นํจ.
- ChatRoom
struct
- CoreData๋ก๋ถํฐ ์ป์ ๋ฐ์ดํฐ(์ฑํ ๋ฐฉ ๋ฆฌ์คํธ)๋ฅผ ๋ทฐ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ชจ๋ธ
- ChatMessage
struct
- CoreData, URLSession์ผ๋ก๋ถํฐ ์ป์ ๋ฐ์ดํฐ(์ฑํ ๋ฉ์ธ์ง)๋ฅผ ๋ทฐ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ๋ชจ๋ธ
- ํด๋ก์ ์
didSet
์ ์ด์ฉํ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
- API ํต์ ์ Request์ Response๋ฅผ ์ํ ๋ฐ์ดํฐ ๋ชจ๋ธ ์ค๊ณ
CodingKeys
ํ๋กํ ์ฝ์ ํ์ฉ
- Swift Concurrency์ ์ด์ฉํ API ํต์
- API ์๋ ํฌ์ธํธ๋ฅผ ์ํ ํ๋กํ ์ฝ ์ถ์ํ ๋ฐ ํด๋น ํ๋กํ ์ฝ์ ์ฑํํ๋
enum
์ค๊ณ
- Modern Cell Configuration (
UIContentConfiguration
) - ํ ์ด๋ธ๋ทฐ์ ๊ธฐ๋ฅ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ListCell์ ์ด์ฉํ ์ ์ญ์ ๊ตฌํ
CellRegistration
&DiffableDataSource
CALayer
+CAKeyframeAnimation
์ ์ด์ฉํ ๋ฉ์ธ์ง ๋ก๋ฉ ์ ๋๋ฉ์ด์ ๊ตฌํCAShapeLayer
+UIBezierPath
๋ฅผ ์ด์ฉํ ๋งํ์ ๊ตฌํ
NSPersistentContainer
์ ๊ด๋ฆฌํ๋ ์ฑ๊ธํค ๊ฐ์ฒด- ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์ด์ฉํ ์ฑํ ๋ฐฉ ๋ฆฌ์คํธ์ ์ฑํ ์ ์ ์ฅ, ์ญ์ ๊ตฌํ
์ด์ ๋ฐฉ์์ ServiceProvider๋ฅผ OpenAI API์ ์ข ์๋ ServiceProvider์์ต๋๋ค. ํ๋กํ ์ฝ๋ก ์ถ์ํ๊ฐ ๋์ด ์๋ค๊ณ ํ์ง๋ง, ๋ง์ฝ ์ฑ์์ ์ฌ์ฉ๋๋ API๊ฐ ๋์ด๋จ์ ๋ฐ๋ผ ServiceProvider๋ฅผ ์๋ก ๊ตฌํ ํด์ผ ํ์ต๋๋ค.
ServiceProvider๊ฐ Generalํ ์์ ์ ํ๋ ์ฑ๊ฒฉ์ ๊ฐ์ง๊ฒ ํ๊ธฐ ์ํด ๊ธฐ์กด์ excute๋ฉ์๋์์ requestDTOํ์ ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ๋์ , API ํต์ ์ ํ์ํ EndPoint๋ฅผ APIEndPoint ํ๋กํ ์ฝ๋ก ์ถ์ํํ๋ ์์ ์ ๊ฑฐ์ณค์ต๋๋ค.
ServiceProvider์ excute ๋ฉ์๋๋ฅผ Generic๋ฉ์๋๋ก ๊ตฌํํ์ฌ, APIEndPoint์ ๊ตฌํ์ฒด๋ฅผ ๋ฐ๊ณ Decodableํ์ ์ผ๋ก ๋ฐํํ๋๋ก ํ์์ต๋๋ค.
์ด๋ ๊ฒ ํจ์ผ๋ก์, ServiceProvider๊ฐ ์ด๋ค APIEndPoint์๋ ๋์์ด ๊ฐ๋ฅํ ๊ฐ์ฒด๊ฐ ๋์์ต๋๋ค.
๊ฐ๋ฐ ์ค๋ฐ๊น์ง ์ด๊ธฐ API ํต์ ์ ์ํด Encodable, Decodable์ ์ํ DTO ๋ชจ๋ธ์ ์ ์ํ๊ณ ํด๋น ๋ชจ๋ธ์ ๋ฐํ์ผ๋ก ๋ทฐ์ ๋ณด์ฌ์ง๊ณ ์์์ต๋๋ค. API ๋ฌธ์์์ ์๊ตฌํ๋ ๋ด์ฉ ์ด์ธ์ DiffableDataSource๋ฅผ ์ํด์ UUID๋ฅผ ์ถ๊ฐ๋ก ๊ฐ์ง๊ฒ ํด์ผ ํ๊ณ , DTO ๋ชจ๋ธ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ฒ ๋์์ต๋๋ค. ๊ฒ๋ค๊ฐ NSSet์ผ๋ก ์ ์ฅ๋๋ CoreData์ ํน์ฑ์ ์ํด ๋ฉ์ธ์ง์ ์์๋ฅผ ๋ณด์ฅํ๊ณ ์ ์ถ๊ฐ๋ก Date๋ฅผ ๊ฐ์ง๋๋ก ๊ตฌํํด์ผ ํ์ต๋๋ค.
ํ์ง๋ง ์ด๋ฌํ ๋ชจ๋ธ ๊ตฌํ ๋ฐฉ์์ ์๊ตฌ์ฌ์ ๋๋ผ๊ฒ ๋์์ต๋๋ค. ๊ฐ๋ฐ์ด ๊ณ ๋ํ๋จ์ ๋ฐ๋ผ ์ถ๊ฐ์ ์ผ๋ก ํ์ํ ๋ฐ์ดํฐ์ DTO๊ฐ ๋ณํ๋์ด์ผ ํ๋ค๋ฉด, Network Layer๋ถํฐ Presentation Layer๊น์ง ๋ง์ ๊ฐ์ฒด๋ค์ด DTO ํ๋์ ๋ง์ ์์กด ๊ด๊ณ๋ฅผ ๊ฐ์ง๊ฒ ๋์ด, ๊ฐ์ฒด ๊ฐ์ ์ ์ฐ์ฑ์ด ์ข์ง ๋ชปํ๋ค๊ณ ํ๋จํ์์ต๋๋ค.
๋ฐ๋ผ์ Network Layer์์ ์ฌ์ฉํ๋ DTO์ ๋ณ๊ฐ๋ก Presentation Layer์์ ์ฌ์ฉํ ๋ชจ๋ธ์ ์ถ๊ฐ๋ก ์ ์ํ์ฌ Layer๊ฐ์ ์์กด์ฑ์ ๋ฎ์ถ๊ฒ ๋์์ต๋๋ค.
AI ์ฑ๋ด ์ฑ [STEP 1] ๋ฒจ๋ก, ๋ฐค์ญ by bamsak ยท Pull Request #5 ยท tasty-code/ios-chat-bot
AI ์ฑ๋ด ์ฑ [STEP 2-1] ๋ฒจ๋ก, ๋ฐค์ญ by JinUng41 ยท Pull Request #9 ยท tasty-code/ios-chat-bot
AI ์ฑ๋ด ์ฑ [STEP 2-2] ๋ฒจ๋ก, ๋ฐค์ญ by JinUng41 ยท Pull Request #18 ยท tasty-code/ios-chat-bot
AI ์ฑ๋ด ์ฑ [STEP 3] ๋ฒจ๋ก, ๋ฐค์ญ by bamsak ยท Pull Request #20 ยท tasty-code/ios-chat-bot
AI ์ฑ๋ด ์ฑ [STEP 4] ๋ฒจ๋ก, ๋ฐค์ญ by JinUng41 ยท Pull Request #29 ยท tasty-code/ios-chat-bot