파크히어 Realm 사용 사례

1,617 views

Published on

파크히어에서 Realm을 사용한 사례

Published in: Engineering
0 Comments
18 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,617
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
9
Comments
0
Likes
18
Embeds 0
No embeds

No notes for slide

파크히어 Realm 사용 사례

  1. 1. 파크히어 Realm 사용 사례 2016. 03. 31 이선협 / ParkingSquare
  2. 2. 발표자 소개 - 이선협 / KC - NHN NEXT - 파킹스퀘어에서 iOS 개발 담당 - 산업기능요원으로 복무 중 - https://github.com/kciter - https://medium.com/@kciter
  3. 3. 파크히어 소개 - 주차 예약 서비스 - 합리적인 가격으로 내 주차 자리를 보장 - iOS, 안드로이드, 모바일웹, PC웹 - http://www.parkhere.co.kr/
  4. 4. 목차 - Why Realm? - 어떻게해야 Realm을 잘썼다고 소문이 날까? - 기존 파크히어 로직의 문제점 - 리팩토링 - 하나씩 살펴보기 - 네트워크 로직 - 오브젝트 맵핑 - MVVM - 결론 - Q & A
  5. 5. 목차 - Why Realm? - 어떻게해야 Realm을 잘썼다고 소문이 날까? - 기존 파크히어 로직의 문제점 - 리팩토링 - 하나씩 살펴보기 - 네트워크 서비스 - 오브젝트 맵핑 - MVVM - 결론 - Q & A - iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용!!! 을 위주로 담았습니다
  6. 6. PARK HERE는 왜 Realm을 사용했을까요?
  7. 7. Why Realm?1. 좋은 성능 - SQLite, Core Data보다 좋은 성능을 보여줌
  8. 8. Why Realm?2. 편리한 사용성 - 설치와 사용이 쉬움 - 쉽게 데이터 모델 정의 가능 - 간단하게 관계 설정 가능 - 0.96 업데이트로 NULL 속성도 지원 - Core Data보다 러닝커브가 적고 사용하기 쉬움
  9. 9. Why Realm?3. 오픈소스 - 계속해서 발전하는 오픈소스 - 꾸준히 새로운 기능 추가 중
  10. 10. Why Realm?4. Core Data는 불편해보였다… - 데이터 모델 파일을 따로 만들어야함
  11. 11. Why Realm?4. Core Data는 불편해보였다… - 데이터 모델 파일을 따로 만들어야함 - 사용법이 Realm에 비해 복잡하다 Core Data Realm 데이터 불러오는 코드
  12. 12. Why Realm?4. Core Data는 불편해보였다… - 데이터 모델 파일을 따로 만들어야함 - 사용법이 Realm에 비해 복잡하다 - Learning Curve가 크다
  13. 13. Why Realm?4. Core Data는 불편해보였다… - 데이터 모델 파일을 따로 만들어야함 - 사용법이 Realm에 비해 복잡하다 - Learning Curve가 크다 - 별도로 구현해야할 기능들이 Realm에 구현되어 있다
 (Notification, Realm().add(_:update:) 등)
  14. 14. Why Realm?4. Core Data는 불편해보였다… - 데이터 모델 파일을 따로 만들어야함 - 사용법이 Realm에 비해 복잡하다 - Learning Curve가 크다 - 별도로 구현해야할 기능들은 Realm에 있다 
 (Notification, Realm().add(_:update:) 등) 객체화하여 사용하거나 MagicalRecord같은 라이브러리를 이용해도 좋지만 이미 필요한 기능이 구현되어있고 성능도 더 좋은 Realm을 사용하기로 결정했습 니다.
  15. 15. 어떻게 Realm을 써야 잘썼다고 소문이날까?
  16. 16. 기존 파크히어 로직 뷰 진입 서버에 데이터 요청 JSON Parse UI 적용 Realm 적용 전
  17. 17. 기존 파크히어 로직Realm 적용 전 뷰 진입 서버에 데이터 요청 JSON Parse UI 적용 AFNetworking SwiftyJSON Callback - 첫 iOS 앱 제작 경험 - AFNetworking 사용 - SwiftyJSON 라이브러리로 일일이 JSON Parsing - 데이터 반환을 Callback을 이용함 - MVC Architecture
  18. 18. 기존 파크히어 로직Realm 적용 전 뷰 진입 서버에 데이터 요청 JSON Parse UI 적용 AFNetworking SwiftyJSON Callback - 첫 iOS 앱 제작 경험 (경험 미숙으로 잘못된 구조 작성) - AFNetworking 사용 (Swift와 어울리지 않음) - SwiftyJSON 라이브러리로 일일이 JSON Parsing (단순 반복 작업, 중복 코드) - 데이터 반환을 Callback을 이용함 (중복 코드, 클래스간 의존성) - MVC Architecture (Massive View Controller 문제)
  19. 19. 기존 파크히어 로직Realm 적용 전 뷰 진입 서버에 데이터 요청 JSON Parse UI 적용 AFNetworking SwiftyJSON Callback - 첫 iOS 앱 제작 경험 - AFNetworking 사용 (Swift와 어울리지 않음) - SwiftyJSON 라이브러리로 일일이 JSON Parsing (단순 반복 작업, 중복 코드) - 데이터 반환을 Callback을 이용함 (중복 코드, 클래스간 의존성) - MVC Architecture (Massive View Controller 문제)
  20. 20. Realm을 잘 활용할 수 있도록 리팩토링하자!
  21. 21. 뷰 진입 서버에 데이터 요청 JSON Parse Realm 쓰기 Realm 읽기 UI 적용 목표 - 클래스간 의존도 낮춤 - 중복 코드를 제거 - 불필요한 노가다성 코드 제거
  22. 22. 리팩토링 - 바퀴를 다시 발명하지 말자 (라이브러리 적극 이용) - MVVM 아키텍처 사용 - AFNetworking대신 Swift와 어울리는 Alamofire 사용 - Model 데이터를 Mapping해주는 라이브러리 사용 (ObjectMapper) - Reactive 프로그래밍
  23. 23. MVVM - [Model - View - ViewModel]로 구성됨 - Massive View Controller 문제 해결 - View에 ViewModel를 바인딩하여 사용 (KVO)
  24. 24. Alamofire - https://github.com/Alamofire/Alamofire - HTTP 라이브러리 - Custom Response Serializer 작성 가능
  25. 25. ObjectMapper - https://github.com/Hearst-DD/ObjectMapper - JSON 데이터를 Object에 맵핑해주는 라이브러리 - Transform을 이용하여 다양한 데이터 타입 대응가능 - Enum 값 처리 가능 (Raw Value) - Realm Object에도 사용 가능
  26. 26. AlamofireObjectMapper - https://github.com/tristanhimmelman/AlamofireObjectMapper - Alamofire의 Custom Response Serializer를 통해 구현됨 - Response Data를 바로 Object에 바인딩
  27. 27. Step By Step으로 하나씩 적용해보겠습니다
  28. 28. 뷰 진입 서버에 데이터 요청 JSON Parse Realm 쓰기 Realm 읽기 UI 적용
  29. 29. 사용법은 매우 간단합니다
  30. 30. 사용법은 매우 간단합니다 받아온 데이터를 Realm에 Write
  31. 31. 사용법은 매우 간단합니다 ObjectMapper를 통해 간단하게 줄일 수 있다
  32. 32. 뷰 진입 서버에 데이터 요청 JSON Parse Realm 쓰기 Realm 읽기 UI 적용
  33. 33. 기존 코드 ObjectMapper 적용 코드
  34. 34. 기존 코드 ObjectMapper 적용 코드 추가된 코드
  35. 35. 기존 코드 ObjectMapper 적용 코드 추가된 코드 JSON의 Key값
  36. 36. 기존 코드 ObjectMapper 적용 코드
  37. 37. 기존 코드 ObjectMapper 적용 코드 AlamofireObjectMapper 라이브러리를 이용하여 Response를 받음과 동시에 오브젝트를 받을 수 있습니다
  38. 38. JSON 객체 대신 Object, Object Array값을 받을 수 있습니다
  39. 39. 뷰 진입 서버에 데이터 요청 JSON Parse Realm 쓰기 Realm 읽기 UI 적용
  40. 40. View Controller View View Model Model MVVM Update Notify User Event Update
  41. 41. View Controller View View Model Model MVVM Update Notify User Event Update
  42. 42. 각각의 View마다 분리하여 사용 View Controller View View Model Model MVVM Update Notify User Event Update
  43. 43. 재사용이 가능합니다 View Controller View View Model Model MVVM Update Notify User Event Update
  44. 44. View / View Controller
  45. 45. View / View Controller KVO를 통해 Model과 View를 바인딩
  46. 46. View Model View / View Controller KVO를 통해 Model과 View를 바인딩
  47. 47. View Model View / View Controller KVO를 통해 Model과 View를 바인딩 Init과 동시에 Area 정보를 Realm에서 가져옴
  48. 48. View Model View / View Controller KVO를 통해 Model과 View를 바인딩 Init과 동시에 Area 정보를 Realm에서 가져옴
  49. 49. View Model View / View Controller KVO를 통해 Model과 View를 바인딩 Init과 동시에 Area 정보를 Realm에서 가져옴 AreaService를 통해 Area 데이터 요청
  50. 50. View Model View / View Controller KVO를 통해 Model과 View를 바인딩 Init과 동시에 Area 정보를 Realm에서 가져옴 AreaService를 통해 Area 데이터 요청
  51. 51. View Model View / View Controller KVO를 통해 Model과 View를 바인딩 Init과 동시에 Area 정보를 Realm에서 가져옴 AreaService를 통해 Area 데이터 요청 Realm에 Response Object를 Write
  52. 52. View Model View / View Controller KVO를 통해 Model과 View를 바인딩 Init과 동시에 Area 정보를 Realm에서 가져옴 AreaService를 통해 Area 데이터 요청 Realm에 Response Object를 Write Notify Realm 알림 기능을 통해 데이터 업데이트
  53. 53. 뷰 진입 서버에 데이터 요청 JSON Parse Realm 쓰기 Realm 읽기 UI 적용
  54. 54. 뷰 진입 서버에 데이터 요청 JSON Parse Realm 쓰기 Realm 읽기 UI 적용 Alamofire ObjectMapper AlamofireObjectMapper Realm Notification KVO
  55. 55. 뷰 진입 서버에 데이터 요청 JSON Parse Realm 쓰기 Realm 읽기 UI 적용 Alamofire ObjectMapper AlamofireObjectMapper Realm Notification KVO 원하던 흐름이 깔끔하게 구현되었습니다
  56. 56. 결론 - 이것저것 문제가 있던 소스를 Realm 적용과 함께 리팩토링 - 여러 라이브러리를 이용하여 Realm을 쉽게 사용 - Realm을 사용하여 UX적인 개선이 이루어짐 - iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용
  57. 57. 감사합니다 2016. 03. 31 이선협 / ParkingSquare

×