Skip to content

✈️ Capstone - 여기선 (여행의 기억을 선명하게) ✈️

Notifications You must be signed in to change notification settings

LeeHa-Yeon/MemoriesOfTravel1

Repository files navigation


🎥 유튜브로 시연영상 확인하기  

여기선 🛫

프로젝트 기간 : 2021.10.01 ~ 2021.10.30

개인프로젝트

스크린샷 2021-11-14 오후 6 36 36

목차

  • 프로젝트 소개
  • Skills
  • 시스템 구성도
  • Contributions
  • 세부 구현
  • 상세 화면
  • 어려웠거나 아쉬웠던 점

프로젝트 소개

"여기선"이란 여행의 기억을 선명하게라는 뜻을 줄인 말입니다.
여기선은 여행 시작부터 마무리까지 모든 것을 기록하는 여행 플랫폼 앱 서비스입니다.
이 서비스는 여행지를 등록한 후 해당 여행을 준비하고 관리할 수 있습니다. 한 여행지마다 다음과 같은 기능들이 존재합니다. 준비물을 챙길 수 있는 체크리스트, 등록된 일정 확인, 그에 따른 동선확인, 가계부, 여행 앨범, 여행 리스트 등 모든 여행들은 디데이를 통해 여행 전과 후를 자동으로 구분되어져 편리하게 관리할 수 있고 시간이 지나도 나의 여행들을 되돌아보면서 추억을 상기시킬 수 있습니다.


Skills

  • iOS Platform (macOS- Xcode), Swift, UIKit
  • Firebase(storage, authentication, realtime, realtime database), OAuth 2.0
  • NMapsMap, KakaoAPI, OpenWeatherAPI, PostMan, Alamofire, JSON
  • COCOAPODS, FSCalendar
  • Singleton Pattern, MVC Pattern
  • Sketch, Lottie-ios, Github
  • AwesomeUI (DropDown, SSCustomTabbar, EASegments)

시스템 구성도

image


Contributions

  • MVC 디자인 패턴을 적용해 프로젝트를 설계하고 구성하였습니다.
  • Singleton 패턴을 적용하여 유저, 여행 정보를 하나의 객체로 저장하여 사용하였습니다.
  • Alamofire 라이브러리로 비동기적인 네트워크 통신을 구현하였습니다.
  • cell을 Xib로 따로 빼서 관리하였습니다.
  • NaverMap, Kakao Local API 를 이용한 장소 찾기 및 설정하였습니다.
  • firebase로 데이터를 관리 및 사용하였습니다.
    • 유저 데이터 관리 및 사용
    • 여행 데이터 관리 및 사용

개발 화면

스크린샷 2021-11-15 오전 3 31 48

스크린샷 2021-11-15 오전 3 31 58

스크린샷 2021-11-15 오전 3 32 10

스크린샷 2021-11-15 오전 3 32 38

스크린샷 2021-11-15 오전 3 33 10

스크린샷 2021-11-15 오전 3 33 39

스크린샷 2021-11-15 오전 3 37 05

스크린샷 2021-11-15 오전 3 37 24

스크린샷 2021-11-15 오전 3 38 55

스크린샷 2021-11-15 오전 3 39 08


세부 구현

로그인, 회원가입

  • FirebaseAuth 로 회원 관리
  • 프로필 등록 : 사진첩에서 이미지를 불러오는 ImagePicker 외부 패키지 사용
  • textField 위 키보드 가림 현상을 Keyboard Notification, AutoLayout 을 이용하여 구현
  • 모든 내용이 기입시 버튼 활성화하도록 isEnabled 이용하여 설정

정보 관리

  • 유저와 여행에 대한 정보들을 Firebase Database 에 저장 및 사용
  • Singleton Pattern을 적용하여 유저, 여행 정보를 하나의 객체로 저장하여 사용
    • 여러번 호출하지 않는 점으로 메모리를 아낄 수 있음
    • 정해진 값을 여러곳에서 공유하여 사용

