SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 30 day free trial to unlock unlimited reading.
2.
발표자 소개
- 이선협 / KC
- NHN NEXT
- 파킹스퀘어에서 iOS 개발 담당
- 산업기능요원으로 복무 중
- https://github.com/kciter
- https://medium.com/@kciter
3.
파크히어 소개
- 주차 예약 서비스
- 합리적인 가격으로 내 주차 자리를 보장
- iOS, 안드로이드, 모바일웹, PC웹
- http://www.parkhere.co.kr/
4.
목차
- Why Realm?
- 어떻게해야 Realm을 잘썼다고 소문이 날까?
- 기존 파크히어 로직의 문제점
- 리팩토링
- 하나씩 살펴보기
- 네트워크 로직
- 오브젝트 맵핑
- MVVM
- 결론
- Q & A
5.
목차
- Why Realm?
- 어떻게해야 Realm을 잘썼다고 소문이 날까?
- 기존 파크히어 로직의 문제점
- 리팩토링
- 하나씩 살펴보기
- 네트워크 서비스
- 오브젝트 맵핑
- MVVM
- 결론
- Q & A
- iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용!!!
을 위주로 담았습니다
7.
Why Realm?1. 좋은 성능
- SQLite, Core Data보다 좋은 성능을 보여줌
8.
Why Realm?2. 편리한 사용성
- 설치와 사용이 쉬움
- 쉽게 데이터 모델 정의 가능
- 간단하게 관계 설정 가능
- 0.96 업데이트로 NULL 속성도 지원
- Core Data보다 러닝커브가 적고 사용하기 쉬움
9.
Why Realm?3. 오픈소스
- 계속해서 발전하는 오픈소스
- 꾸준히 새로운 기능 추가 중
10.
Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
11.
Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
Core Data Realm
데이터 불러오는 코드
12.
Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
- Learning Curve가 크다
13.
Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
- Learning Curve가 크다
- 별도로 구현해야할 기능들이 Realm에 구현되어 있다
(Notification, Realm().add(_:update:) 등)
14.
Why Realm?4. Core Data는 불편해보였다…
- 데이터 모델 파일을 따로 만들어야함
- 사용법이 Realm에 비해 복잡하다
- Learning Curve가 크다
- 별도로 구현해야할 기능들은 Realm에 있다
(Notification, Realm().add(_:update:) 등)
객체화하여 사용하거나 MagicalRecord같은 라이브러리를 이용해도 좋지만
이미 필요한 기능이 구현되어있고 성능도 더 좋은 Realm을 사용하기로 결정했습
니다.
16.
기존 파크히어 로직
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
Realm 적용 전
17.
기존 파크히어 로직Realm 적용 전
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
AFNetworking SwiftyJSON Callback
- 첫 iOS 앱 제작 경험
- AFNetworking 사용
- SwiftyJSON 라이브러리로 일일이 JSON Parsing
- 데이터 반환을 Callback을 이용함
- MVC Architecture
18.
기존 파크히어 로직Realm 적용 전
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
AFNetworking SwiftyJSON Callback
- 첫 iOS 앱 제작 경험 (경험 미숙으로 잘못된 구조 작성)
- AFNetworking 사용 (Swift와 어울리지 않음)
- SwiftyJSON 라이브러리로 일일이 JSON Parsing (단순 반복 작업, 중복 코드)
- 데이터 반환을 Callback을 이용함 (중복 코드, 클래스간 의존성)
- MVC Architecture (Massive View Controller 문제)
19.
기존 파크히어 로직Realm 적용 전
뷰 진입
서버에
데이터 요청
JSON Parse UI 적용
AFNetworking SwiftyJSON Callback
- 첫 iOS 앱 제작 경험
- AFNetworking 사용 (Swift와 어울리지 않음)
- SwiftyJSON 라이브러리로 일일이 JSON Parsing (단순 반복 작업, 중복 코드)
- 데이터 반환을 Callback을 이용함 (중복 코드, 클래스간 의존성)
- MVC Architecture (Massive View Controller 문제)
21.
뷰 진입
서버에
데이터 요청
JSON Parse Realm 쓰기
Realm 읽기 UI 적용
목표
- 클래스간 의존도 낮춤
- 중복 코드를 제거
- 불필요한 노가다성 코드 제거
22.
리팩토링
- 바퀴를 다시 발명하지 말자 (라이브러리 적극 이용)
- MVVM 아키텍처 사용
- AFNetworking대신 Swift와 어울리는 Alamofire 사용
- Model 데이터를 Mapping해주는 라이브러리 사용 (ObjectMapper)
- Reactive 프로그래밍
25.
ObjectMapper
- https://github.com/Hearst-DD/ObjectMapper
- JSON 데이터를 Object에 맵핑해주는 라이브러리
- Transform을 이용하여 다양한 데이터 타입 대응가능
- Enum 값 처리 가능 (Raw Value)
- Realm Object에도 사용 가능
26.
AlamofireObjectMapper
- https://github.com/tristanhimmelman/AlamofireObjectMapper
- Alamofire의 Custom Response Serializer를 통해 구현됨
- Response Data를 바로 Object에 바인딩
45.
View / View Controller
KVO를 통해 Model과 View를 바인딩
46.
View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
47.
View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
48.
View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
49.
View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
50.
View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
51.
View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
Realm에 Response Object를 Write
52.
View Model
View / View Controller
KVO를 통해 Model과 View를 바인딩
Init과 동시에 Area 정보를 Realm에서 가져옴
AreaService를 통해 Area 데이터 요청
Realm에 Response Object를 Write
Notify
Realm 알림 기능을 통해
데이터 업데이트
53.
뷰 진입
서버에
데이터 요청
JSON Parse Realm 쓰기
Realm 읽기 UI 적용
54.
뷰 진입
서버에
데이터 요청
JSON Parse Realm 쓰기
Realm 읽기 UI 적용
Alamofire ObjectMapper
AlamofireObjectMapper
Realm Notification
KVO
55.
뷰 진입
서버에
데이터 요청
JSON Parse Realm 쓰기
Realm 읽기 UI 적용
Alamofire ObjectMapper
AlamofireObjectMapper
Realm Notification
KVO
원하던 흐름이 깔끔하게 구현되었습니다
56.
결론
- 이것저것 문제가 있던 소스를 Realm 적용과 함께 리팩토링
- 여러 라이브러리를 이용하여 Realm을 쉽게 사용
- Realm을 사용하여 UX적인 개선이 이루어짐
- iOS 앱 개발을 처음 접할 때 알았으면 좋았을 내용