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

동기화 메모장 [STEP3] 호박, 아리 #90

Merged
merged 17 commits into from
Feb 23, 2022

Conversation

leeari95
Copy link
Member

@leeari95 leeari95 commented Feb 17, 2022

안녕하세요. 웨더! @SungPyo

호박 @hoBahk 아리 @leeari95 입니다!
STEP3 요구사항 모두 구현하여 PR 보내드립니다.

저번 온라인 리뷰때 뭔가 시야가 탁...트인... 그런 시원~~한 기분을 맛보았어요. 덕분에 많이 배워갑니다. 🤩
이번에도 부족한 점이나 놓친 부분이 있다면 한번 더 짚어주시면 감사하겠습니다. 🙇🏻‍♀️

고민했던 점

1. 업로드 시점

  • 여러 고민을 한 결과 키보드를 내릴 때 마다 업로드를 하도록 하여 업로드가 빈번하게 일어나지 않도록 하였고 의도치 않게 종료되어도 방어를 할 수 있도록 구현하였습니다.

2. 다운로드의 시점

  • 다운로드 시점은 처음에 사용자가 로그인을 성공하는 시점에 dropbox의 데이터를 다운로드 하여 보여주는 주도록 구현하길 원했습니다. 그래서 인증이 완료 되고 authResult(인증결과)가 success가 되면 download를 하도록 구현하였습니다.
  • 또한, 다운로드는 비동기로 진행이 되기 떄문에 DispatchGroup을 사용하여 다운로드가 완료되면 앱에 데이터를 뿌려주고 테이블뷰를 업데이트 하도록 구현하였습니다.

3. 다운로드가 진행중일 때 뷰의 상태

  • 다운로드를 요청하고 ActivityIndicator를 사용자에게 보여주도록 하고 다운로드가 모두 완료되면 ActivityIndicator는 종료하고 데이터를 사용자에게 보여주도록 구현하였습니다.

궁금했던 것 / 조언이 필요한 점

1. 업로드 시점이 괜찮은지

  • 현재 키보드를 내렸을 때 업로드를 하도록 구현했습니다. 너무 빈번하지도 않으면서 중간중간에 업로드를 할 수 있을 것 같아서... 이렇게 구현하였는데요.
  • 웨더가 생각하실때 더 좋은 업로드 시점이 있을까요? 🤔 현업에서의 보편적인 동기화 시점은 언제인지 궁금합니다!

2. 강제종료 되었을 때 대처할 수 있는 방법

  • 위의 질문과 연결되는 질문입니다. 키보드를 내릴 때 업로드를 하는 것은 강제종료 되었을 때를 완벽히 방어할 수는 없을 것 같습니다.
  • 그래서 강제종료 되었을 때 사용할 수 있는 라이프 사이클이나 유사한 기능을 하는 메서드 혹은 방법이 있을까요? 웨더의 도움이 필요합니다!🙏

이번 피드백도 잘 부탁드리겠습니다~ 😁🙏🏻

hoBahk and others added 12 commits February 17, 2022 10:25
- updateNoteData 메서드에서 메모데이터를 딕셔너리로 가공하여 updateNote의 인자로 넣어 호출하도록 수정
- AppDelegate 내부에 DropboxClient 인스턴스 초기화
- info.plist 순서, 들여쓰기 수정
- SceneDelegate 내부에 리디렉션 추가
- NotesViewController 내부에 로그인을 통해 인증을 시작할 수 있는 기능 추가
- authorize 메서드 DropBoxManager로 이동
- upload 기능 추가
- upload시 덮어쓰기가 가능하도록 메소드를 변경하여 리팩토링
- download 메소드 추가
- Dropbox Redirection 내부에 로그인 성공 시 download 하도록 구현
- download 메서드에 다운로드가 완료되었을때 tableview를 reload해주기 위해 파라미터 추가
- download 메서드에 다운로드가 완료되었는지 추적하기 위해 DispatchGroup 추가
- SceneDelegate 내부에 인증을 실패하거나 캔슬해도 ActivityIndicator가 멈추도록 로직 추가
- NotesViewController에 UIActivityIndicatorView를 추가
- UIActivityIndicatorView를 멈추게 하는 stopActivityIndicator 메소드 구현
- activityIndicator가 animating 일 때는 터치가 활성화 되지 않도록 구현
- dismissKeyboard()가 호출될 때 마다 Dropbox에 업로드할 수 있도록 구현
- Dropbox 로그인을 성공해서 다운로드가 완료되면 stopActivityIndicator() 메소드를 호출하도록 추가
- DropboxManager 타입 접근제어 설정
- 네이밍 수정 (scope -> scopes, url -> applicationSupportDirectoryURl, DropBoxManager -> DropboxManager)
- 줄바꿈 컨벤션 수정
- 불필요한 print문 제거
hoBahk and others added 2 commits February 21, 2022 17:30
- download 메서드 파라미터 수정 및 에러처리
- UIViewController extension의 showAlert 메서드 기본값 추가 및 overload 메서드 추가
- SceneDelegate의 scene(openURLContexts)메서드에서 authResult의 따른 오류처리 개선
- 에러처리에 따른 DropboxError 타입 생성
- download 메소드를 사용하는 곳에서 에러처리를 할 수 있도록 로직 구현
hoBahk and others added 3 commits February 22, 2022 10:36
- upload 메서드 호출할 때 반환타입인 Result타입에 대한 처리
- Note?를 반환하여 사용하고 있지 않아 불필요한 부분을 제거하여 개선
- setEditing 메서드에 있던 if문 내부 로직을 deleteCell 메서드로 이동
- DropboxError 타입 failureUpaload 케이스 추가하여 upload 에러시 처리하도록 수
showNoteDetailView()
}
}

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

