햄스터의 개발일기

[iOS앱출시] 첫 출시 기록, 강수예보 알림 <올랑말랑> 후기

wiwi-si 2023. 10. 27. 18:25
728x90

01234

기상청 정보를 받아 강수예보를 알려주는 앱

❓ 왜 이 앱을 출시하게 되었나요

오늘 비가 와서 우산을 챙겨야 할지 말지, 날씨 앱을 열어보는게 귀찮았습니다. 강수확률이 일정확률(%)을 넘으면 우산을 챙기라는 알림을 아침에 받으면 편하지 않을까?라는 생각으로 앱을 기획하게 되었습니다.

 

⛅️ 앱의 주요 기능

* 사용자의 위치 기반으로 한 눈에 볼 수 있는 시간별 강수 확률 

* 원하는 강수확률을 지정하면 아침 7시에 알림이 옵니다.

* 앱에서 사용자가 원하는 귀여운 캐릭터를 선택할 수 있습니다.

 

🌈 사용 기술

TabMan

  스플래쉬에서 메인으로 넘길 때 탭맨을 이용하여 탭뷰컨트롤러에서 탭을 관리할 수 있습니다.

Almofire

 GET, POST 등 다양한 HTTP 요청을 쉽게 보낼 수 있어, API 호출을 편히 할 수 있습니다.

KakaoMapsSDK

 현재 위치의 좌표 정보를 받아와서 지역의 위치를 확인할 수 있습니다.

 Firebase  (Function, Notification, Scheduler, RealTime DataBase)

 파이어베이스 함수를 통해 정해진 시간에 스케줄링을 하여 사용자가 원하는 강수확률을 클라이언트앱에서 전달 받아 알림을 전합니다. 사용자의 강수확률과 위치값, 토큰값은 RealTime Database를 이용하여 저장하였습니다.

 

🗓️ 앱 개발 과정(9.18 ~ 10.18)  

😀 앱 개발 과정 중 성장통(부제: 힘들었던 점과 그것을 통해 배운 점)

1. 앱 기획

앱을 기획하고 스토리보드를 쌓아가는 과정이 개발자로서 도움이 될까라는 걱정이 들었지만 기획 과정을 통해 꼭 필요한 기능과 UX/UI에 대해서도 공부하게 된 배경이 되었습니다.

 기획을 하면서 필요한 기능을 정리해보니 생각보다 개발기간이 늘어날 것 같았습니다. 빠른 배포를 위해 사용자가 원하는 최소한의 기능을 빨리 만드는 방식으로 목표를 수정하였고, 출시 이후에 추가하고 싶은 기능들을 업데이트 하는 방식으로 기획을 수정하였습니다.

01234567
올랑말랑 스토리보드(가제: 우산챙겨)

 

2. 작업을 세분화해서 계획하고 실천하기(WBS)

처음에 오늘 해야할 것을 적고 실천하는 방식으로 했는데 진행율이 빠르지 않아 문제점을 고민하였는데, 작업을 세분화하는 것이 중요하다는 멘토님의 조언을 듣고 WBS를 작성하였습니다. 만들어야할 기능들을 쭉 적고, 하루에 해야할 단위들을 날짜와 우선순위를 매겨 작업을 하니 작업 효율이 훨씬 늘었습니다. 작업을 세분화하고 마감기한을 두는 것이 중요하다는 것을 깨달았습니다.

 

노션에 WBS 기록하기

3. Firebase function 사용을 위해 Node.js 언어 사용과 개발 환경을 셋팅하는 과정

Firebase function를 통해 앱에서 기상청 API를 호출하여 사용자의 강수확률을 넘으면 알림을 보내는 함수를 작성해야 했는데, Node.js로 작성을 하여야 했습니다. Node.js는 처음 접하는 언어여서 생소하고 어려웠고 Visual Studio와 터미널을 이용해서 개발 환경을 셋팅하는 게 복잡하고 시간이 꽤 걸렸습니다. 최종 완료된 함수 버전이 143인데, 함수를 143번째 배포한 것입니다. 오류를 수정하고 고치면서 점점 코드가 나아지고, 원하는 방식으로 작동이 되어서 뿌듯했던 경험입니다.

 

