토이 프로젝트 회고.

Eric·2022년 10월 8일
1
post-thumbnail

군대에서 코딩하기

2022.06.30 ~ 09.25
88일간 진행했던 첫 토이 프로젝트를 TestFlight에 업로드했다.

일단 한시름 놨다는 생각에 기분좋게 글을 쓰려고 돌아보니 진짜진짜 정말 많은 우여곡절이 있었다. 군 복무 중이라 평일에는 4~5시간 정도밖에 하지못했고 아이패드 에어4의 4GB짜리 램이 툭하면 터져서 코드가 몇 줄씩 계속 날아가기도 했다. 리팩토링하면서 코드가 살짝 길어지니까 오류를 띄우지도, 뷰를 보여주지도 않아서 고생했다. 아예 패드가 껐다 켜지기도 했다.
휴대폰 제출 후에는 사지방에서 살았다. 사지방에서 Figma를 주로 사용했는데, 플러그인을 사용할 수가 없었다. 로딩만 한세월이고, 기다리면 컴퓨터가 그냥 멈춘다.(ㅠ) 크롬에서 탭 8개 정도 띄우면 또 멈춘다.(ㅠㅠ)

그렇다 하더라도 군 복무 중에 이런 기회를 가질 수 있다는거 자체를 감사하게 생각하고 있다.
옛날엔 군대에서 코딩을 배우려고 "손코딩"이라는걸 했다고 한다. A4용지나 노트에 코드를 직접 적는 것이다.
그거에 비하면 난 운이 너무 좋았다. 우연히 패드가 반입되는 공군에 들어왔고, 시기적절하게 아이패드에서 앱 제작을 지원해주기 시작했다. SwiftUI는 배우기 어렵지 않았고, 우리나라에 Apple Developer Academy도 설립되었다. 본능적으로 이 시간을 잘 활용하지 않으면 반드시 후회할거라는 생각이 들더라. 그래서 정말 쉬지않고 했다. 일과 후에 야간훈련이 있건, 힘들어서 피곤하던 간에 단 하루도 빠지지않고 공부했고, 주말엔 공부시간 10시간은 무조건 넘겼다. 코딩이 적성에 맞아서 망정이지, 입대 전의 나라면 절대 소화해내지 못할 스케줄이었다.

하지만 노력, 열정이 다가 아니었다. 프로젝트를 시작ㆍ진행하면서 기획ㆍ기술ㆍ디자인적인 문제에 계속해서 부딪혔고, 난 현실에 타협해야 했다. 어느정도 문제들을 해결했을 때 선후임들에게 평가해달라고 보여주었고, 내가 의도했던 사용법을 빨리 찾지못했다. 온보딩이 없고, 앱 자체도 너무 어려운 것이다. 열심히 했지만, 내가봐도 성공적인 프로젝트는 아니었다.


프로젝트를 통해 배운점

성공적이지 않은 프로젝트라 해도, SwiftUI 문법도 제대로 못땠던 나는 88일 동안 프로젝트를 진행하면서 배운것이 정말 많았다. 이 글을 통해 회고를 작성하면서 정리해보려 한다.

흥미ㆍ실력의 향상.

처음 Swift를 공부할 때, 책에 있는 예제 코드를 치면서 공부했다. 솔직히 말하면 재미없었다. 유의미한 실력향상이 있는 것 같지도 않았다. 예제를 벗어나서 코드를 작성해보려고 하면 항상 손이 굳었었다.
하지만 토이 프로젝트를 통해 내가 원하는걸 만들고자 하니까 이상하게 손이 풀렸다.
평소에 의무적으로 하던 "책 몇 페이지까지 보고 예제 혼자 연습하기"와는 달리 앱에 넣고 싶은 기술들을 직접 찾아가며 완성되어가는 내 프로젝트를 보면 성취감이 느껴지기도 한다.
이렇게 좋은 경험들이 반복되니까 계속 코딩을 하게 되었고, 자연스레 실력이 향상되었다.

나같은 경우는 해리포터에서 나오는 ‘Daily Prophet’ 이라는 종이 신문에 영감을 받아 영국 신문 레이아웃을 참고하여 앱을 만들었다.
평소에 경제에 관심이 있어서 네이버 뉴스 API로 키워드별 뉴스를 끌어와서 내용을 채웠다.
라이브러리를 이용해 주식 가격을 가져오기도 하고, gif를 재생하기도 했다.
뉴스를 키워드별로 가져오니 유저들에게 편향된 정보를 제공하는게 아닐까? 라는 생각에 뉴스를 가져오는 알고리즘을 고민하기도 했다.
무작정 코드를 짜다보면 나조차도 알아보기 힘들어지는 지경까지 와서 깔끔하게 정리하고 싶어져 리팩토링을 하기도 했다.

