Skip to content

bamsak/ios-chat-bot

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

63 Commits
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

GPT ChatBot Project

๐Ÿ“‹ย ๊ฐœ์š”

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 ์ €์žฅ ์ตœ๊ทผ ๋Œ€ํ™”์ˆœ ์ฑ„ํŒ…๋ฐฉ ์‚ญ์ œ
์ฑ„ํŒ…๋ฐฉ ์ƒ์„ฑ CoreData แ„Œแ…ฅแ„Œแ…กแ†ผ ์ตœ๊ทผ ๋Œ€ํ™”์ˆœ แ„‰แ…กแ†จแ„Œแ…ฆแ„’แ…ฎแ„Œแ…ขแ„‰แ…ตแ†ฏแ„’แ…ขแ†ผ

๐Ÿงย ๊ฐ์ฒด์˜ ์—ญํ• 

View & ViewModel


RoomList

  • GPTRoomListViewController
    • final class
    • ์‚ฌ์šฉ์ž์˜ ์ฑ„ํŒ… ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ณด์—ฌ์ฃผ๋ฉฐ, ์ƒˆ๋กœ์šด ์ฑ„ํŒ…์ด๋‚˜ ๊ธฐ์กด ์ฑ„ํŒ…๋ฐฉ์œผ๋กœ navigationController๋ฅผ ํ†ตํ•ด ์ž…์žฅ
  • GPTRoomListViewModel
    • final class
    • dataHandler๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•˜์—ฌ Coredata์—์„œ ๊บผ๋‚ด์˜จ ๋ฐ์ดํ„ฐ๋ฅผ View์— ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• 

Chat

  • GPTChatViewController
    • final class
    • ์‚ฌ์šฉ์ž์˜ GPT์™€์˜ ์ฑ„ํŒ…์„ ๋ณด์—ฌ์ฃผ๋Š” View
    • ModernCellConfiguration๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž…๋ ฅ๋ฐ›์€ ๋ฉ”์„ธ์ง€๋ฅผ Collection View์— ๋ณด์—ฌ์คŒ.
  • GPTChatViewModel
    • final class
    • serviceProvider๋ฐ dataHandler์™€ ํ˜‘๋ ฅํ•˜์—ฌ View์— ๋ณด์—ฌ์งˆ message๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๊ณตํ•˜๊ณ , CoreData์— ์ €์žฅ.

Utilities


Network

  • NetworkManager
    • final class
    • URLRequest๋ฅผ ํ†ตํ•ด Dataํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋ฉฐ, ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ํ•ด์ฃผ๋Š” ๊ฐ์ฒด
  • ServiceProvidable
    • protocol
    • APIEndPoint๋ฅผ ์ž…๋ ฅ๋ฐ›์•„ API ํ†ต์‹ ์„ ํ•˜๋ฉฐ, ๊ฒฐ๊ณผ์ธ Decodable์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ์ •์˜
  • ServieceProvider
    • final class
    • ServiceProvidable ๊ตฌ์ฒด ๊ตฌํ˜„ํƒ€์ž….
    • NetworkManager์™€, DataEncodable, DataDecodable์„ ์ฑ„ํƒํ•œ ๊ฐ์ฒด์™€ ํ˜‘๋ ฅํ•˜์—ฌ, APIEndPoint๋ฅผ ๋ฐ›์•„ ์•ฑ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ๋  ๋ชจ๋ธ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ญํ• 

CoreData (CoreDataManager, DataHandler)

  • CoreDataManager
    • final class
    • NSPersistentContainer๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Singleton ๊ฐ์ฒด
  • ChatRoomDataHandler & MessageDataHandler
    • final class
    • CoreDataManager๋ฅผ ์ฃผ์ž…๋ฐ›๊ณ , context์— ์ฑ„ํŒ…๋ฐฉ ๋˜๋Š” ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€๋ฅผ ์ƒ์„ฑ, ์‚ญ์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฐ์ฒด

Models


API

  • APIEndPoint
    • protocol
    • API ํ†ต์‹ ์— ํ•„์š”ํ•œ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ •์˜
    • URLRequest ๋ฐ URL๋กœ ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•จ.
  • GPTEndPoint
    • enum, APIEndPoint
    • OpenAI API์˜ ๋‚ด์šฉ์„ ๊ฐ€์ง€๋Š” ๋ชจ๋ธ

NetworkingDTO

  • GPTRequestDTO & GPTResponseDTO
    • struct, Encodable / Decodable
    • ๊ฐ๊ฐ API ํ†ต์‹ ์— Request์™€ Response์— ์“ฐ์ด๋Š” ๋ชจ๋ธ
    • ๊ฐ๊ฐ์˜ ์ธ์ฝ”๋”ฉ, ๋””์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์ง์ ‘ ์ •์˜
  • GPTMessageDTO
    • struct, Codable
    • API ํ†ต์‹ ์—์„œ Request์™€ Response ๋ชจ๋‘ ํ•„์š”ํ•œ ํ•˜์œ„ ๋ชจ๋ธ
    • ์‹ค์งˆ์  ๋ฐ์ดํ„ฐ์ธ ๋ฉ”์„ธ์ง€์— ํ•ด๋‹นํ•จ.

Presentation

  • ChatRoom
    • struct
    • CoreData๋กœ๋ถ€ํ„ฐ ์–ป์€ ๋ฐ์ดํ„ฐ(์ฑ„ํŒ…๋ฐฉ ๋ฆฌ์ŠคํŠธ)๋ฅผ ๋ทฐ์— ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ
  • ChatMessage
    • struct
    • CoreData, URLSession์œผ๋กœ๋ถ€ํ„ฐ ์–ป์€ ๋ฐ์ดํ„ฐ(์ฑ„ํŒ… ๋ฉ”์„ธ์ง€)๋ฅผ ๋ทฐ์— ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ

โญย ์ฃผ์š” ๊ตฌํ˜„ ์‚ฌํ•ญ

MVVM

  • ํด๋กœ์ €์™€ didSet์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ

Model Design

  • API ํ†ต์‹ ์˜ Request์™€ Response๋ฅผ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์„ค๊ณ„
  • CodingKeys ํ”„๋กœํ† ์ฝœ์˜ ํ™œ์šฉ

URLSession

  • Swift Concurrency์„ ์ด์šฉํ•œ API ํ†ต์‹ 
  • API ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ์œ„ํ•œ ํ”„๋กœํ† ์ฝœ ์ถ”์ƒํ™” ๋ฐ ํ•ด๋‹น ํ”„๋กœํ† ์ฝœ์„ ์ฑ„ํƒํ•˜๋Š” enum ์„ค๊ณ„

CollectionView

  • Modern Cell Configuration (UIContentConfiguration)
  • ํ…Œ์ด๋ธ”๋ทฐ์˜ ๊ธฐ๋Šฅ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ListCell์„ ์ด์šฉํ•œ ์…€ ์‚ญ์ œ ๊ตฌํ˜„
  • CellRegistration & DiffableDataSource

Core Graphics & Animation

  • CALayer + CAKeyframeAnimation์„ ์ด์šฉํ•œ ๋ฉ”์„ธ์ง€ ๋กœ๋”ฉ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„
  • CAShapeLayer + UIBezierPath๋ฅผ ์ด์šฉํ•œ ๋งํ’์„  ๊ตฌํ˜„

CoreData

  • NSPersistentContainer์„ ๊ด€๋ฆฌํ•˜๋Š” ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด
  • ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•œ ์ฑ„ํŒ…๋ฐฉ ๋ฆฌ์ŠคํŠธ์™€ ์ฑ„ํŒ…์„ ์ €์žฅ, ์‚ญ์ œ ๊ตฌํ˜„

๐ŸŒ ย Trouble Shooting

๋ฒ”์šฉ์ ์ธ ServiceProvider๋ฅผ ์œ„ํ•œ APIEndPoint

