본문 바로가기

MOBILE/project 회고

UMC 3기 iOS 파트 활동 회고하기 (+데모데이 우수상까지 🏆)

2022.09~2023.02 UMC 3기 

 

목차

1. UMC iOS 파트장이 되다

2. iOS 세미나와 스터디 진행하기

3. 마스터 코스: 프로젝트 개발하기

4. 기술적 이슈들

5. 데모데이에 참여하다!

6. 책갈피를 소개합니다

7. 후기

 

1. UMC iOS 파트장이 되다

 원래 있던 IT 연합동아리인 MakeUs가 UMC와 CMC로 분리되었다. UMC는 대학 별로 스터디를 운영하고, 워크북이나 프로젝트는 대학교를 합쳐서 지부를 생성해서 관리하는 시스템이다. 내가 UMC를 하게 된 건 학교 별로 운영되기 때문에 개발자들과 좀 더 자주 만나서 스터디와 네트워킹을 진행할 수 있다는 장점 때문이었고 지원해서 경희대 UMC에서 iOS 파트장이 되었다. 사실 면접이 진짜 5분만에 끝났고 기술 질문이 하나도 없었기 때문에 나를 안뽑으려는 건가 싶긴 했다.. 그런데 경희대 서버 면접은 진짜 1시간씩 걸렸고 질문의 난이도도 꽤 어려웠다고 했으니 사실 이건 면접관에 따라 다른듯하다.

 

2.  iOS 세미나와 스터디 진행하기

 이번 UMC에서는 세미나라고 불리는 강의를 제공해줬다. (다음 기수에는 없다는 사실....~)

아무튼 세미나를 듣고 워크북이라고 부르는 과제를 작성해서 스터디 시간에 발표하고 질문하는 것이 학기 중에 진행하는 챌린저 코스였다.

이를 다 완료하고 나면 다른 학교 사람들과 함께 프로젝트를 진행하고 데모데이를 참가하는 것이 마스터 코스이다.

기본적으로 UMC는 디스코드+노션을 사용하기 때문에 디스코드에서 해당 주차 세미나 강의 링크를 받고 참가할 수 있었다.

그런데 사실 나는 이미 예전부터 iOS 개발을 해왔고 회사도 다녀온 경험이 있어서 그런지 너무 기본기만 알려주는게 아닌가.. 싶긴 했다. 그래서 세미나를 통해서 공부를 한다라기 보다는 그냥 알던걸 다시 듣는다 라는 마음으로 참여했다. 

10주차 워크북

세미나가 10주동안 진행되다 보니 워크북도 총 10개를 수행해야 한다. 워크북 과제는 그 주차 세미나에 나온 개념들을 정리하는 것과 실습 문제들이 있고 해결해야 하는 문제인 미션이 있다. 미션은 스탠다드 미션과 챌린지 미션 두가지로 나뉘는데, 스탠다드 미션은 기본 문제가 나오는 편이고 챌린지 미션 또한 어렵다기 보다 시간이 오래 걸리는 것들이 많았다(하기 귀찮아)

이렇게 학기 중에는 세미나와 스터디를 진행할 수 있어서 iOS 파트에 개발이 처음인 사람이 있었는데 이 분도 배울 수 있었던 것 같다.

그래도 나는 여전히 아예 개발을 못하는 사람은 연합 동아리에 들어오는 것보다 개인 공부를 더 하기를 추천한다.. 하다못해 swift 언어나 xcode 다루는 법은 알고 들어와야 스터디 시간에 좀 더 원활한 진행이 가능한데, 어떤 분께서는 swift 문법도 아예 모르셨기 때문에 그 분은 그냥 스터디 시간에 개인적으로 swift 언어 강의를 들으셨다. 그런데 내 생각에 이건 스터디와 연합 동아리의 취지와는 어긋난다고 생각해서 다음 기수 때는 기본적으로 개발을 해봤던 분들 위주로 뽑는 것이 맞다고 생각한다.

 

3. 마스터 코스: 프로젝트 개발하기 