앱을 만드는 과정을 경험한다.

앱 개발은 기본적으로 기획, 프론트엔드, 백엔드, 디자이너가 협업하여 프로젝트를 진행한다. 하지만 토이 프로젝트를 만드는 나는 혼자다. 앱은 코딩만 잘하면 만들어지는 줄 알았던 나는 나중에 어설프게나마 앱 제작 과정을 따라가면서 앱을 만드는 과정을 경험했다. 거의 매 순간마다 처음보는 상황에 맞닥드려야했고, 한 번에 너무 많은 정보가 머릿속에 들어와 정리가 잘 안되기도 했다. 당장 직면하는 문제를 해결하기 급급했던 것 같다. 만약 내가 이대로 어느 팀에 속했다면, 무조건 그 팀은 터졌을거라는 생각이 들었다.

하지만 또 한 편으로는 어떤 팀에 속하기 전에 이런 경험을 미리 해봐서 다행이었다.
조별과제에 꼭 있는 빌런이나, 롤 랭크전에 트롤이 있는 것과 같이 자신의 역할과 전체적인 시스템에 익숙하지 않다면 좋은 퍼포먼스를 보여주지 못하는게 당연하다.
앱 제작도 마찬가지로, 내가 누구와 무엇을 해야하는지 모르고, 어떤 규칙을 지켜야하고, 일이 어떻게 흘러가는지도 모른다면 좋은 팀원이 되기는 힘들 것이다. 실제로 나는 프로젝트를 해보기 전까지 진짜 1도 몰랐다. 그냥 코딩하고 앱 심사만 통과하면 바로 앱스토어에 등록되는줄 알았다. 이 경험을 해보지 않았다면, 난 확정적으로 트롤, 빌런이 되는 거였다.
그랬던 내가 깃허브, 슬랙같은 협업툴 사용법이나 기획 회의 미팅 규칙, 회의 내용을 체계화하는 방법을 찾아보고, 팀원과의 소통을 위해 전체적인 앱 제작 과정이나 다른 업무의 배경지식을 공부하게 되었다. 물론 아직 몰라도 한참 모르지만, 혼자 공부하면서 갈피를 못잡던 나의 개발 공부의 방향성이 잡히게 된 것이다.

경험 회고

기획

  • 아이디어 구상

처음 기획한답시고 굿노트에 적었던게 남아있어 일부 가져와봤다.
지금도 큰 틀은 벗어나지 않은 것 같다. 난 2020년 코로나의 영향으로 신규 투자자도 이례없을 만큼 늘었고, 그 투자자들의 절반 이상이 금융 지식이 풍부하지 않다는 사실을 기반으로 기획을 시작했다. 투자를 할 때 금융 지식이 부족하다면 운에 의존하게 되고, 역사적으로 사람에게 나타나는 수익률에 악영향을 끼치는 행동을 자행한다.
하지만 우리나라는 경제 교육이 활발하지 않다. 학교에서도 커리큘럼이 마땅히 없다. 고등학교 사회탐구 선택과목에 경제 과목이 있긴하지만, 2021년 수능 기준으로 전체 수험생 중 2.3%로 매우 저조한 응시율을 보이고 있다. 그런 교육과정에서 자라난 청년층들이 경제 공부를 하는 것이 익숙하지 않을 것이라 판단했다. 그래서 '경기상황을 읽을 수 있는 지표나 시스템, 경제기사에 쓰이는 이해하기 힘든 경제용어들을 쉽게 알려주는 앱이 있다면 수요가 있지 않을까?'라는 생각에 "경제 교육 앱"을 만들어보기로 했다.

  • 시장 조사
    어떤 앱을 만들지 정한 뒤 내가 생각한 앱과 비슷한게 이미 시장에 자리잡고 있는지, 경제 관련 앱 자체가 수요가 있는지 조사해봤다. 조사하는 과정에서 다양한 모바일 시장분석 서비스가 있다는 것을 알았다. APP ANNIE, App Ape, SensorTower 등 대기업들도 이용하고 있는 서비스들이라 정말 귀하고 신뢰할만한 데이터들을 얻을 수 있는 곳이었다.
    하지만 이 나는 이 서비스들을 이용하지 못했다. 첫 번째 이유는 유료였고, 두 번째는 회원가입할 때 계속 회사 이메일을 요구한다.(ㅠ)

아쉽게도 좋은 시스템을 이용하지 못했고, 어쩔 수 없이 발로 직접 뛰었다. App Store에서 뉴스레터 앱들은 거의 다 다운받아본 것 같다. 그 중 내가 구상하고 있던 기능이나 서비스를 이미 제공하고 있거나 벤치마킹할만한 서비스를 가진 몇 가지 앱들을 추려보았다.

