18.02.03 스터디
기린님
HTTP 관련 앱 설정
Starting in iOS 9.0 and OS X 10.11, a new security feature called App Transport Security (ATS) is enabled by default for all HTTP connections made with URLSession. ATS requires that HTTP connections use HTTPS (RFC 2818).
third party가 아직 HTTP만 지원하는 경우 등 예외적인 상황에 대해서는 HTTP 통신을 해야할 때는 App Transport Security Settings을 바꾸어 주어야 함.
Allow Arbitrary Loads 키 값을 YES로 바꿔주는 방법이 있지만 이것은 추천되지 않는다. iOS 9의 경우 이 값만 참조하여 YES일 경우 HTTP 통신을 허용한다.
그러나 iOS 10부터는 AllowsArbitraryLoadsInWebContent(WebView 로딩을 http로 허용, AVFoundation으로 스트리밍 데이터도…?)값을 참조한다. 이 값이 NO거나 설정되지 않을 경우(default가 NO) iOS 9의 경우와 같다. 그러나 이 값이 YES일 경우 UIWebView, URLSession 대신 WKWebView만 HTTP 통신을 할 수 있다. 이것을 통해 웹뷰를 띄워주는 것은 가능하지만 앱의 다른 경우에는 https를 사용하도록 하여 보안성이 강화된다.
또는 Exception Domains를 지정해 제외하고 싶은 도메인을 설정하는 방법이 추천된다.
참고 링크: iOS10 AppTransport Security - Swifter.kr
HTTP의 특성
앱에서 HTTP를 사용하는 이유는 Connectionless/Stateless 하게 서버랑 통신하기 위해서이다. 만약 포트를 열어두어 계속 통신하면 그에 따르는 비용이 발생하기 때문이다.
- Connectionless: 클라이언트가 request를 보내고 서버가 response를 보내면 서로 통신이 끊기는 것.
- Stateless: 서로 통신이 끊기면 상태 정보를 유지하지 않음.
대칭키 / 비대칭키
- 대칭키(예: DES(56비트) / AES(128비트))
서로 같은 키로 암호화, 복호화를 하는 것. 속도가 빠르지만 키 관리가 어렵고 서로 키를 주고 받는 것 자체가 어려울 수 있음. - 비대칭키 (예: RSA)
공개 키를 통해 암호화하고 권한을 가진 사용자가 가진 비공개 키로 복호화해서 보는 것. RSA 같은 경우 큰 소수의 곱으로 공개키를 만들며 이것은 힌트가 없을 경우 복호화하기 힘들다는 점을 사용해 이 힌트가 바로 비공개 키가 된다. 공개키 방식을 사용하면 굳이 주고 받지 않아도 되기 때문에 사용자끼리 만날 필요도 없다.
URI vs. URL
URI가 URL을 포함하는 큰 캐념이다.
- URI: 통합 자원 식별자(Uniform Resource Identifier, URI)는 인터넷에 있는 자원을 나타내는 유일한 주소
- URL(Uniform Resource Locator, 문화어: 파일식별자, 유일자원지시기)은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약
쿠키 vs 세션
HTTP의 Connectionless, Stateless의 단점을 보완하기 위해 사용.
쿠키
- 하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴퓨터에 설치되는 작은 기록 정보 파일을 일컬음.
- 이름, 값, 만료 날짜, 경로 정보가 저장될 수 있음.
- 사용자의 하드에 저장되어 필요할 때 사용할 수 있음.
- 클라이언트에 총 300개까지 저장할 수 있으며 한 도메인 당 20개까지 저장 가능.
세션
- 클라이언트와 웹 서버간의 연결이 지속되고 있는 상태.
- HTTP는 매 접속 시 새로운 네트워크 연결을 하는데 이 때 세션이 연결 유지를 담당.
- 세션 ID를 쿠키에 저장해서 보관.
- 서버에 관리하기 때문에 보안에 우수하지만 리소스를 필요로 하는 단점이 존재.
- 정보를 저장할 때 쿠키(접속했는지, 만료 기간)는 클라이언트가, 세션은 서버가 관리. 그래서 속도는 쿠키가 더 빠르다.
지은님
애플의 MVC
기존의 MVC(보통 웹)와 다른점은 Model과 View가 완전히 독립적이어야 한다는 것이다. 단점으로는 모든 로직이 VC에 집중되어 VC가 비대해지는 단점이 있다.
MVVM(기린님)
MVC의 Massive ViewController 문제점을 타파하기 위해 나온 패턴.
ViewModel을 만들어 좀 더 나누어 보자. ViewModel이 로직을 가지고 Model을 가공하여 VC에 알려주게 된다. VC는 그것을 가지고 View를 구성한다.
도우님
ViewController Life Cycle
네비게이션 컨트롤러에서 푸시를 할 경우 첫 번째 뷰에서 viewDidDisappear
가 불리는 때는 두 번째 뷰가 Appear할 준비가 다 된 viewWillAppear
가 불린 후이다.