날짜 지정

  • FSCalendar를 이용해 선택한 "여행날짜" 셀로 표시
  • 여행기간을 시각적으로 보이도록 셀 연결을 통해 구현
  • Date Formatter를 이용하여 Date - String 원하는 format으로 만들어서 사용

여행지 검색

  • 검색한 여행지만 TableView에 띄우도록 설정

여행 설정

  • 여행 리스트를 TableView안에 CollectionView를 구현
  • 여행 정보 보기
    • 여행에 대한 상세 정보
    • 동행자 추가, 삭제 구현
    • OpenWeatherAPI를 이용해 해당 지역 날씨 정보 표시
  • 세부일정
    • Toggle를 이용하여 선택된 일정만 보여지도록 구현
    • NaverMap을 이용해 "나의 여행 동선" 를 마커로 표시
    • Kakao Local API 를 이용한 장소 찾은 후 등록
  • 체크리스트
  • 가계부
  • 앨범

세부 일정 관리

  • segmentControl로 일정을 날짜별, 지도 형태 중 선택
    • 날짜별로 일정 관리
      • 일정 등록, 일정 보기, 메모 추가, 일정 순서 조정, 일정 삭제 등 기능 수행
      • 직접 지도로 일정 등록
    • 지도로 동선 확인
      • 시작점은 하늘색마커, 경로는 회색마커, 도착점은 분홍색마커로 표시
      • 날짜를 선택하여 볼 수 있도록 "dropDown" 적용
      • 만약 없을 경우 알림창으로 없음을 알려줌

여행 체크리스트

  • 체크박스를 이용하여 준비 완료 여부를 구분하도록 구현
  • 준비물을 등록 부분 구현
  • TableView를 Edit 설정
    • 우선순위를 지정할 수 있도록 순서조정, 스와이프하여 삭제

여행 가계부

  • 예상경비를 등록, 예상경비와 쓴 돈으로 자동 계산하여 남은 비용을 표시
  • 새 지출 등록, 해당 지출 내역 표시, 지출 상세정보 확인
  • 지출 등록시 날짜 선택하는 부분에서 여행 기간 중에서만 선택할 수 있도록 설정

여행 앨범

  • Firebase Storage를 이용하여 사진 관리
    • 나의 사진을 업로드, 새로고침 기능

마이페이지

  • 나의 정보 표시, 나의 여행 횟수, 로그아웃 기능

기타

  • 폰트 적용, 앱 아이콘 생성, 로딩화면 생성
  • Cell을 xib파일을 이용하여 관리
  • Firebase의 CRUD를 이용하여 유저 데이터 관리
  • AutoLayout 적용
  • AwesomeUI를 이용 : TabBarController, SegmentControl, collectionViewDelegate 적용
  • 리팩토링으로 코드 개선 및 중복제거
  • Git을 이용하여 버전관리

어려웠거나 아쉬웠던 점

저는 모델 설계와 데이터관리를 하는 것이 어려웠습니다.

"잘못된 모델 설계" 프로젝트 도중 데이터 설계를 잘못하여 다시 설계 후 전체 대공사를 진행한 적이 있습니다. 이때 코드가 지저분하여 수정하기 어려웠습니다. 따로 폴더로 빼서 싱글턴으로 관리하였습니다. 이때 리팩토링에 대한 중요성과 가독성 좋고 유지보수를 하기 용이한 클린 코드를 지향하는 이유를 깨달았습니다.

"데이터관리" 저는 파이어베이스로 데이터를 관리 및 사용하였습니다. 이때 원하는 부분에 데이터를 가져오고 싶었지만 제가 생각했던 바와 다르게 한 템포 늦게 정보가 오는 문제가 있었습니다. 이는 비동기 통신인 점을 간과했던 문제였습니다. 저는 비동기 통신이 끝나기 전에 싱글턴을 이용해 데이터를 저장하고 화면을 전환하는 방식으로 해결했습니다.

About

✈️ Capstone - 여기선 (여행의 기억을 선명하게) ✈️

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published