개발을 시작하는 이야기

Project Review :: Trand Media 본문

개발 이야기/Project Review

Project Review :: Trand Media

Teiresias 2022. 3. 5. 17:16

영화와 드라마, 도서를 보여주는 앱 입니다. 국내 박스오피스를 조회할수 있고, 검색기능을 제공합니다. 상세정보에서는 출연진 정보를 확인할수 있고, 예고편도 확인할수 있습니다. 지도에 영화관을 표시해주고, 필터링 하여 보여줍니다.

사용 기술  및 라이브러리

  • Swift, iOS, Storyboard, MVC, AutoLayout
  • MapKit, CoreLocation, CLAuthorizationStatus , WebKit, Search Bar, Alert, Font
  • Alamofire, Kingfisher, Realm, RealmSwift, SwiftyJSON
  • Github, Insomnia

구현한 기능

  • OpenAPI를 Alamofire를 활용하여 데이터를 불러옴
  • SwiftyJSON을 활용하여 API의 JSON 데이터를 파싱
  • Realm을 활용하여 데이터를 저장하고 필터링해서 불러옴
  • StoryBoard를 활용하여 AutoLayout 화면 구현
  • XIB 파일을 활용한 Cell 제작
  • CoreLocation을 활용하여 MapKit에 사용자의 위치를 실시간 표시해주며, 지정된 위치의 Annotation을 필터링 하여 표시함
  • WebView를 활용한 영상재생

회고 및 이슈

동일한 유형의 서로 다른 API사용

  • 동일한 유형의 서로 다른  API는 요청하는 변수와, 응답 필드 값이 서로 다르기 때문에 호환하여 사용하기가 몹시 까다롭다.
  • 영화진흥위원회와 TMDB가 같은 영화의 정보를 다루고 있지만 각각의 하나의 영화에 서로 다른 고유 ID를 사용하기 때문에, 동일한 영화를 찾기 위한 요청값이 서로 달라 활용이 까다롭다.
  • 실제로 프로젝트에서 박스오피스를 보여주는 페이지에서는 영화진흥위원회의 API를, 그 밖의 페이지에서는 TMDB를 사용했다.
    영화의 상세페이지는 TMDB의 데이터들을 고려하여 제작했기 때문에 박스오피스 목록에서 영화를 선택하면 검색창으로 이동을 시켜주었다. 리팩토링을 마치고서 상세페이지에서 분기처리하여, 두가지 API를 모두 처리해 주고는 있지만 두 API의 제공되는 데이터가 다르기 때문에 페이지를 온전히 채워주지는 못하고 있다.

API 키 관리

  • 프로젝트를 Github와 같은 오픈 소스 저장 서버를 이용한다면 API의 Key 노출에 유의해야 한다.
  • 노출된 Key가 악용된다면, 나의 API 호출이 막히는것 뿐만 아니라 API의 정책에 따라 비용이 청구될수 있음.
  • Git에 Private 상태에서 업로드를 했다가, Public으로 전환을 하는 상황에서 ignore처리를 한다 하더라도, 현재 기준의 Remote에서만 삭제가 될 뿐 과거의 커밋에는 남아있기 때문에 과거의 커밋을 수정 후 재작성을 해주어야 한다.

API 콜 리밋

  • API의 콜 리밋을 대응해 정적 데이터는 Realm에 캐싱해서 사용
    • 지난 일자의 박스오피스같은 변함없는 데이터는 최초 조회한 후 Realm에 저장해두고 이후에는 조건문을 활용하여 저장된 데이터를 활용함

Xib를 활용한 Cell의 재사용 [article: XIB를 활용하기]

  • TableView의 Cell은 그 수가 아무리 많아도 보여지는 만큼만 로드하고 재사용

Storyboard를 활용한 프로젝트 제작 [article: StoryBoard를 사용하기]

  • 스토리보드를 활용한 프로젝트가 가진 장점과 단점을 이해하며, 리팩토링 과정을 거쳐 스토리보드를 분리하여 사용.

ViewController의 Life-Cycle [article: ViewController]

  • ViewController의 생명주기 (Life-Cycle)는 화면에 보여졌다가 사라지는 주기는 다양하다.
    init, loadView, viewDidLoad, viewWIllAppear, viewDidAppear, viewWillDisappear, viewDidDisappear, viewDidUnload
  • 이중 몇가지의 경우 사용에 주의를 해야 하는데, 
    init의 경우는 View를 초기화 할때 사용되며 코드로 View를 작성하거나, xib 파일을 제작할때 사용됩니다.
    loadView의 경우 View가 메모리에 로드된 직후 호출되기 때문에 코드로 VIew를 작성한게 아니라면 호출하지 않는것이 좋다.

    viewDidDisappear 같은 경우 View가 제거되기 직전에 호출이 되기 때문에 필요없어지는 작업들을 여기서 종료시킨다.

Link & Image