우리 팀은 독서 커뮤니티 서비스를 개발했다. 사실 원래 취미인 독서를 아이템으로 커뮤니티 앱을 만든다는게 재밌을 거 같아서 지원하게 되었는데 우리 PM님께서 나를 먼저 뽑아주셔서 감사할 따름이었다!

서버 한분과 디자이너님은 부재중

회의는 게더타운을 주로 사용했는데 막판에 가서는 거의 저녁~새벽까지 개발 작업만 엄청 진행하는 곳이 되었다. ㅋㅋㅋ 재밌었다!!

매일 매일 해커톤 하는 기분이었다.

 

사실 프로젝트 자체의 난이도는 큰 편이 아니었지만 중간 중간 서버와 API 이슈 등이 여러번 생기는 바람에 막판에 거의 API를 25개를 연결해야 하는 일이 발생하게 되었다. 심지어 나는 여기에다가 애플 로그인까지 구현해야 하는 상황이 되어서 거의 밤을 매일 샌듯하다.

어질어질한 API 스프린트 이슈들..

그래도 이슈를 하나씩 해결해 나가는 건 재밌는 과정이었다. 중간 중간 발생한 문제들도 해결하면서 배울 수 있던 것도 많았다.

중간 중간 오프라인 회의도 진행했었는데 재밌었다.

 

4. 기술적 이슈들

프로젝트의 난이도는 높은 편이 아니었지만 그래도 가장 문제가 되었던 부분은 애플 로그인을 구현하는 부분이었다.

사실 서버를 cloudtype을 사용하면서 github repo가 public으로 필요한 상황이었는데 그러면 애플 로그인 key 파일을 올릴 수 없다는 문제가 발생하는 것이었다...

결국 이 때문에 진짜 프로젝트가 산으로 갈뻔 하다가 간신히 해결할 수 있었다.

그래서 iOS에서는 identity token을 우리쪽 서버로 보낸 후, apple server로 identity token으로 유효성 검증 요청을 보내기 보다 user identifier를 서버로 보내서 가입된 유저인지 아닌지 판별한 후 return 하는 방식으로 로그인을 구현할 수 밖에 없었다.

애초에 identity token과 authorization token은 유효 기간이 5분, 10분 정보 밖에 되지 않았다.

로그인 처리 로직

애플 로그인을 통해서 userIdentifier를 가져온 후, 이를 먼저 userdefaults에 저장한다.

다음 userIdentifier를 우리 쪽 서버로 보낸 후 이미 있는 유저라면 유저 id 값이 return으로 오게 되어 main화면 으로 진입하고,

아닌 경우는 없는 유저이기 때문에 회원 가입 view controller로 진입하도록 구현하였다.

하지만 이 또한 완벽한 구현이 아니라 출시 전에 로그인 쪽 로직은 싹 갈아 엎을 예정이다.

 

SceneDelegate에서는 자동 로그인을 위해 다음과 같이 분기 처리를 진행하였다.

userDefaults에 저장된 user identifier를 서버로 보내서 검증하는 부분인데 사실 마음에 들지 않는다.

아예 server 통신에서 504 404가 뜨는 경우에 대한 분기 처리를 안해서 서버가 오류나면 진입 자체가 불가능해진 것이다... 이 또한 나중에는 제대로 구현할 예정이다.

 

가장 고민이 많았던 점은 user class 설계를 single ton으로 구현한 부분이다.

사실 커뮤니티 앱의 특성상 user id를 통한 접근이 많기 때문에 반드시 single ton으로 구현되어야 한건 맞는데...

UserInfo class property가 과연 이게 최선이었을까? 여기에 왜 userImg가 UIImage로 들어가 있어야 하지? 그리고 userGoal 또한 사실은 그렇게 자주 불리는 정보는 아니기 때문에 userDefaults에서 직접 호출하는 것이 더 나은 방법이었을 것 같다.

그런데 변명을 하자면 사실 로그인 후 서버가 내려주는 값이 user id 하나뿐이라 나머지 정보는 그냥 local에서 가지고 있지 않으면 서버에서 가져올 방법이 없었다...

