top of page

저의 개발 고민들이 담겨있는

작업 공간입니다.

Portfolio

IMG_3754.JPG

Project : MyAirbnb

  • 담당 ​핵심 기능 영상

숙소 검색(필터) 및 좋아요 기능

숙소 검색 및 예약 기능

​실시간 채팅 기능

  • 개요 : 기존 Airbnb 앱 서비스를 기반으로 같은 형태의 서비스를 만들어보는 클론 프로젝트

  • ​개발 기간 : 2019.07.01 - 08.09

  • 참여 인원 : iOS 3명, 백 엔드 3명, 프론트 엔드 4명

  • 개발 목표 : MVP - 숙소 필터 및 검색 기능, 숙소 예약 기능, 호스트와 유저 간 실시간 채팅 기능

                      추가목표 - 숙소 좋아요 및 저장 기능, 트립 카테고리, 레스토랑 카테고리

  • 개발 완성도 : MVP 100% 구현, 추가목표 50% 구현 완료

  • 담당 구현 파트

    • 런칭화면, 메인페이지, 숙소(Luxe, Plus, 일반 숙소) 페이지, 숙소 검색페이지, Custom SearchBar, 숙소 저장페이지,
      여행 일정 페이지, 메시지 페이지

    • SearchBar와 필터(캘린더, 인원) 를 이용한 숙소 검색 기능, 숙소 예약 기능

    • 숙소 좋아요 기능, 예약된 숙소를 바탕으로 한여행 일정 표시 기능

    • 숙소 호스트와 사용자 간 실시간 메시지 기능

    • FSCalendar 오픈소스 캘린더 UI 및 기능 개선

  • 사용 기술 & 라이브러리 : Swift, FSCalender 오픈소스, Starscream, Kingfisher, NVActivityIndicatorView, Snapkit,                                                          AVFoundation, GitHub, Slack, Zenhub

  • Github Link : https://github.com/AlexLee365/MyAirbnb

  • 전체 시연 영상 : https://www.youtube.com/watch?v=K0blwUTsPTI

  • ​고민 & 구현 방법

1. TableView에 유동적으로 데이터 및 화면을 구성시키기 위한 데이터 설계

Q. ​고민 : TableView에 데이터와 UI를 고정시키는 것이 아니라, 언제든 변동될 수 있도록 설계 할 수 있을까?

S. 해결 : MainView에 쓰일 데이터를 MainViewData라는 구조체로 따로 정의하고, 그 안에서 쓰일 데이터들을

     MainViewDataProtocol을 채택하게 하여 여러 데이터를 각각의 CellStyle로 함께 묶어주었습니다.

스크린샷 2019-08-28 오후 3.41.05.png
스크린샷 2019-08-28 오후 3.49.31.png
스크린샷 2019-08-28 오후 3.58.23.png

R. 결과 : TableView에 뿌려줄 배열의 요소 순서를 바꿔주거나 빼거나 더해주는 것만으로 화면구성을 바꿔줄 수 있었고,

     유지보수성과 재활용성을 크게 증가시킬 수 있었습니다.

2. 여러 개의 API 요청에 대한 Response를 모두 받아오기 위한 방법 & 데이터를 받아오는 시간을 줄이기 위한 방법

Q. ​고민 : 여러 개의 비동기 처리에 대해 모두 종료된 시점을 어떻게 잡을 수 있을까?

     여러 개의 데이터를 받아오는 시간을 어떻게 줄일 수 있을까?

S. 해결 : 여러 개의 비동기 처리를 DispatchGroup으로 관리하여 Group이 모두 종료되는 시점을 잡을 수 있었습니다.

    데이터간 우선순위를 선정하여 중요한 데이터들부터 호출하였고, 메인화면에 바로 필요하지 않은 데이터들은 그 이후 호출되도록

    설계하였습니다. 예를 들어, 검색할때 보여지는 도시 리스트 데이터는 사용자가 앱을 다운받고 처음 실행하여 로그인할 때

    1차적으로 받아놓아 UserDefault에 저장해놓고 활용하였고, 앱을 다시 실행할 때 중요한 데이터 호출 이후에 갱신하는 형식으로      설계하였습니다.

스크린샷 2019-08-30 오후 6.22.16.png
스크린샷 2019-08-30 오후 6.22.59.png

R. 결과 : 필요한 API 호출에 대한 응답을 확실히 모두 받은 후에 다음 작업을 진행할 수 있었고, 데이터를 받아오는 데 걸리는 시간을 크게

     감소시킬 수 있었습니다.

3. 데이터를 받아오는 시간을 채우기 위한 방법

Q. ​고민 : 숙소를 검색하거나 컨트롤러를 이동할 때 새로운 데이터를 호출해야 하는데, 그 공백들을 어떻게 채울 수 있을까?

S. 해결 : 사용자 경험의 관점에서 최대한 유연한 앱을 만들고자 애니메이션을 최대한 활용했습니다. 또한 PlaceHolderView를 따로 

     만들어 지금 어떤 작업이 진행되고 있는지 대한 최소한의 데이터를 먼저 보여주어 사용자가 불편함을 느끼지 않도록

     구현하였습니다.

런칭화면 애니메이션.gif

시작 화면

숙소 검색 영상.gif

SearchBar 검색 화면

Luxe숙소 애니메이션.gif

Luxe숙소 상세 페이지

일반숙소 애니메이션.gif

일반숙소 상세 페이지

스크린샷 2019-08-30 오후 7.15.13.png

R. 결과 : 사용자에게 지금 어떤 동작이 일어나고 있는지 좀 더 명확하게 보여줄 수 있었고, 부드럽고 동적인 흐름으로 데이터 호출과

     화면이동을 구성할 수 있었습니다.

4. 모든 컨텐츠에 달린 좋아요 버튼을 효율적으로 구현하기 위한 방법

Q. ​고민 : 숙소, 트립, 레스토랑 등 여러 카테고리의 컨텐츠에 달린 좋아요 버튼을 어떻게 효율적으로 구현할 수 있을까?

S. 해결 : UIButton을 상속받은 LikeButton 클래스를 만들어 각각의 컨텐츠 고유 번호와 컨텐츠 타입을 가지게 하여 그 속성값을 가지고

     서버에 POST, DELETE 하도록 구현하였습니다.

스크린샷 2019-08-30 오후 7.56.41.png
스크린샷 2019-08-30 오후 7.55.50.png

R. 결과 : 모든 컨텐츠가 LikeButton 객체를 갖도록 구현하였고, 각각 다른 컨텐츠 고유 번호와 컨텐츠 타입을 갖도록 하여

     효율적으로 모든 컨텐츠의 좋아요 기능을 구현할 수 있었습니다.

저의 작업 공간 내용은 계속해서 추가될 예정이며,

부족한 부분이나 피드백이 있으시면 무엇이든 나눠주시면 감사하게 받겠습니다.

Project : MyAirbnb
bottom of page