<aside> 🔨 SK E&S 의 콜라보 제안 [팀 구성] 7인 (Server 2, Android 2, iOS 2, Designer 1)
</aside>
[2020. 05 ~ 2021. 05 예정]
SK E&S X 찰랑말랑 콜라보 기능 추가 개발 및 사내 배포 (배포 완료)추가 개발 내용
Appstore 배포 방식 이외에 가능한 배포 방법
TableViewCell 이 reuse 되기에 발생하는 문제 해결
<aside> 💡 1. 이전 상태를 저장하지 못하는 문제 → model 에 상태를 저장하는 변수를 추가
이전 상태가 reuse 된 cell 에 불러와지는 문제 → prepareForReuse 를 통한 상태 초기화
모든 항목이 check 상태인지 확인하는 문제 → handler 를 통한 btn Action이 감지될 때 마다 모든 cell 의 check 여부를 확인. (로직 연구 더 해봐야 함)
</aside>
Network 로직의 캡슐화
<aside> 💡 WishBall 개발을 진행하면서 네트워킹 로직의 캡슐화에 대한 부분을 피드백을 받았었다. 이를 참고하여 이번에 추가 기능 개발을 하면서 피드백을 반영하여 접목 해 보았고, 코드의 보안 및 간결성, 유용성이 훨씬 좋아짐을 느꼈다. 먼저 URLRequest를 구성하기 위한 기본 코드들을 networkConfig 라는 메소드로 묶어 반복되는 코드들을 줄였고, 또한 StatusCode별로 return 타입을 결정하는 switch 코드도 returnState 라는 메소드로 묶어 간결하게 표현하였다. 다만 WishBall 에서 작성된 코드와 같이 networking에 관한 전체 코드를 묶은게 아닌 URLRequest에 한해 묶은 것이므로 여전히 중복되는 코드들이 발생한다는 한계점이 있었다. 해당 부분은 더 참고하여 수정하는 것이 바람직하다고 생각한다.
</aside>
class CLMLNetwork {
/// 네트워킹에 필요한 URLRequest 기본 config를 구성하여 반환합니다. 실패 시 nil을 반환합니다
private func networkConfig(APIPath: APIPath, httpMethod: httpMethod) -> URLRequest? {
let base = ChalangMalangAPI.ServerAddress.rawValue + APIPath.rawValue
guard let url = URL(string: base)else {return nil}
var requestURL = URLRequest(url: url)
requestURL.httpMethod = httpMethod.rawValue
requestURL.setValue("application/json", forHTTPHeaderField: "Content-Type")
requestURL.setValue(UserDefaults.standard.string(forKey: "userObjectID"), forHTTPHeaderField: "sk-user-id")
return requestURL
}
/// statusCode별로 리턴 타입을 반환합니다
private func returnState(statusCode: Int) -> StatusCode {
switch statusCode {
case 200...299:
return .success
case 400...499:
return .fail
default:
return .serverError
}
}
}
<aside> 💡 기존 찰랑말랑이 일반적인 프로젝트였다면 해당 프로젝트는 기업과 함께 함에 있어 소통하는 방법을 많이 배우게 됨. 또한 사내 사용을 위한 배포를 해야 했는데 iOS에 한정해 이에 대한 전반적인 작업을 위임받음. 이 때, QA 기간을 처음 겪어보았는데 Trello를 사용하며 현재 개발 진행 상황등을 공유함. 개발 중에는 각각의 기능들을 확인 후 develop 브랜치에 merge, QA 기간 하루 전 체크리스트를 만들고 미리 검수를 진행 후 당일날 담당자와의 미팅에서 검수 후 릴리즈. 이후 핫픽스가 발생했을 시, hotfix 브랜치를 통한 빠른 피드백 후 릴리즈를 함으로써 정상적인 운행을 할 수 있었다. 특히 가장 어려웠던 점은 TableView를 사용하면서 각각의 cell에 RadioButton을 구현해야 했었는데 필수로 체크해야 하는 필드가 있었고, 선택사항인 필드가 있었다. RadioButton을 직접 UIButton을 활용해 만드는건 어렵지 않았으나, 각각의 필드에 대한 체크 방법 및 각각의 필드의 값들이 Bool, Int, String으로 각기 다른 타입이어서 해당 부분들을 하나의 model로 묶어서 post 요청을 보내야 하는 로직에서 꽤나 힘들었다. 해당 부분들에는 여전히 레거시 코드가 많이 남아있어 추후에 다시 로직들을 완벽하게 이해한 후 리팩토링을 해야겠다는 생각을 한다.
</aside>