URL Loading System
네트워크 통신에 사용하는 프레임워크와 API 집합
API 호출, 다운로드, 업로드에 관련된 기본적 네트워크 기능들이 구현되어 있음.
URLSession
Shared Session
- 기본 설정을 사용해서 옵션 전달
- 컴플리션 핸들러에서 응답 처리 방식
- 대부분의 경우 사용
Default Session
- 세션을 직접 구성 시 사용
- 델리게이트를 구현해서 요청, 응답 세부 제어 가능
- 서버에서 전달받은 응답은 기본적으로 디스크 캐시와 메모리 캐시에 저장
Ephemeral Session
- 디폴트 세션과 비슷
- 캐시나 쿠키, 인증정보를 디스크에 저장하지 않음
- 프라이빗 브라우징 처럼 흔적을 남기지 않는 기능 구현 시 사용
Background Session
- 백그라운드 접속 구현 시 사용
- 스레드 아님.
- 앱이 실행중이 아니더라도 데이터를 전송할 수 있다
Task
Data Task
Download/Upload Task
- 비교적 큰 파일을 주고 받을 때 사용
- 백그라운드 전송 지원
WebSocket Task
- 웹소켓 프로토콜을 사용하여 패킷을 직접 주고받을 때 사용
- 실시간 채팅, 다수의 접속을 빠르게 처리할 때 사용
Task 생성
- 서버에서 응답이 올 때까지 기다리지 않음
- 서버에서 응답이 오면 핸들러의 두번째 파라미터가 호출
- 즉, 클로저는 서버에서 응답이 와야 실행된다.
- 태스크를 만든다고 요청이 자동으로 전송되는 것이 아니다.
- resume()을 호출해 요청을 보내야 한다.
http 상태 코드
1xx
(조건부 응답)
2xx
(성공)
3xx
(리다이렉션)
- 요청 완료를 위해 추가 작업 조치가 필요하다
- URL이 새로운 위치로 이동했을 때 사용하는 코드
4xx
(클라이언트 오류)
- 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
400
(잘못된 요청): 요청을 만들 때 서버가 요구하는 방식으로 만들지 않음
401
(권한 없음): 로그인 실패 시 리턴 혹은 리소스 접근 권한 없을 시
403
(금지됨): 사용자가 리소스에 대한 필요 권한이 없을 때
404
(Not Found): 보통 잘못된 url 사용
405
(허용되지 않는 메소드): 요청 방식이 서버에서 요구하는 거랑 다를 때
5xx
(서버 오류)
- 서버가 명백히 유효한 요청에 대해 충족을 실패했다.
- 서버 크래시
503
, 504
: 서버가 다운되었거나 디도스 공격 받을 시
정리
1. URL 객체 생성
2. URLSession 생성
3. dataTask 생성
4. resume()
5. dataTask의 클로저 실행
- 에러 발생 확인
- response 객체 다운캐스팅으로 상태 코드 200 확인
- data를 원하는 형태로 변환하여 처리