---
# System prepended metadata

title: PR

---

# PR

안녕하세요 제이슨! (@ehgud0670) ✨
드디어 원격저장소와 동기화 시켜서 PR 보냅니다!

기다려주셔서 감사하고,
이번 스텝도 잘 부탁 드립니다!☺️

---

<br>

## 🥸 기능 설명

### 1. `MongoDB Atlas`와 연동
리모트 서버인 `MongoDB Atlas`와 동기화 되는 기능을 구현했습니다.

- 생성
<img src = "https://i.imgur.com/70G6zOn.gif" width=700>

- 수정
<img src = "https://i.imgur.com/I4I2lhx.gif" width=700>

- 삭제
<img src = "https://i.imgur.com/Ep60n4o.gif" width=700>

<br>

### 2. 로컬 디스크 캐시 구현
Realm을 디스크 캐시로, 기존에 `MainHomeViewModel`에서 사용한 배열을 메모리 캐시로 사용하였습니다.

```swift
private var todoList = [TaskModel]()
private var doingList = [TaskModel]()
private var doneList = [TaskModel]()
```

<br>

### 3. NetWork 모니터링 기능 구현
`NWPathMonitor`를 이용하여 사용자가 현재 네트워크와 연결이 되어 있는지 모니터링 해주는 `NetworkMonitor` 타입을 구현했습니다.
네트워크에 연결이 되어 있지 않을 시, `Alert`을 이용해 사용자에게 알려주는 기능도 추가했습니다.

<img src = "https://i.imgur.com/rjRsR5F.png" width=700>

<br>

### 4. Histroy 기능 구현
History 기능을 MVVM 구조로 만들고, `History` 디렉토리로 묶어주었습니다.

<img src = "https://i.imgur.com/TiNuGw3.png" width=700>


## ⭐️ 궁금한 점 및 조언 얻고 싶은 점


### 1. `TableView Reload`
```swift=
extension MainHomeViewController: SendDelegate {
    func sendData<T>(_ data: T) {
        // 불필요한 코드 생략
        let activity = viewModel.changeList(data: data)
        reloadTableView()
    }
}
```
- 저번 코멘트 중에, `chageList` 메소드를 호출해주면 알아서 뷰가 업데이팅 되도록 코드가 수정되어야 할 것 같다고 한 내용을 `NotificationCenter`를 이용하여 수정했습니다.
- `NotificationCenter` 는 1:N 관계 에서 많이 사용하는 방식으로 알고 있는데, 지금 제 코드에서는 뷰컨트롤러와 뷰모델이 1:1로 알림을 처리하고 있습니다.
- 그렇기 때문에 옳은 방향이라는 생각이 들지 않는데.. 더 좋은 방향성이 있는지 궁금합니다😢

