Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

pr #5

Open
happykwon opened this issue Mar 28, 2024 · 0 comments
Open

pr #5

happykwon opened this issue Mar 28, 2024 · 0 comments

Comments

@happykwon
Copy link
Owner

happykwon commented Mar 28, 2024

안녕하세요 그린 @GREENOVER , 만나서 반갑습니다! 😆
박스오피스 앱 STEP1 PR 송부 드립니다.

조언 및 미흡한 부분에 대한 건의 언제나 환영하며,
솔직하게 리뷰를 해주시면 어떤 부분이든 달게 고찰해보고 반영하려고 노력해보겠습니다.
PR이 읽기 어렵거나 보충 설명이 필요한 부분도 언제든 DM 부탁드립니다.
감사합니다! 🔥

🔍 What is this PR?

STEP1 , STPE2

구현 요구사항

  • Request 및 Response를 위한 데이터 모델 설계
  • CodingKeys 프로토콜의 활용
  • 네트워크 통신을 담당할 타입을 설계하고 구현합니다.
  • 메세지를 보내고, 그에 대한 응답 메세지를 받아서 출력하기
  • API에 Request할 때 파라미터 중 stream을 false로 하여 통신하도록 구현해봅니다.

챗봇을 위한 모델을 구현했습니다.
.

📝 PR Point

Model 설계

저희가 구현하고 자했던 DataFlow는 아래와 같습니다.
[사용자가 채팅 입력 -> Request -> OpenAI -> 데이터 가공 -> UI 화면에 보여짐] 반복
실시간 채팅이고 API문서를 읽어보니 이전 대화 내용의 모든 부분을 계속 같이 보내줘하기 하기 때문에 첫 Request부터 모든 메세지 내용의 데이터를
관리해줄 객체에 대한 필요성을 느꼈습니다.
MVVM 패턴에 데이터를 관리하는Repository객체를 추가해서 크게 / 데이터 관리 / 통신 / View에 전달 / 이렇게 세 부분으로 정리했습니다.

구현사항

Repository

MessageRepository는 대화의 메시지들을 관리합니다.

Model

OpenAICheatResponseDTO: OpenAI API의 응답 DTO 모델입니다.
OpenAICheatResponseDTO: API 응답의 최상위 구조를 나타냅니다. 내부에는 응답과 관련된 메타데이터와 함께 Choice 배열이 포함됩니다.
RequestMessageModel: 요청을 보낼때 데이터 형태를 정의합니다.
ResponseMessageModel: OpenAICheatResponseDTO로 받은 데이터를 변환합니다.

ViewModel

ChatViewModel: 뷰와 모델 사이의 상호작용을 처리합니다. 사용자의 메시지를 처리하고, API 서비스를 통해 메시지를 전송한 후 응답을 관리합니다.

Network

OpenAIService: API통신을 담당합니다.
OpenAIEndPoint: API 요청을 위한 엔드포인트와 HTTP 메서드를 정의합니다.

❓질문

1. DataFlow

지금 프로젝트처럼 요청보낸 전체의 사항을 관리할 필요가 있을 때 현업에서는 보통 어떤식으로 처리할 수 있는지 궁금합니다.

2. MVVM 모델 설계

MVVM 모델 설계는 처음이라서 모두가 알고 있는 설계로 나올지는 잘 모르겠습니다. 저희가 생각한 각 파트별 역할은 다음과 같습니다.
Model : 데이터 모델 그 자체
View : ViewModel에서 데이터를 받아 UI를 그리는 역할
ViewModel: Model에서 데이터를 받아 바인딩 및 관리하는 역할
ViewController : ... 어떤역을 하는지 감이 잘 오지 않습니다..
블로그들을 보면 MVC 모델의 ViewController에서 비즈니스 모델을 viewModel에 주고 난 형태라고 하는데 .. 이게 무엇을 뜻하는 건가요?

3. 폴더링

이전 프로젝트에서도 폴더링에 있어 신경을 썼지만 파일이 많아지니 찾기가 힘들고 헷갈렸습니다.
혹시 그린만의 폴더링 팁이나 노하우 혹은 참고할만한 블로그나 자료등이 있다면 부탁드립니다 !

4. combine 사용 시기

UIKit에서 combine을 사용하는 대표적인 경우는 API통신을 할 때라고 알고있습니다.
통신이 아닌 다른 부분에서도 combine을 사용하면 좋은 경우가 있는지 궁금합니다.
또 UIKit에서는 did set / wil set / notification 변화를 알려주고 감지 할 수 있는 reactive한 경험을 제공해 줄 수 있는 요소들이 많은데
채용 공고를 보면 combine 혹은 RX의 경험을 요구하는 경우가 많이 있는데, 왜 이런 요구사항을 중요하게 써 놓는지 combine을 실제로 현업에서 많이 사용 하는지 궁금합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant