천원의 개발

Service Level Project 회고 본문

SeSAC🌱

Service Level Project 회고

천 원 2022. 12. 24. 02:37

안녕하세요! 이번 Service Level Project를 끝마친 회고를 한번 해보려고 합니다.

 

먼저 혼자서 경험하기 힘든 실제 업무 환경과 동일한 프로세스로 각종 협업툴과(Figma, Swagger , Confluence), 서비스 레벨의 API/기획 명세서, 디자인 리소스를 통해서 정말.. 정말.. 혼자서는 경험하기 힘든 값진 경험을 한 것 같습니다. 이렇게 소중한 경험을 위해서 많은 준비를 해주신 멘토님들에게 정말 무한한 감사를 드립니다🥲

 

 

협업 툴에 대한 경험

이번 프로젝트를 통해서 얻은 수익 중 큰 부분이라고 생각합니다. Figma를 통해서 어떤 방식으로 디자이너분과 소통해야 하는지에 대해 경험을 했고 각 디자인 소스의 사용법, 팀원들과의 협업 등의 실무에 갔을 때 큰 도움이 될 것 같습니다. Confluence의 기획 명세서를 통해서 기획에 맞는 앱을 개발하기 위하여 노력하였고 기획 명세서를 얼마나 꼼꼼하게 이해하고 파악해야 하는지 경험을 통해 깨달았습니다. 확실히.. 출시앱에서는 디자인, 기획 등 모든 부분을 담당하였지만, 이번 프로젝트는 온전히 개발에만 집중할 수 있었던 것 같습니다. 또한 서비스 레벨의 API를 통하여 기존의 공공데이터 API로는 경험하기 힘든 Server-Client 구조의 앱 개발을 통하여 Http Method(Get, Post, Put, Delete)등의 전반적인 이해를 할 수 있는 경험이였습니다. 또한 기존에는 Client적인 측면만 고려해서 개발하였다면 이번에는 Server적인 측면도 개발 시에 같이 고려해야 한다는 개념이 잡혔던 경험이었습니다. 이번에 앱을 개발하면서 중복으로 서버에 요청을 하는 경우가 있었고, Mapkit의 이동 시에 매번 서버에 요청하는 이런 부분이 얼마나 서버 부하와 비용적인 측면에서 중요한지 경험한 것 같습니다.

 