์ด์ „ ๋ฐฉ์‹์€ ServiceProvider๋ฅผ OpenAI API์— ์ข…์†๋œ ServiceProvider์˜€์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ์ฝœ๋กœ ์ถ”์ƒํ™”๊ฐ€ ๋˜์–ด ์žˆ๋‹ค๊ณ  ํ•˜์ง€๋งŒ, ๋งŒ์•ฝ ์•ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” API๊ฐ€ ๋Š˜์–ด๋‚จ์— ๋”ฐ๋ผ ServiceProvider๋ฅผ ์ƒˆ๋กœ ๊ตฌํ˜„ ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ServiceProvider๊ฐ€ Generalํ•œ ์ž‘์—…์„ ํ•˜๋Š” ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์กด์— excute๋ฉ”์†Œ๋“œ์—์„œ requestDTOํƒ€์ž…์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›๋Š” ๋Œ€์‹ , API ํ†ต์‹ ์— ํ•„์š”ํ•œ EndPoint๋ฅผ APIEndPoint ํ”„๋กœํ† ์ฝœ๋กœ ์ถ”์ƒํ™”ํ•˜๋Š” ์ž‘์—…์„ ๊ฑฐ์ณค์Šต๋‹ˆ๋‹ค.

ServiceProvider์˜ excute ๋ฉ”์†Œ๋“œ๋ฅผ Generic๋ฉ”์†Œ๋“œ๋กœ ๊ตฌํ˜„ํ•˜์—ฌ, APIEndPoint์˜ ๊ตฌํ˜„์ฒด๋ฅผ ๋ฐ›๊ณ  Decodableํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์„œ, ServiceProvider๊ฐ€ ์–ด๋–ค APIEndPoint์—๋„ ๋Œ€์‘์ด ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ ํ†ต์‹ ์„ ์œ„ํ•œ DTO์™€ Diffable DataSource๋ฅผ ํ†ตํ•ด View์— ๋ณด์—ฌ์งˆ ๋ชจ๋ธ ๋ถ„๋ฆฌ

๊ฐœ๋ฐœ ์ค‘๋ฐ˜๊นŒ์ง€ ์ดˆ๊ธฐ API ํ†ต์‹ ์„ ์œ„ํ•ด Encodable, Decodable์„ ์œ„ํ•œ DTO ๋ชจ๋ธ์„ ์ •์˜ํ•˜๊ณ  ํ•ด๋‹น ๋ชจ๋ธ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋ทฐ์— ๋ณด์—ฌ์ง€๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. API ๋ฌธ์„œ์—์„œ ์š”๊ตฌํ•˜๋Š” ๋‚ด์šฉ ์ด์™ธ์— DiffableDataSource๋ฅผ ์œ„ํ•ด์„œ UUID๋ฅผ ์ถ”๊ฐ€๋กœ ๊ฐ€์ง€๊ฒŒ ํ•ด์•ผ ํ–ˆ๊ณ , DTO ๋ชจ๋ธ์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฒŒ๋‹ค๊ฐ€ NSSet์œผ๋กœ ์ €์žฅ๋˜๋Š” CoreData์˜ ํŠน์„ฑ์„ ์œ„ํ•ด ๋ฉ”์„ธ์ง€์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ณ ์ž ์ถ”๊ฐ€๋กœ Date๋ฅผ ๊ฐ€์ง€๋„๋ก ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋Ÿฌํ•œ ๋ชจ๋ธ ๊ตฌํ˜„ ๋ฐฉ์‹์— ์˜๊ตฌ์‹ฌ์„ ๋Š๋ผ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ด ๊ณ ๋„ํ™”๋จ์— ๋”ฐ๋ผ ์ถ”๊ฐ€์ ์œผ๋กœ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ์— DTO๊ฐ€ ๋ณ€ํ™”๋˜์–ด์•ผ ํ•œ๋‹ค๋ฉด, Network Layer๋ถ€ํ„ฐ Presentation Layer๊นŒ์ง€ ๋งŽ์€ ๊ฐ์ฒด๋“ค์ด DTO ํ•˜๋‚˜์— ๋งŽ์€ ์˜์กด ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์–ด, ๊ฐ์ฒด ๊ฐ„์˜ ์œ ์—ฐ์„ฑ์ด ์ข‹์ง€ ๋ชปํ•˜๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Network Layer์—์„œ ์‚ฌ์šฉํ•˜๋Š” DTO์™€ ๋ณ„๊ฐœ๋กœ Presentation Layer์—์„œ ์‚ฌ์šฉํ•  ๋ชจ๋ธ์„ ์ถ”๊ฐ€๋กœ ์ •์˜ํ•˜์—ฌ Layer๊ฐ„์— ์˜์กด์„ฑ์„ ๋‚ฎ์ถ”๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿงย ์ง€๋‚œ PR ๊ธฐ๋ก๋“ค

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages

  • Swift 100.0%