-
첫 앱을 출시해보고 느낀 점기타/느낀점 | 회고 2021. 12. 14. 00:04
안녕하세요. miniOS입니다!
21년 10월 초, 처음으로 iOS 개발을 접했습니다.
그 뒤로 SeSAC이라는 교육기관을 통해서 계속해서 iOS 개발을 공부해왔습니다.
그렇게 입문한 지 1개월 반쯤 되었을 때, 개인 앱 출시 프로젝트를 진행했습니다.
지금까지 한번도 무언가를 온전히 만들어본 적이 없이, PS 문제를 풀어왔고, 문법을 배워왔고, cs를 독학해왔습니다.
20년 10월 전역한 뒤로 꾸준히 스스로 개발에 대한 공부를 해왔기 때문에 잘하고 있다고 생각했습니다.
하지만 이번 개인 프로젝트를 진행하고 나서 지금까지 느낄 수 없었던 새롭고 많은 부족한 점들을 발견할 수 있었습니다.
부족한 점
1. 기획이 8할이다.
출시 프로젝트를 준비할 당시, 멘토님께서 강조한 말이 있습니다.
"자신은 앱을 만들 때 기획에 절반의 시간을 투자하는데 그것도 부족하다고 생각한다. 개발 공수를 완벽하게 쓰려고 노력해보아라."
처음에는 그저 간단한 앱이고 누군가와 협업하는 것이 아닌 내 머릿속에 모든것이 들어있으니 어떻게든 대강 구조를 만들고 머릿속에 있는 대로 구현만 하면 될 것이라고 생각했습니다. 그렇기에 개발 공수에 들어갈 예상 시간들도 대강 잡았고 세부 계획 또한 대강 만들었습니다.
그러고 첫 단계인 앱 디자인을 시작했습니다. 처음 디자인 할 때에는 이렇게 만들겠지 하고 수월하게 넘어갔습니다.
하지만 코드로 구현을 시작하고 나니, 계속해서 기획하지 못했던 부분들이 보이며 디자인을 수 차례 수정하기에 이르렀습니다.
앱을 완성한 지금 되돌아 보면 디자인을 수정한 시간만 해도 엄청났다는 것을 깨달았습니다.
디자인뿐만이 아니라 앱의 구조 또한 수 차례 수정을 거쳤습니다.
API를 미리 찾아놓고 request도 보내봤으니 다 준비되었다고 생각했지만.
직접 구현하다보니 여러 가지 API Response를 디코딩하기 위한 객채들이 생겨났고, 너무 복잡해졌습니다.
그렇게 해서 모든 공통적인 Attribute를 포함하는 최상위 protocol을 만들어 전체적인 리펙토링을 진행했습니다.
API Request객체들은 앱에서 핵심적인 역할을 했기 때문에, 모든 곳에 있는 객체들을 대체하고 리펙토링을 적용하는데 엄청난 시간이 들었습니다.
지금 와서 공부하다보니 이것은 DI(Dependency Injection)이라고 불리는 디자인 패턴이었습니다.
만약 조금 더 꼼꼼하게 기획을 했더라면, 위와 같은 부분들에서 시간을 매우 많이 단축할 수 있었을 것이라고 생각합니다.
이미 출시까지 완료했지만, 다시 한번 이 어플을 기획하고 설계해서 놓친 부분들을 학습하고 개선해 나갈 생각입니다.
2. 숲을 보지 못한다.
위에 기술한 DI와 더불어서 여러 가지 부분에서 숲을 보지 못했기 때문에 구조가 점점 복잡해졌습니다.
예를 들어서, 하나의 Scene에 4개의 핵심적인 기능을 하는 View가 들어가야 하기 때문에, VC(View Controller)로 모듈화 해서 구현하고자 했습니다.
모듈화를 하고자 하는 기획은 재사용성이나 독립성에서 굉장히 좋은 시도라고 생각합니다.
하지만 체계적이지 못한 모듈화로 인해서 모듈 간의 의존도가 너무 커졌고, 모듈간의 통신을 protocol delegate로만 처리하려다 보니 너무나 많은 protocol이 생겨나게 되어, 결국 모듈화의 장점은 전혀 살리지 못한 구조가 되었습니다.지금까지
구현
하는 것에 대한 학습만을 진행했기 때문에 당연히 부족할 수밖에 없다고 생각하고,
앞으로 조금 크게 보고 아키텍처에 대한 학습도 꾸준히 진행하면서 어플을 업데이트하는 방식으로 극복해야겠다고 생각했습니다.3. UX를 고려한 설계능력이 부족하다.
사용자 관점에서 여러 번 생각을 하고 고민을 해봤지만, 어떤 방식이 조금 더 직관적이고 편한 사용성을 제공할지 전혀 감이 오지 않았습니다.
결국 피드백의 많은 부분이 UX에 대한 이야기일 정도로
사용자 관점
에 대한 고려가 부족했습니다.이 능력은 다른 어플을 사용하면서 계속해서 좋은 UX 표본에 대해 학습하는 방식으로 극복해야겠다고 생각했습니다.
잘한 점
1. 현실적인 기획과 현실적인 기획 수정
스스로의 단점이라고 생각하는 부분은, 사소한 것까지 완벽함을 추구하려다가 큰 것을 놓치는 경향이 있다는 점입니다.
이 단점에 대해서 정말 많이 생각하고 고치려 노력했지만 완벽함을 추구하는 욕망은 쉽게 접을 수 없었습니다.
이번 프로젝트는 대략 3주 안에 기획부터 출시까지 완료해야 하는 스프린트 과정이었습니다.
그렇기에 주어진 시간을 고려하는 것도 정말 중요했습니다.
원래 같았더라면 어느 부분은 완벽하지만 어느 부분은 손도 대지 못하고 출시를 했을 것이라고 생각합니다.
하지만 이번에는
MVP(Minimum viable product)
를 위한 기능을 최우선으로 만들고 그다음에 부가적인 기능을 구현해보자 하는 목표를 갖고 구현해서 완벽하게 기한을 맞출 수 있었습니다.처음부터 기획했던 부분들을 계속해서 현실적인 방향으로 수정해나갔던 행동들이 주요하게 작용했다고 생각합니다.
이러한
현실적인 타협 능력
도 현업에서 정말 중요할 것이라고 판단이 됩니다.2. 지속적인 리펙토링을 통한 구조 개선
앱을 출시한 이후에도 끊임없이 어떤 구조가 조금 더 효율적일지 고민하는 과정을 거쳤습니다.
iOS 어플을 개발하는 코드는, 정말
성능
이 필요하는 부분이 아니고서는재사용성
,가독성
이 중요하다고 생각합니다.그렇기 때문에 계속해서
재사용성
을 높이기 위한 모듈화, 추상화를 하려 노력중입니다.또한 여러 빅테크들의
Code convention
을 적용하여가독성
을 갖춘 코드를 작성하려 노력했습니다.마치며
이번에 만든 첫 어플은 스스로의 성장을 보여주는 초석이 될 것입니다.
배운 내용을 꾸준히 어플에 적용해 업데이트 해 나갈 것이기 때문입니다.
현업에서 마주하게 될
기능 업데이트
와리펙토링
의 사이의 딜레마에서 끊임없는 고민을 통해 경험을 쌓아나갈 것입니다.'기타 > 느낀점 | 회고' 카테고리의 다른 글
백준 플레 5 달성 (1) 2023.06.26 [부스트캠프] 부스트 컨퍼런스 2022 참여 & 발표 후기 (0) 2022.10.23 커뮤니티 게시판 프로젝트를 마치고 느낀점 (0) 2022.01.07