결국 login을 할때 userdefaults에 저장된 값을 가져오는 방법을 사용했고 user image는 

MyLibTab View Controller 즉 맨 처음으로 user image를 서버에서 가져올 수 있는 곳에서 url을 가져와서 저장하게 되었다. 즉

1. 서버에서 유저 이미지 Url 가져옴

2. view 에서 user image view 에다가 url로 이미지를 설정함

3. 설정한 UIImage 이미지를 다시 UserInfo single ton에 넣음

하.. 이건 정말 안좋은 설계인데 일단 급해서 이렇게 넣었다. 돌아가긴 한다.. 돌아가긴 하겠지.

어쨌든 로그인 쪽은 싹 다 갈아 엎을 예정이다.

그리고 프로젝트를 MVC 패턴으로 설계하다보니 아무래도 API 연결이 많은 곳은 코드가 지저분해지고 로직을 찾기가 어려웠다. VC와 view를 class로 분명하게 나눠서 이러한 문제를 해결하고자 했지만 그래도 API를 불러야 하는 곳이 많아서 이렇게 된 듯하다. 

 

예를 들자면 나의 서재 정보를 가져오는 MyLibTab View Controller에서는 기본적으로 서재 데이터를 가져와서 배열에 저장하게 된다.

그런데 여기서 63번 줄을 보면 모든 정보를 가져온 것이 아님에도 collection view를 reload 하고 있는데 사실 이건 너무 느려서 UX를 위해서 어쩔 수 없이 해둔 부분이다...

escaping closure인데 weak 선언 안해놨네

또한 Network class를 VC에서 접근하면서 UserInfo single ton class는 View에서 접근하는 등 설계가 완벽하지 않고 데이터 모델 접근이 여기저기 흩어지게 되었다. 왜 이렇게 된거지? ㅠㅠ

아무튼 출시 전까지 일단 무조건!! 설계 리팩토링을 진행할 생각이다..

RX 도입해서 MVVM으로 완벽하게 바꾸고 새 기능 붙여야겠다.

 

5. 데모데이에 참여하다!

아무튼 며칠 밤을 새다가 데모데이 당일날 새벽 5시까지도 작업하고 QC하고 간신히 testflight 최종 빌드를 하였다.

사실 데모데이 가는 버스에서도 코드 수정해서 빌드 다시 했다. 

 

그런데 데모데이 진짜 재밌었다. 이번에 포토월이랑 굿즈들이 아주 이쁘게 잘 뽑혀서 참여하는 재미가 있었다.

데모데이 입장

포토월이지만 사진 안찍음...ㅋ

 

우리 부스는 옆방에서 진행했는데 이건 좀 아쉬웠다. 사람이 많은 메인 룸이 아니라서 유동 인구가 적었기 때문이었다. 그래도 많은 사람들이 와서 재밌고 신기하다고 해줘서 뿌듯했다... 제가 새벽 5시까지 만들었다구요

선화님 배너 디자인

디자이너분도 처음 뵈었다! 항상 피그마에서 코멘트로만 소통하다가 실물을 실제로 뵙게 되었다.

선화님과 다른 부스도 구경을 가고 스티커도 받았다.

스티커를 다 채우면 무슨 또 다른 스티커를 주는데 (?) 아주.. 스티커 모을 만 했다.

근데 퇴장하기 전에 모두에게 나눠줘서 허무했음

 

아무튼 부스 방문객들에게 설명도 하고 베타 테스트 진행도 도와주면서 재밌게 진행했다.

스티커 많이 뽑아갔는데 다 팔림 ㅋㅋㅋ ㅠㅠ

사실 나보다는 윤겸님이랑 보민님이 너무 수고하셨다 진짜로 🥹 진짜 님들은 최고에요..

중간에 경희대 부리더님께 가서 수료증과 공로장도 받아왔다.

이걸 받으니 진짜 UMC가 끝난 기분이라서 아쉬웠다.

 