4. 디자이너님과의 협업

디자이너님이 주신 작업물과 제가 오토레이아웃으로 잡은 캐릭터의 크기가 다르고 컬렉션뷰의 크기가 달라져서 소통을 계속했고, 디자이너님이 원하는 배치를 듣고 미세한 차이가 작업물에 큰 영향을 미친다는 것을 깨달았습니다. 컬렉션뷰의 그림 뷰를 바로 넣으니, 내용이 테두리에 보여서 지저분한 인상을 주었고, 이를 해결하기 위해 컬렉션뷰 바탕에 뷰를 깔고 그 뷰에 이미지를 넣고 inset을 주어 중첩되는 부분을 제거하였습니다. 이런 점들은 시뮬레이터로 앱을 실행시켜서 동작을 직접 해봐야 알 수 있는 부분으로 기기 테스트의 중요성을 알게 된 경험이기도 하였습니다.

 

컬렉션뷰 세로 테두리에 내용이 보이는 현상

 

컬렉션뷰 바탕에 뷰를 넣어 뷰에 이미지를 입혀 해결한 후

5. 아이폰 모델 별 오토레이아웃 맞추기(가장 큰 아이폰 사이즈와 가장 작은 아이폰 사이즈)

가장 스크린이 큰 iPhone 15 Pro Max와 iPhone SE 1의 사이즈를 맞추면서 한쪽에 오토레이아웃을 맞추면 한쪽에서 중첩이 되어 오토레이아웃을 맞추는 것이 생각보다 어려웠던 경험이 있습니다. 오토레이아웃은 '크기와 위치'여서 이 부분을 상기하면서 UI 객체에 직접 하드 코딩을 하지 않고 중심 위치를 잡고 거리를 거는 방식으로 해결하였습니다.

 

6. 출시 거절

 최종 출시까지 대략 1주 정도 걸렸던 것 같습니다. 처음에 앱 출시가 반려되었던 이유는 위치정보가 불러지지 않으면 스플래쉬 화면에서 넘어가지 않도록 했는데, 와이파이와 위치 정보 값이 없더라도 앱이 정상적으로 작동되어야 한다고 반려되었습니다. 유저가 위치정보 허용을 잘못했거나 위치가 불러지지 않아도 앱이 잘 작동되게끔 해야겠다는 깨달음을 얻었고, 이 점을 수정하여 위치정보 값이 불러지지 않아도 메인 화면 UI가 보일 수 있도록 수정하여 출시가 되었습니다.

 처음에는 원인을 파악하지 못하여 애플에 위치 정보 값을 넣어달라고 회신을 넣어서 답답해하며 출시를 기다린 적이 있습니다. 거절에서 말하는 정확한 원인을 파악하는 것이 앱 출시 시간을 줄일 수 있는 길이라는 것을 꺠달았습니다. 그리고 출시가 거절이 되더라도 스트레스를 받지 않고 마음의 평정을 가지고 꾸준히 오류를 잡아가는 태도를 가지는 것이 중요하다는 것을 느낀 경험이었습니다. 

 

7. Xcode 불안정성

출시를 하면서 프로젝트에 라이브러리를 설치하거나 폴더를 변경했던 것이 충돌이 되어서 Xcode에서 계속 오류를 띄워서 Git에 저장한 코드를 가져오는 것을 반복하였는데, 루트 폴더가 계속 바뀌었더니 오류가 생겼습니다. 프로젝트 이름을 자주 바꾸거나, 개발 환경은 최소로 변경해야겠다는 생각이 들었습니다.

 

🙌 향후 계획

 두 번째 앱 출시!를 기획하고 있습니다. 그리고 좀 더 큰 규모의 팀프로젝트를 하기 위해 팀프로젝트를 찾고 있습니다. 포트폴리오를 더 만들고 원하는 앱을 기획하는 경험을 더 해보고 취업문을 두드리고자 합니다! 다음 앱 출시는 좀 더 치밀하게 계획하고, 개발 문서를 더 꼼꼼히 읽어 개발 시간을 줄이는 것이 목표입니다 😽