일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- combine
- uitableview
- rxswift
- Xcode
- collectionview
- swiftUI
- UITextView
- SWIFT
- 리펙터링
- map
- Protocol
- HIG
- 클린 코드
- Human interface guide
- swift documentation
- tableView
- Refactoring
- Observable
- ribs
- RxCocoa
- 리펙토링
- UICollectionView
- 애니메이션
- clean architecture
- uiscrollview
- MVVM
- ios
- 리팩토링
- 스위프트
- Clean Code
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 1. WKWebView 개념 (UIWebView, AJAX, XHR, 캐시, 쿠키) 본문
[iOS - swift] 1. WKWebView 개념 (UIWebView, AJAX, XHR, 캐시, 쿠키)
jake-kim 2021. 9. 14. 00:461. WKWebView 개념 (UIWebView, AJAX, XHR, 캐시, 쿠키)
2. WKWebView 사용 방법 (쿠키, WKScriptMessageHandler, WKNavigationDelegate, WKUIDelegate)
WKWebView가 나온 배경
- iOS 8 아래 버전에서는 UIWebView를 사용했지만 deprecated되었고 WKWebView를 사용하게끔 애플에서 정의
- UIWebView는 iOS 2부터 도입, WKWebView는 iOS 8부터 도입
- WKWebView가 개발된 이유는 HTML의 컨텐츠를 표출하기 위해서 탄생
WKWebView와 UIWebView의 차이점
UIWebView | WKWebView | |
프레임워크 의존성 | UIKit프레임워크의 일부 | WebKit이라는 프레임워크의 일부 |
웹 페이즈 로드 시 메모리 오버헤드 | 높음 | 적음 |
iOS지원 버전 | iOS 8 미만 | iOS 8+ |
IndexedDB | 존재 x | 존재 o * IndexedDB: key-value쌍으로 데이터 관리에 이용 |
개체 렌더링 수 | 약 3,500개 | 약 8,500개 (성능 우수) |
1개체 렌더링 당 CPU 효율 | 90% 사용 | 25% 사용 |
로컬 파일 로드 가능 여부 | 가능 | 불가능 |
쿠기 저장 | HTTPCookieStorage에 쿠기가 저장되어 공통으로 관리 (다음 로드 시간은 이전 시간보다 짧은 장점) |
웹뷰에서 독립적으로 쿠키 관리 (HTTPCookieStorage에서 WKWebView로 쿠키가 전달되지 않는점 주의) |
메모리 사용 방식 | webView를 앱 사용공간의 일부로 보고 동작 -> 오버헤드 시 OS는 해당 앱을 종료하려 동작 (리로드 요청을 보내기도 하지만 앱 중단 발생) |
webView를 앱 별도의 메모리 공간으로 사용 -> 오버헤드 시 OS는 해당 앱에 알림 전송 (페이지 리로드 요청) |
자바 스크립트 엔진 | - | Nitro (우수, safari에서 사용하는 것과 동일) |
처리 방식 | - | 비동기적 처리 (UIWebView보다 더 빠른 속도) |
auth token 인증 방식 | 지원 x | 지원 o |
보안 인증서 처리 | x | 계속 / 호출 팝업 존재하여 보안 인증서 오류 프로세스 건너뛰기 가능 |
WKWebView를 이해하는데 필요한 기본 지식
- AJAX(Asynchronous Javascript And XML): Javascript를 이용해 서버와 브라우저가 비동기 방식으로 데이터를 교환할 수 있는 통신 기능
- 비동기 방식: AJAX로 호출한 동안 웹 페이지가 멈추어 있지 않게 하기 위함
- 브라우저가 가지고 있는 XHR 객체를 이용해서 전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 형식
- XHR (XMLHttpRequest): AJAX요청을 생성하는 Javascript API, XHR의 메서드로 브라우저와 서버간의 네트워크 요청을 전송할 수 있는 request 형식
- 캐시(cache) vs 쿠키(cookie)
Cache | Cookie | |
사용 | 웹 사이트 콘텐츠 저장 (그림 파일, 문서 파일 큰 파일 저장) |
사용자 선택 저장 (웹 서버에서 PC로 보내는 작은 파일 저장) |
저장 범위 | 브라우저에만 저장 | 서버와 브라우저에 모두 저장 |
만료 | 수동으로 만료 | 자동으로 만료 |
용량 | 많은 공간 차지 | 적은 공간 차지 |
유형 | 브라우저 캐시, 프록시 캐시 | 일시적 및 영구 쿠키 |
콘텐츠 | html 페이지, 이미지, javascript, css | 브라우징 세션, 임시 추적 데이터 |
사용자에 요청 | 요청 x | 요청 o |
WKWebView의 단점
- 앱이 종료될 경우, HTML5 로컬 저장소가 삭제
- UIWebView는 쿠키가 HTTPCookieStorage에 저장되어 공통으로 관리되지만, WKWebView는 웹뷰에서 독립적으로 쿠키가 관리되므로 쿠키를 직접 전달해야 하는 단점 존재
/// HTTPCookie 객체 생성
guard let authCookie = HTTPCookie(properties: [
.domain: sampleWebBaseDomain,
.path: sampleWebCookiePath,
.name: authTokenCookieName,
.value: accessToken,
.secure: "TRUE",
]) else { return }
/// 웹뷰에 쿠키 저장
webView.configuration.websiteDataStore.httpCookieStore.setCookie(cookie)
* 출처
- UIWebView: https://developer.apple.com/documentation/webkit/wkwebview
- WKWebView: https://developer.apple.com/documentation/webkit/wkwebview
- UIWebView vs WKWebView1: https://medium.com/@kevin.baldha/difference-between-uiwebview-and-wkwebviewapple-6f8b75819a18
- UIWebView vs WKWebView2: https://support.kioskgroup.com/article/840-wkwebview-supported-features-known-issues#local-ajax-requests
- UIWebView vs WKWebView3: https://stackoverflow.com/questions/31625522/uiwebview-or-wkwebkit-for-javascript
- AJAX: https://velog.io/@surim014/AJAX%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
- XHR: https://developer.mozilla.org/ko/docs/Glossary/XHR_(XMLHttpRequest)
- 캐시와 쿠키의 차이: https://www.geeksforgeeks.org/difference-between-cache-and-cookies/