이 앱들에서 공통점을 발견했다. 바로 유료 시스템이다.
디테일한 데이터 혹은 경제를 이해하는데 필요한 기본 지식을 알려주는 강의들이 유료였는데, 난 여기서 의문이 들었다.

수익률을 올리기 위해서(돈을 벌기 위해서) 앱을 설치했는데, 과연 사람들이 결제를 할까?

인 앱 결제는 확정적으로 원금의 손실을 가져온다. 하지만 결제를 통해 얻는 정보들은 수익을 내줄지 확실치 않다. 그리고 사회초년생들은 투자자금이 크지않다. 청년층들이 많이 이용하고 있는 OTT 서비스와 비슷한 개념이지만, 과연 이해하기 어려운 글을 읽기 위해서 기꺼이 적지않은 돈을 지불할지 의문이었다.

그래서 내가 선택한 방향은 플랫폼 서비스를 만드는 것이었다. 유튜브와 크게 다를바 없다.

유튜브에서 사용자들이 컨텐츠를 제작하고 다른 사용자들이 보는 것처럼, 정해진 칼럼니스트들만 의견을 제시하는게 아닌, 모든 사용자들이 한 페이지든 한 줄이든 정해진 레이아웃에 따라 자신만의 칼럼을 만들 수 있는 장소를 제공하는 것이다. 설득력있고 적중률이 좋은 글이라면 구독자가 늘고, 구독자가 늘면 조그맣게 끼워져있는 광고를 보는 횟수가 늘게 되니까 안정적인 수익 구조가 될 것이라고 생각했다. 이렇게 내 프로젝트의 목표가 세워졌다.

  • 프로젝트 목표
    정리하자면, 시장조사를 통해 "초보 투자자를 위한 기본 지식을 쉽고 매력적이게 알려주는 기능을 가진 경제 정보 공유 플랫폼"을 만들기로 결심했다. 하지만 기술적인 문제가 반드시 발생할 것이기 때문에 일단 지금 당장의 목표는 최소기능을 가진 프로토타입을 만드는 것으로 설정했다.

이를 구체화하기 위해 미로(Miro)로 구상하는 앱의 프로세스를 그려보기도 했다.

디자인

디자인을 정할 때 정말 고민이 많았다. 이 때 홍대병이라도 걸렸는지, 평범한게 싫었다.(ㅋㅋ) iPadOS 앱으로 만들고자 했는데, 패드의 큰 화면을 최대한 활용하고 싶었다. 그래서 난 "이 때 아니면 언제 내가 해보고 싶은거 할 수 있을까"라는 생각으로 신문 레이아웃을 선택했다. 난 해리포터에 나오는 신문을 정말 만들어보고 싶었다.
이 때 당시엔 몰랐는데 애플 휴먼 인터페이스 가이드라인에서 UI에 어느정도 기준을 잡아준다.

  • 레이아웃
    신문 레이아웃이라는게 별 거 없을줄 알았다. 정해진 여백에 사진과 글을 빽빽히 채워나가는 정도라고 생각했다. 하지만 레이아웃에 대해 조사해보니 그리드(Grid), 마진(margin), 패딩(padding), 컬럼(column), 여백과 본문의 비율 등 신경쓸게 많았다. 거기에다 현대적인 신문들은 아래와 같은 독창적인 디자인을 적용시키기도 했다.

똥손인 나는 유튜브 영상을 봐가며 Figma로 이것저것 만져봤지만, 다시 현실과 타협해야 했다. 앱은 천천히 업데이트 할 수 있으니, 지금 당장은 본문을 열심히 글과 사진으로 채워야겠다고 생각했다.

