11주차 iOS - 2021.10.31 ~ 2021.11.06

2022. 4. 26. 15:33오늘하루 개발 일지

 

ADD) 네트워크를 활용하는 Service들 추가


이번 주에는 네트워킹을 활용하는 서비스들을 제작했다. 이 서비스들을 각자의 뷰 모델에 주입하고 사용하는 방식을 택했다.

AuthService는 로그인 시 토큰을 가져와 저장하는 방식으로 사용하였고, 이 AuthService를 활용하여 header에 토큰을 넣어주는 플러그인 또한 제작하였다.

AuthService 말고도 DiaryService와 DiaryAPI라는 걸 제작하였는데, 이는 일기를 쓰고, 삭제하고, 검색하는 등 일기 앱이 로그인 이후 동작할 기능들을 모아놓았다. 이것들은 토큰으로 사용자를 구분 지은 후 사용하기 때문에 header에 토큰을 대신 넣어주는 플러그인 또한 네트워크를 생성할 때 플러그인을 추가해주었다.

 

UPDATE) Reactor들 업데이트


기존 아무런 동작도 하지 않던 Reactor들을 필요한 Service들을 주입받아 뷰에 맞는 작업들을 수행할 수 있도록 업데이트 해주었다. RxSwift를 통해 조금 더 간편하게 동기/비동기 코드를 작성할 수 있었고, 알아보기 편했다.

또한 단방향의 흐름으로 진행되는것도 상당히 마음에 들었다.

 

UPDATE) 다크모드 지원 추가


기존에 다크모드로의 변경은 지원하고 있었으나, 정작 색상 자체는 다크 모드를 지원하지 않기에 다크 모드용 색상을 업데이트해주었다. 기존에 있던 asset에서 color의 dark를 지정해주면 적용이 가능했기 때문에 크게 어렵지는 않았던 것 같다.

 

REFACTOR) 네트워킹 에러 핸들링


네트워크 통신과정이 항상 성공하는건 아니고, 에러가 났는데 왜 에러가 났는지 사용자에게 전달해주기 위해서 기존 코드의 리팩토링이 필요했다. 성공이든 실패든 일단 서버와의 통신이 성공하기만 하면 성공으로 처리한 뒤, ModelType을 이용해 서버에서 따로 넘어온 커스텀 코드를 분리하고(ModelType 프로토콜을 준수하는 경우 반드시 code라는 변수를 포함하도록 설정), 만약 코드가 에러코드일 경우 enum으로 선언한 NetworkResult의 error를 반환하고, 성공일 경우 success(T)를 반환하도록 하였다.

그래서 만약 error가 나올경우, error.message를 통해 Reactor에서 어떤 쪽에서 에러가 발생했는지 알 수 있도록 하였다.

 

ADD) SwiftMessages 추가


SwiftMessages는 안드로이드의 SnackBar 같은 개념이다. 서버통신이 성공하거나 실패할 경우 이를 유저가 UI에서 확인할 수 있도록 Reactor에서 SwiftMessages를 바로 띄울 수 있도록 코드를 작성했고, 사용자 경험을 개선할 수 있었다.

  • 기존의 시스템에서는 사용자가 로그인이 성공했는지 실패했는지 알 수 없었고, 로그만 찍혔다.