View에서 바로 띄워주어야 하는 경우가 생길 수 있는데 그런 경우에 해당 코드를 사용하려면 어떻게 될까요? 인자로 받지 않아도 최 상위에 띄워줄 수 있도록 로딩 컨트롤러를 수정하는것도 방법인것 같아요.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UIApplication.shared.windows.first?.rootViewController

이런식으로 접근해서 최상위뷰를 찾고, 거기서 present해주는 방법을 찾았는데, 이게 적절한건지 잘 모르겠어요.

Comment on lines +51 to +53
if let error = error {
print(error)
hasErrorOccured = true
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

에러처리에 대해 질문 주셨는데, 드롭박스 내부 CallError Type에 대하여 정의가 다 되어 있고, 해당 case별로 모두 에러처리를 한다면 에러 처리에 대한 보일러플레이트 코드가 다수 여러군데 발생 될 것이라 말씀드렸었습니다.
해당 문제에 대해서 어떻게 처리하면 좋을지 한번 생각해봐 주세요!

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

네! 말씀 주신대로 보일러 플레이트 코드 발생도 그렇고...
지금 프로젝트에서는 일일히 에러처리를 해주지 않아도 괜찮겠다는 판단이 들어서 이 상태로 유지하기로 했습니다!

@SungPyo
Copy link

SungPyo commented Feb 23, 2022

안녕하세요. 웨더! @SungPyo

호박 @hoBahk 아리 @leeari95 입니다! STEP3 요구사항 모두 구현하여 PR 보내드립니다.

저번 온라인 리뷰때 뭔가 시야가 탁...트인... 그런 시원~~한 기분을 맛보았어요. 덕분에 많이 배워갑니다. 🤩 이번에도 부족한 점이나 놓친 부분이 있다면 한번 더 짚어주시면 감사하겠습니다. 🙇🏻‍♀️

고민했던 점

1. 업로드 시점

  • 여러 고민을 한 결과 키보드를 내릴 때 마다 업로드를 하도록 하여 업로드가 빈번하게 일어나지 않도록 하였고 의도치 않게 종료되어도 방어를 할 수 있도록 구현하였습니다.

2. 다운로드의 시점

  • 다운로드 시점은 처음에 사용자가 로그인을 성공하는 시점에 dropbox의 데이터를 다운로드 하여 보여주는 주도록 구현하길 원했습니다. 그래서 인증이 완료 되고 authResult(인증결과)가 success가 되면 download를 하도록 구현하였습니다.
  • 또한, 다운로드는 비동기로 진행이 되기 떄문에 DispatchGroup을 사용하여 다운로드가 완료되면 앱에 데이터를 뿌려주고 테이블뷰를 업데이트 하도록 구현하였습니다.

3. 다운로드가 진행중일 때 뷰의 상태

  • 다운로드를 요청하고 ActivityIndicator를 사용자에게 보여주도록 하고 다운로드가 모두 완료되면 ActivityIndicator는 종료하고 데이터를 사용자에게 보여주도록 구현하였습니다.

궁금했던 것 / 조언이 필요한 점

1. 업로드 시점이 괜찮은지

  • 현재 키보드를 내렸을 때 업로드를 하도록 구현했습니다. 너무 빈번하지도 않으면서 중간중간에 업로드를 할 수 있을 것 같아서... 이렇게 구현하였는데요.
  • 웨더가 생각하실때 더 좋은 업로드 시점이 있을까요? 🤔 현업에서의 보편적인 동기화 시점은 언제인지 궁금합니다!

2. 강제종료 되었을 때 대처할 수 있는 방법

  • 위의 질문과 연결되는 질문입니다. 키보드를 내릴 때 업로드를 하는 것은 강제종료 되었을 때를 완벽히 방어할 수는 없을 것 같습니다.
  • 그래서 강제종료 되었을 때 사용할 수 있는 라이프 사이클이나 유사한 기능을 하는 메서드 혹은 방법이 있을까요? 웨더의 도움이 필요합니다!🙏

이번 피드백도 잘 부탁드리겠습니다~ 😁🙏🏻

호박 아리 안녕하세요.

step3 까지 지나가다니 정말 열심히 하시네요 :)

기존에 view.isUserInteractionEnabled 를 이용한 터치 금지 대신 indicatorView가 포함된 ViewController로 만들어 보라고 공유드렸던 부분도 생각만큼은 아니지만 잘 적용하신 것 같네요!

그 외에 setEditing 내부 분리해야 할 로직 수정, Result 타입을 이용한 네트워크 통신과 불필요한 @discardableResult 제거 등 사전에 올려주신 PR에 대한 리뷰들을 모두 수정해 주셨네요!

Step4 에서는 서치바를 추가하신다고 하셨는데 기대해 볼게요 👍

@SungPyo SungPyo merged commit 6a2190d into yagom-academy:4_leeari95 Feb 23, 2022
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

Successfully merging this pull request may close these issues.

None yet

3 participants