프론트엔드

  • 프로토타입
    기획한걸 모두 구현하기엔 내가 너무 초보이기 때문에, 나에게 필요한 정도인 프로토타입을 먼저 제작했다. 목표는 '신속함'이었다. 최대한 빠르게 최소기능들을 구현하고 디자인을 적용하는 것이 프로젝트의 중간 목표였다. 하지만 난 이 프로젝트 시작 전까지만 해도 책 예제를 벗어나지 못한 초보 of 초보였다. 신속은 커녕 까먹은 SwiftUI 문법을 찾아보기 바빴고, 기본적인 CS지식과 각종 라이브러리 사용법부터 익혀야했다. 기능을 구현해도 각종 오류들을 마주했고, 오류를 해결하느라 시간을 많이 썼다. 그래도 MVP 모델을 만드는 것은 상대적으로 빠르게 해냈다. 진짜 문제였던건 구상했던 디자인을 적용하는 것이었다.

  • 폰트
    난 폰트 찾는게 그렇게 오래 걸릴줄 몰랐다. 내가 상상하던 느낌을 잘 표현해주는 폰트를 찾기 위해서 폰트 사이트를 뒤졌다. DaFont눈누에서 몇 날 며칠동안 찾았는데, 원하는걸 정말 찾기 힘들었다.
    또 개인적인 문제가 발생했는데, 폰트를 겨우 다 찾아도 폰트를 앱에 적용할 수 없었다. Xcode는 IDE에서 폰트 추가 기능을 지원하는 것처럼 보였다. 하지만 아이패드 Swift Playgrounds에서는 그런 기능을 지원하지 않았던 것이다. 구글링을 해봐도 IDE 자체가 출시한지 4개월 남짓밖에 안되서 관련문서를 찾기 쉽지 않았다. 끝내 extension으로 Font 타입을 확장하여 폰트를 추가하는 방법을 찾았다.

  • 글쓰기
    구상했던 디자인을 화면에 표현하기 위해서 글을 썼다. 평소에 어차피 경제 공부했던걸 체계적으로 정리할 필요를 느꼈던 나는 일석이조라고 생각하고 글을 쓰기 시작했는데 결과적으로 이게 거의 두 달 가까이 되는 시간을 잡아먹었다. 처음엔 한글로 글을 써 본문을 채워나갔다. 근데 이게 좀 이상하게 들릴 수 있지만 한글 자체가 내가 구상한 디자인과 어울리지 않았다.
    폰트 문제인가 싶어서 최대한 어울리는 폰트를 찾아서 적용해봤지만, 영어로 적는 것만 못했다. 그래서 본문을 다시 영어로 작성했다. 그리고 각 문단마다 주제를 정해 세부내용을 객관적인 자료와 함께 이해하기 쉽게 설명하려하니 글 적는 속도가 엄청 느려졌다. 앱을 만들고 있는건지 신문을 만들고 있는건지 헷갈릴 정도로 자료 조사를 많이 하고 글도 많이 썼다.

백엔드

위에서 썼던 글들이 복병이 되어 문제가 발생했다. 많은 양의 글이 로컬에 하드코딩되어있다보니, 로딩할 때마다 아이패드의 4GB 램이 계속 터졌다. 아예 Playgrounds 앱이 동작을 멈추진 않으면서 뷰를 그려주지도, 오류를 잡아주지도 않는 난감한 상황에 가기도 했다. 하지만 난 당시 DB를 구현할 기술력이 없어서 이 문제를 해결할 수가 없었다. 구글링 결과 Firebase라는 라이브러리를 통해서 해결할 수 있다고 한다. 그래서 당장 해야할 일을 마치면, 바로 Firebase 공부에 들어갈 것 같다.

배포

최소기능을 다 구현하지 못한 채 난 TestFlight에 앱을 업로드했다. 그리고 앱 심사를 받기 위해 필요한 절차들을 천천히 밟아나갔다. 하지만 여기서도 난관이 있었다. 10.9인치 아이패드 Air 4 하나 달랑 들고있는 나에게 디스플레이 크기별 스크린샷을 요구했다. 아이패드 Swift Playgrounds에서는 기기별 시뮬레이터를 지원하지 않고 있어 정확한 스크린샷을 얻을 수 없었다.
리젝 한번 받아보자는 목표조차도 쉽지 않았다.

소감

난 토이 프로젝트를 하면서도 진짜 앱을 출시하는 것처럼 몰입해서 프로젝트를 진행했다.
그러다보니 단지 개발 역량만 늘어나는 것에 그치지 않고, 다른 업무들을 경험해보고, 전체적인 시스템을 조금 더 이해하는 등, 많은 것을 얻어간 것 같아 보람을 느꼈다.
처음 토이 프로젝트의 목표가 나의 투자 공부 보조였다보니 글쓰기같은 개발 외적인 것에 신경을 많이 썼는데, 이로 인해 기간 내에 많은 기술을 사용해보지 못한게 살짝 아쉽기도 했다.
하지만 120일 넘게 책을 부여잡으면서 배운 것들에 비해, 88일동안 했던 경험이 너무나 알찼다.

마무리

백문이 불여일견

결국 한 번 해보는게 가장 중요한 것 같다. 경험해야만 이해할 수 있는 것들이 있는데, 솔직히 코딩은 평소에 경험할 기회가 많이 없다보니 스스로에게 기회를 주며 성장하는게 토이 프로젝트의 취지가 아닐까 싶다.

profile
IOS Developer DreamTree

2개의 댓글

comment-user-thumbnail
2023년 1월 30일

안녕하세요 Eric님! 이런 중요한 프로젝트 경험을 볼 수 있도록 글로 공유해주셔서 감사드리고 저에게도 많은 도움이 되었습니다. 다른 업로드하신 글들도 정리를 잘 해주셔서 꾸준히 챙겨보려고 합니다 ㅎㅎ 새해 복 많이 받으시고 좋은 하루 되세요!

1개의 답글