본문 바로가기
개린이 이야기

요리도감 프로젝트를 진행하면서 느낀점

by iOS 개린이 2022. 9. 19.

7월초부터 9월초까지 "요리도감" 이라는 요리 커뮤니티 앱을 개발해보았고, 진행하면서 배웠던 점, 아쉬웠던 점 그리고 느꼈던 감정 등에 대해서 기록을 하고자 한다.

 

1. 배웠던 점

 

1) 어떤 기능을 구현할 때  기능 실행이 안되는 등의 문제가 발생할 때 앱의 수명주기를 고려하는 것이 중요하다.

ex) 컬렉션뷰에 1번, 2번, 3번사진들이 나열되어 있다. 이 중 2번 사진을 선택했을 때 확대할 수 있는 detailview가 나오면서 내가 선택한 사진이 나와야 하는 기능을 구현할 때 scrollToItem이라는 메서드를 사용했다. 

문제는 해당 메서드를 viewWillApppear메서드 안에 넣었는데 작동이 되질 않았다.

문제 해결은 수명주기의 문제였구나를 깨닫고  viewDidAppear에 해당 메서드를 넣었더니 정상적으로 작동이 되었다.

 

2) for 문에서 실행문에 대한 index 파악하기

ex) 이미지를 firebase storage에 넣고 해당 url을 받아오는 기능에서 image를 여러 개 저장해야 할 때 for문을 이용했다.

문제는 url을 다운받는 핸들러가 비동기적으로 실행되고, 순서도 일정하게 저장되어야 하는데 이미지의 용량에 따라서 순서가 뒤바뀌는 것이었다.  

문제 해결은 for문의 index를 받아서 index에 맞게 url이 순서대로 배열에 저장되도록 만들었다.

 

3) 네트워킹으로 인한 비동기처리 응답완료 후 작업실행

이미지를 firebase storage에 저장시키고 그 url을 다운받아서 온 후, 그 url을 다시 firestore에 저장하는 방법이 필요했다.

문제는 이미지를 저장시키는 작업이 네트워킹 작업으로 비동기로 실행되는 점이었다.

이미지가 여러 장이라 for문을 돌려서 이미지를 한 장씩 저장해야 했는데, 모든 작업이 완료되고 url을 firestore에 넣는 함수를 실행하도록 하려고 많은 노력을 했다. 

@escaping도 사용해보고, 작업들을 동기적으로 만들어보는 방법 등등 많은 노력을 했는데 함수가 실행만을 동기적으로 할 뿐이었다.

문제해결은 completion handler에 for문이 다 끝날 때를 인지하게해서 for문을 모두 마쳤을 때 firestore에 저장하는 함수를 실행하도록 만들었다. 

여기서 rxSwift에 대해서 꼭 공부해야겠다는 다짐을 했다.(너무 중요)

 

4) 유저 차단기능을 firestore 필터링을 사용할 지, 로컬에서 필터링 할 수 있게 만들지에 대한 방법

문제는 유저를 차단했을 때 firestore로 

1. 키워드에 맞는 데이터 가져오기 2. 데이터 시간차순으로 가져오기 3. 차단 유저는 포함하지 않기 이렇게 필터링을 거치려고 했는데 firestore필터링 관한 문제가 발생했다. 

문제 해결책은 로컬에서 차단 유저를 포함하지 않게 만드는 방법이었다. 먼저 차단리스트를 가져와서 데이터를 화면에 표시할 때 차단리스트에 있는 사람정보가 포함되어 있으면 표시하지 않도록 분기시켰다.

 

5) info 리스트에 추가한 권한 설정이 사라져있지만, 앱에서는 작동이 되었을 때 권한 수정하는 방법

문제는 갤러리에 접근할 수 있는 권한에 권한허용에 대한 자세한 설명이 있지 않아서 수정이 필요했다. 하지만 info에 들어가봐도 내가 이전에 추가해둔 권한설정이 사라져있었고, 앱에서는 계속 작동이 되고있었다.

문제 해결은 전체 검색란에 info 권한 허용에 대해서 검색하니까 다른 곳에 저장되어 있는 info 권한설정을 확인, 수정할 수 있었다.   

 

6)  단지 구글에 검색해서 나오는 코드를 붙여넣기 할 것이 아니라, 해당 기능에 대한 원리를 깨우치는 것이 중요하다. 수명주기나, 기능의 원리를 정확하게 알고 있어야 문제가 생겼을 때 문제 해결에 대해 삽질하는 시간이 짧아진다. 즉, 문제해결능력을 월등하게 증가시킬 수 있다.

 

2. 아쉬웠던 점

 

1) 하루하루 배웠던 새로운 기술이나, 시행착오를 겪었던 점에 대해서 기술블로그에 바로 적어가면서 프로젝트를 진행했어야 했다. 그래야 지금처럼 가지고 있는 기억들을 끄집어 내어 기록하는 것보다는 더 많은 세부적인 문제들을 기록할 수 있었을 텐데..

 

2) 프로젝트에 괜히 조급함을 가지고 임했던 점이 아쉽다. 어떻게 하면 유저에게 편한 기능을 제공할 수 있을까, 어떻게 하면 좀 더 좋은 코드를 짤 수 있을까 에 대해서 고민하는 시간들을 더 가졌으면 하는 생각이든다. (물론 코드를 리팩토링해서 업데이트 버전을 올리면 되지만!)  

 

3. 느낀 점

 

1) 처음 앱개발을 하다보니 "내가 잘 할수 있을까?" , "내가 이 기능을 구현할 수 있을까? 등에 대한 두려움이 컸다. 하지만 기능들을 하나씩 배워가고, 적용해가다보니 두려움이 용기로 변해갔고, 내가 이뤄냈던 과정들에 뿌듯함을 느꼈다.

 

2) 앱 개발 공부를 인강을 듣거나, 구글에 검색하는 등 독학으로 공부하다보니 지금 내 수준이 어느정도인지, 내가 가는 길이 맞는 길인지 모르겠다. 그래서 개발하는 모임, 회사 등에 얼른 들어가서 내 실력을 방대하게 키우고 싶다는 생각이 들었다.