// 과도한 서버요청을 방지하기 위한 제스처 제한코드
func mapView(_ mapView: MKMapView, regionDidChangeAnimated animated: Bool) {
    print(#function)    
    requsetSerach(lat: String(mapView.region.center.latitude), long: String(mapView.region.center.longitude))

    mapView.isZoomEnabled = false
    mapView.isScrollEnabled = false
    mapView.isUserInteractionEnabled = false


    DispatchQueue.main.asyncAfter(deadline: .now() + 0.4, execute: {
        mapView.isZoomEnabled = true
        mapView.isScrollEnabled = true
        mapView.isUserInteractionEnabled = true
    })
}

 

 

 

 

RxSwift 

RxSwift를 학습하면서 처음으로 이렇게 규모 있는 프로젝트에 적용하여 보았습니다. 사용하면서 내가 적절하게 사용하는지에 대한 의문이 들었지만, 확실히 기존의 코드로 작성하는 것보다 편한 부분이 많았습니다. 기존에 코드 베이스로 버튼을 작성하게 되면 addtarget과 @objc를 통한 selector메소드를 작성해 주어야했지만 RxCocoa를 사용하여 간단하게 tap 오퍼레이터를 통하여 작성할 수 있어서 편하였습니다. 또한 tableView를 만들 때에도 기존에는 DataSource 프로토콜을 채택하는 방식으로 작성하였지만, Rx에서는 items를 통해서 간단하게 만들 수 있었던 것 같습니다. 여러 개의 Section이 필요한 경우 Rxdatasource는 조금 달랐지만.. 또한 Reload 데이터 없이 데이터의 변경에 의해서 자동으로 tableView가 갱신되는 점은 체감했던 Rx의 장점 중 큰 부분이었던 것 같습니다. 

 다양한 Operator를 학습하고 다른 분들의 사용한 코드들을 학습하여 다양한 디자인 패턴을 학습할 계획입니다.

 

 

 

 

MVVM

이번 프로젝트를 진행하면서 최대한 ViewController의 코드를 줄이기 위해서 ViewModel로 비지니스 로직을 분리하는 시도를 하였습니다. 그러나 RxSwift랑 함께 사용하면서 Bind내부의 코드가 길어지고.. CollectionView나 TableView작성 시 Cell에 대한 설정하는 코드 등으로 인하여 ViewController의 코드가 커지는.. 전체적으로 Rxswift와 MVVM에 패턴을 사용하는데 있어서 개념적인 측면은 이해하였지만 내가 적절히 사용하는지에 대한 의문이 컸던 것 같습니다. 이 프로젝트 이후로는 많은 분들의 코드를 공부하여서 그 의문을 해결해보고자 노력할 계획입니다. 각종 디자인 패턴에 대한 학습도 꼭 해보고 싶습니다.

 

 

 

 

 

API 서버통신

이번 프로젝트는 거의 모든 화면에서 서버 통신을 구현하였는데 기본적인 Flow가 Rechabillity를 통한 네트워크 연결상태를 진단 후 서버 통신 하여 받아온 Status 기반으로 분기 처리를 해주었습니다. 특히 401 코드로 FirebaseToken 갱신이 필요한 상태코드를 가장 많이 받았기에 Singleton 형태의 FirebaseToken 갱신 Manager를 만들어 주어서 중복적인 코드를 줄였습니다. 

 생각보다 서버 통신 시에 신경써야 하는 부분이 참 많았던 것 같습니다. 특히 스터디를 수락하는 부분에서 상대방이 이미 나에게 스터디를 요청한 상태에 대한 예외 처리를 하는 부분이나 수락, 요청 시에 이미 다른 사용자와 매칭된 상태등의 사용자의 상태에 따른 예외 처리를 하는 부분에서 정말 신경을 많이 써야했던 것 같습니다. 그만큼 테스트 해야 할 부분도 많았지만 혼자서는 해결하기 힘들었던 부분이 많아서 팀원들과 함께 할 수 있어서 좋았던 경험이었습니다.

 

 

 

 

 

Mapkit?

이번 프로젝트 기획서를 보면서 가장 걱정했던 부분이? MapKit의 사용이었던 것 같습니다. 기존 toy 프로젝트를 통해서 위치 권한 로직, Annotaion등에 대한 학습을 하였지만 Custom Annotaion 같이 조금 더 깊게 사용하게 되면 생각보다 어렵지 않을까 걱정하였는데.. 괜한 걱정이였습니다!! 확실히 뭔가 개발에 있어서 자기가 경험 안 해본 영역은 조금 대단해 보이는? 그런 경향이 있는 거 같습니다. 역시 하면 된다!! 그렇지만 위치 권한 코드도 오랜만에 보니 약간 낯설었습니다.. 역시 모든 공부에서는 학습도 중요하지만, 기존에 알고 있던 지식의 복습도 중요하다고 느꼈습니다.. 12월 7일 새싹 교육과정이 종료하였으니 처음 강의부터 정리했던 내용을 면접 준비와 함께 한 번 더 복습하는 중입니다!! 조금 더 기초를 탄탄히 해서 좋은 개발자로 성장할 수 있도록 화이팅!!!

 

 

 

 

마지막으로

에러 핸들링과 고민했던 점들은 대부분 이력서 프로젝트 설명에 작성하여서 이번 회고는 프로젝트를 하면서 느꼈던 점 위주로 작성해 보았습니다. 혹시 에러 핸들링이나 고민했던 점들이 궁금하시다면 이력서 노션을 통해서 한번 확인해보세요!! 

 혼자서 공부했다면 취업 전에는 절대 경험하지 못했을 소중한 경험을 하게 해주신 멘토님들에게 정말 다시 한번 감사드리고 사랑합니다❣️

이렇게 새싹 과정은 끝이 났지만 이제 개발자로서의 ㄱ자도 안 왔다는 휴님의 말씀을 가슴에 새기고 이번 프로젝트를 통해 느꼈던 저의 부족한 점을 보완해 가면서 취업 준비를 할 생각입니다!!!

'SeSAC🌱' 카테고리의 다른 글

🌱SeSAC iOS 2기 수료 후기  (11) 2023.06.01
앱 개발 출시 회고  (0) 2022.10.05