그리고 시상식이 있다길래 터덜터덜 가서 멍하니 듣고 있는데 갑자기?

우수상 ~ 책갈피 팀~~ 이래가지고 당황했다.

저희 팀이요?

완전히 지현우된 기분

별로 기대 안하고 있었는데 이렇게 상을 받게 되니까 정말 열심히 했다는 걸 보상 받는 느낌이라 굉장히 뿌듯했다.

사실 힘들어서 멍하니 있었는데 우리 팀이 불리니까 얼떨떨했다.

아무튼… 책갈피 팀이 우수상을 탔다!

이 판넬이 뭐라고 그간 노력이 헛되지 않았구나 싶은지..

사실 서버 두분께서 더 오시지 못한게 아쉬웠다. 그래도 다음에 만나서 또 회식하기로 했다.

책갈피 최고

다들 정말 고생 많으셨다. 그 수 많은 오류와 문제와 이슈들을 해결하고 어떻게해서든지 베타 테스트를 내고자 노력하는 모두가 멋있었다. 사실 그렇게까지 문제가 생기고 안되면 베타 테스트는 포기하자고 한명쯤은 말할 수도 있는데 모두가 끝의 끝까지 해내서 결국 결과로 보여준게 대단했다. 님들은 최고에요

 

6. 책갈피를 소개합니다

저희 책갈피 서비스를 소개합니다 우리 PM님이 참 일을 잘하심 😎

Github repo is here

 

GitHub - BookMark-Oneline/BookMark_iOS: 🏆UMC 3기 데모데이 우수상🏆 책갈피: 오늘 한 줄 iOS

🏆UMC 3기 데모데이 우수상🏆 책갈피: 오늘 한 줄 iOS. Contribute to BookMark-Oneline/BookMark_iOS development by creating an account on GitHub.

github.com

 

7.  후기

 

 이번 UMC 활동과 프로젝트는 사실 기술적인 성장은 그렇게 못이뤘음에도 불구하고 정말 기억에 남는 활동이 될 것 같다. 나에게 소프트 스킬이 왜 중요한지 깨닫게 해주는 계기가 되었다. 특히 우리팀 PM이 진짜 좋은 사람이고 또 같은 팀원들도 열정 넘치는 분들이라 4월 초 출시까지 달려보기로 했다!!

 마지막에 회식하는데 같은 iOS 팀원분들께서 자신들이 못해서 내가 너무 답답했을거 같다고 미안하다고 하셨는데 오히려 내가 팀원들에게 고마운 부분이 많았다. 사실 프로젝트 초반에는 팀원들이 MVC 패턴 설계나 git 문제 등등 실수를 많이 했는데 어떤 부분이 잘못된 것 같다고 알려주면 그 다음부터는 어떻게든 공부해서 싹 고쳐오신 걸 보면서 나도 저렇게 열린 자세로 조언이나 지적을 잘 받아들이고 발전하는 사람이 되어야 겠다고 생각했다. 나도 지금처럼은 잘하지 못하던 때가 있었는데 그때 생각도 나고... 진짜 많이 성장하신게 눈으로도 보여서 내가 다 뿌듯했다.

 사실 프로젝트는 나 혼자 하고 싶다고 해서 출시까지 할 수 있는게 아니기 때문에, 내가 다 하면 데모데이에는 완벽할 수 있을지 몰라도 출시는 못할것이다 분명히. 개발자들에게 커뮤니케이션 능력이 왜 중요할까 생각했는데 이런 소프트 스킬은 기본 역량인거 같다. 아무리 잘해도 소프트 스킬이 떨어지면 님은 나와 함께 갈 수 없습니다 라고 하는 기업이 왜 많은지 공감하게 되었다. 정말 중요한 것은 결국 내가 아는 것을 남에게 설명해주고 현재 문제에 대해서 같이 토론할 수 있는 기본 지식인 것 같다. 조수연아 오늘보다 내일 더 성장한 사람이 되기 위해  항상 본질을 잊지 말고 노력하는 사람이 되거라!

귀여운 3기 굿즈 키링

끝~!