Quiet

2022.08.27 - 2022.08.28

팀 구성:

iOS 4명 ⎻ 디자인 2명 ⎻ 서버 2명 ⎻ 기획 (모든 팀원)

본인 역할:

iOS 3명 - 기획 (모든 팀원)

지역의 환경소음 정보를 시각화하여 제공함으로써 국민들이 조용한 주거환경을 가질 수 있도록 돕는 정보성 지도 어플리케이션입니다. 서울 공공데이터 API에서 제공하는 하루동안의 소음 데시벨 데이터를 가공하여 해당 지역 평균 소음 데이터를 마커로 시각화하여 제공합니다. 평균/주말 소음 데이터와 시간별 소음 데이터를 차트를 사용해서 시각적으로 보여줍니다.

* Quiet는 2022년 서울시 IoT 도시 공공 데이터 해커톤에서 최우수상을 받았습니다.

github

사용 기술

UIKit

UI 컴포넌트로 화면 UI 구성 및 Codebase 형식으로 AutoLayout 설정

MapKit

위치 검색 및 지도 UI 구현

라이브러리(Swift Package Manager)

Moya

네트워킹 라이브러리

Charts

차트 UI 구성 API 제공

Lottie

JSON 기반 애니메이션 파일 렌더링 기능 제공

본인 개발 내용

⏺ 공공 데이터 서버 통신 로직 작성

-

네트워크 통신 라이브러리 Moya를 사용해서 공공 데이터 API에서 소음 데이터를 추출하여 화면에 표시

⏺ 커스텀 Layout 메소드(NSConstraint)를 사용하여 Codebase로 Autolayout 구현

⏺ MapKit를 활용한 위치 검색 기능 구현

-

TextField에 입력한 텍스트가 '동'인지, '구'인지 구별하여 검색

-

해당 동, 구가 있으면 검색 결과를 지도 화면에 띄워주고 검색 내용을 UserDefault에 저장

⏺ Custom Sheet Presentation Controller 개발

-

커스텀 Sheet View 내부에 지도 화면을 Embed하는 식으로 구현

-

Sheet 클래스 선언 시에 Content, BottomSheet 화면을 받을 수 있는 유연한 형태로 개발

Quiet를 통한 성장

한꺼번에 들어오는 1000개의 데이터 처리하기

Quiet는 많은 양의 데이터를 다룬 프로젝트입니다. 서울시에서 제공하는 지역 소음 관련 공공 데이터는 분 단위로 측정된 데이터라서 해당 지역의 하루 소음 정보만 가져와도 1000개 이상의 데이터가 한 번에 들어오게 됩니다. 제가 맡은 검색 결과 지도 화면에서는 검색한 지역의 소음 데이터를 받아와서 해당 지역의 소음레벨로 나타내야 했습니다. 즉, 들어온 데이터를 가공하여 평균 소음 데시벨을 도출해야 했습니다.

일단 데이터를 받아오는데만 평균 2-3초의 시간이 걸렸습니다. 따라서, 사용자에게 데이터를 가져오는 중이라는걸 명시적으로 보여줄 필요가 있다고 판단하여 로딩 인디케이터를 추가했습니다. 또한, 데이터 처리 하는 로직을 DispatchQueue global에 추가하여 높은 priority로 설정해 데이터 처리를 우선적으로 진행할 수 있는 환경을 만들었습니다. 이전보다 데이터가 화면에 나오는 속도는 빨라졌지만, 7일의 소음 데이터를 가져오는 부분에서는 해당 방식으로도 역부족이었습니다. 평균 5-6초의 시간이 들어서 속도 개선을 시도해봤지만, 제한 시간 안에 앱을 완성해야해서 추가적인 로직 개선은 이뤄내지 못했습니다.

공공 데이터 API를 해커톤 이후에 사용하지 못하게 하여 추가적인 로직 개선은 진행하지 못했습니다. 하지만, 해당 로직을 개선한다면 Swift Concurrency를 사용해서 코드를 작성할 것 같습니다. Concurrency를 사용하는 방식이 DispatchQueue보다 Thread 생성이나 Context Switching이 덜 발생한다고 합니다. DispatchQueue는 priority를 설정하더라도 우선 순위대로 진행되지 않을 수 있지만, Concurrency는 Queue가 아니기 때문에 우선순위대로 Task를 진행할 수 있습니다. 이런 장점 때문에 Swift Concurrency(async/await)를 사용해서 코드를 수정하는 것이 속도 개선에 도움을 주었을 것 같습니다.

© Yoon Ah Shin. 2024

  1. 01. 02 Latest Update